web-dev-qa-db-ja.com

LaTeXでのソースコードの強調表示

LaTeXでソースコードを強調する必要があります。パッケージlistingsは、ほとんどのユースケースにとって最良の選択であるように思われます。

しかし、今はもっと柔軟性が必要です。一般的に、私が探しているのはreallexerです。特に、(独自の言語定義のために)独自の数値スタイルを定義(および強調表示)する必要があります。 listingsは、コード内の数字の強調表示を許可しません。ただし、次のようなものを作成する必要があります。

Required result

listingsは、文字列の任意の区切り文字にも対応できません。次の有効なRubyコードを考慮してください。

s = %q!this is a string.!

ここで、!はほぼany区切り文字に置き換えることができます。

listingsはUnicodeを処理できないことも非常に厄介ですが、それは別の問題です。)

理想的には、より複雑な字句規則を提供できるlistingsの拡張を探しています。しかし、それを除いて、私は実行可能な代替案も探しています。

その他のスレッド LaTeX出力を生成できる Pygments の使用を提案しています。移行を容易にするためのパッケージ( texments )もあります。

ただし、これには機能がほとんどありません。特に、listingsスタイルの行番号付け、ソースコードの行参照、およびソースコードにLaTeXを埋め込む可能性(texclのオプションmathescapeおよびlistings)に興味があります。

例として、以下にlistingsを使用したソースコードタイプセットを示します。これは、置換が提供するものの一部を示しています。

LaTeX listings example: Sideways addition[Bit Twiddling Hacksから変更された「サイドウェイの追加」]

184
Konrad Rudolph

ノーマンのアドバイスを真Takingに受け止めて、ハイライトに( patched )Pygmentsを使用し、破裂することなくできるだけ多くの機能を押し込んだソリューションを一緒にハックしました;-)

Pygmentsパッチが バージョン1.2 でリリースされたら、LateXパッケージも作成しました。

提示minted

mintedは、Pygmentsを使用して最高の構文を提供するパッケージですLaTeXでの強調表示。たとえば、次の出力が可能です。

fancy LaTeX example

上記のコードを再現するための最小限のファイルを次に示します(Unicode文字を含めるにはXeTeXが必要な場合があることに注意してください)!

\documentclass[a4paper]{article}
\usepackage{fontspec}
\usepackage{minted}

\setsansfont{Calibri}
\setmonofont{Consolas}

\begin{document}
\renewcommand{\theFancyVerbLine}{
  \sffamily\textcolor[rgb]{0.5,0.5,0.5}{\scriptsize\arabic{FancyVerbLine}}}

\begin{minted}[mathescape,
               linenos,
               numbersep=5pt,
               gobble=2,
               frame=lines,
               framesep=2mm]{csharp}
  string title = "This is a Unicode π in the sky"
  /*
  Defined as $\pi=\lim_{n\to\infty}\frac{P_n}{d}$ where $P$ is the perimeter
  of an $n$-sided regular polygon circumscribing a
  circle of diameter $d$.
  */
  const double pi = 3.1415926535
\end{minted}
\end{document}

これは、次のコマンドを使用してタイプセットできます。

xelatex -Shell-escape test.tex

(ただし、mintedlatexおよびpdflatex…でも機能します)

minted.stytexments.styと同様に機能しますが、追加機能を使用できます。

入手方法

このパッケージを作成する動機を与えてくれたノーマンに感謝します。

336
Konrad Rudolph

TeXは(有名な)チューリング完全ですが、この拡張機能を自分で記述する必要があると確信しています。ドキュメントでは、listingsの元の作成者が2004年にそれを孤立させ、2006年以降更新されていないことを明確にしています。 \lst@ProcessDigitの定義を変更して変更します。それが機能しない場合は、「識別子スタイル」オプションがどのように機能するかを詳細に理解する必要があり、数値リテラルに対してその機構を複製する必要があります。

外部ツールをツールチェーンに導入することにあまり気が進まない理由はよくわかりませんが、そのため、余分な作業が必要になります。ソースコードを見て、listingsの変更が可能になるはずですが、個人的にLaTeXを前処理することを選択します。

5
Norman Ramsey

This は、ソースコードをTeXおよびLaTeXに変換し、構文を強調表示するパッケージです。カスタムプログラミング言語の定義を簡単に追加することができます。

Highlightは100のプログラミング言語をサポートし、50のカラーテーマが含まれています。コードの再フォーマットとインデントが特徴です。

私はそれがどのようにうまく機能するかを知るためにそれを使用していませんが、私が知っている他の誰かがそれがかなりうまくいったと言いました。機会があれば、自分で試して見てみましょう。

3
homerj