LaTeXでソースコードを強調する必要があります。パッケージlistings
は、ほとんどのユースケースにとって最良の選択であるように思われます。
しかし、今はもっと柔軟性が必要です。一般的に、私が探しているのはreallexerです。特に、(独自の言語定義のために)独自の数値スタイルを定義(および強調表示)する必要があります。 listings
は、コード内の数字の強調表示を許可しません。ただし、次のようなものを作成する必要があります。
listings
は、文字列の任意の区切り文字にも対応できません。次の有効なRubyコードを考慮してください。
s = %q!this is a string.!
ここで、!
はほぼany区切り文字に置き換えることができます。
(listings
はUnicodeを処理できないことも非常に厄介ですが、それは別の問題です。)
理想的には、より複雑な字句規則を提供できるlistings
の拡張を探しています。しかし、それを除いて、私は実行可能な代替案も探しています。
その他のスレッド LaTeX出力を生成できる Pygments の使用を提案しています。移行を容易にするためのパッケージ( texments
)もあります。
ただし、これには機能がほとんどありません。特に、listings
スタイルの行番号付け、ソースコードの行参照、およびソースコードにLaTeXを埋め込む可能性(texcl
のオプションmathescape
およびlistings
)に興味があります。
例として、以下にlistings
を使用したソースコードタイプセットを示します。これは、置換が提供するものの一部を示しています。
[Bit Twiddling Hacksから変更された「サイドウェイの追加」]
ノーマンのアドバイスを真Takingに受け止めて、ハイライトに( patched )Pygmentsを使用し、破裂することなくできるだけ多くの機能を押し込んだソリューションを一緒にハックしました;-)
Pygmentsパッチが バージョン1.2 でリリースされたら、LateXパッケージも作成しました。
mintedは、Pygmentsを使用して最高の構文を提供するパッケージですLaTeXでの強調表示。たとえば、次の出力が可能です。
上記のコードを再現するための最小限のファイルを次に示します(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
(ただし、mintedはlatex
およびpdflatex
…でも機能します)
minted.sty
はtexments.sty
と同様に機能しますが、追加機能を使用できます。
documentationはもちろん含まれています。
mintedは、Geoffrey Pooreによって管理されるようになりました。最新の .sty
ファイル を含む開発バージョンは github.com/gpoore/minted で入手でき、そこから複製できます。
このパッケージを作成する動機を与えてくれたノーマンに感謝します。
TeXは(有名な)チューリング完全ですが、この拡張機能を自分で記述する必要があると確信しています。ドキュメントでは、listings
の元の作成者が2004年にそれを孤立させ、2006年以降更新されていないことを明確にしています。 \lst@ProcessDigit
の定義を変更して変更します。それが機能しない場合は、「識別子スタイル」オプションがどのように機能するかを詳細に理解する必要があり、数値リテラルに対してその機構を複製する必要があります。
外部ツールをツールチェーンに導入することにあまり気が進まない理由はよくわかりませんが、そのため、余分な作業が必要になります。ソースコードを見て、listings
の変更が可能になるはずですが、個人的にLaTeXを前処理することを選択します。
This は、ソースコードをTeXおよびLaTeXに変換し、構文を強調表示するパッケージです。カスタムプログラミング言語の定義を簡単に追加することができます。
Highlightは100のプログラミング言語をサポートし、50のカラーテーマが含まれています。コードの再フォーマットとインデントが特徴です。
私はそれがどのようにうまく機能するかを知るためにそれを使用していませんが、私が知っている他の誰かがそれがかなりうまくいったと言いました。機会があれば、自分で試して見てみましょう。