LaTeX でのソースコードの強調表示
-
21-09-2019 - |
質問
LaTeX のソース コードを強調表示する必要があります。その包み listings
ほとんどのユースケースではこれが最良の選択であるようで、私にとってはこれまでそうでした。
しかし、今はもっと柔軟性が必要です。一般的に、私が探しているのは、 本物 レクサー。特に、(独自の言語定義のために) 独自の数値スタイルを定義 (そしてハイライト!) する必要があります。 listings
コード内の数字を強調表示することはできません。ただし、次のようなものを作成する必要があります。
listings
また、文字列の任意の区切り文字にも対応できません。次の有効な Ruby コードを考えてみましょう。
s = %q!this is a string.!
ここ、 !
ほぼ置き換えることができます どれでも デリミタ。
(それ listings
Unicode を処理できないことも非常に厄介ですが、それは別の問題です。)
理想的には、次の拡張を探しています。 listings
これにより、より複雑な字句解析ルールを提供できるようになります。しかし、それを除けば、私は実行可能な代替案も探しています。
他のスレッド の使用を提案しました 顔料 LaTeX 出力を生成できます。パッケージもあります – texments
– 移行を容易にするため。
ただし、これには機能が著しく欠けています。特に興味があるのは、 listings
-style の行番号付け、ソース コードの行参照、ソース コードへの LaTeX の埋め込みの可能性 (オプション) texcl
そして mathescape
で listings
).
例として、次のソース コード タイプセットを示します。 listings
これは、代替品が提供する必要があるもののいくつかを示しています。
[Bit Twiddle Hacks を改変した「横足し算」]
解決
Norman のアドバイスを心に留めて、私は ( パッチが適用された) ハイライト用の顔料を使用し、バーストすることなくできるだけ多くの機能を押し込みました ;-)
Pygments パッチがリリースされた後、LateX パッケージも作成しました。 バージョン1.2 …
プレゼンテーション 鋳造された
鋳造された は、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
(しかし 鋳造された とも連携します latex
そして pdflatex
…)
minted.sty
に似た作品 texments.sty
ただし、追加機能は許可されます。
入手方法
ドキュメンテーション ももちろん含まれています。
鋳造された 現在は Geoffrey Poore によって保守されています。最新バージョンを含む開発バージョン
.sty
ファイル, 、で入手可能です github.com/gpoore/minted, 、そこからクローンを作成できます。
このパッケージを制作する動機を与えてくれた Norman にもう一度感謝します。
他のヒント
TeXはチューリング完全(有名)ですが、私はあなたがこの拡張機能を自分で書くために必要があるとしているかなり確信しています。ドキュメントは、それがlistings
の原作者は、2004年にそれを孤立したことが明らかになり、それが2006年以来更新されていないパッケージは数値リテラルの書式設定を上書きするように設計されていなかった、しかし、あなたが変更することで、それを変更することができるかもしれないこと\lst@ProcessDigit
の定義。それが仕事をしない場合、あなたはどのように「識別子スタイル」オプションの作業を詳細に理解する必要があります、あなたはあなたの数値リテラルのためにその機械を複製する必要があります。
私はかなり理解していないが、あなたがしているので、あなたは余分な作業を行う必要があるでしょう。ソースコードを見た後、私はlistings
を修正することは可能なはずですが、私は個人的に代わりに私のLaTeXを前処理することを選択するだろうと期待しています。
このには、構文の強調表示とTeXとラテックスにソースコードを変換するパッケージです。簡単にカスタムプログラミング言語の定義を追加することができます。
ハイライトは100のプログラミング言語をサポートし、50色のテーマを含んでいます。それは、コードの再フォーマットやインデントを備えています。
私はそれがどのように動作するかをよく知っているためにそれを使用していないが、他の誰かが私の知っているが、それはかなりよく働いたと述べました。私はチャンスを得る場合、私は自分自身からそれを試してみて、表示されます。