210

LaTeX のソース コードを強調表示する必要があります。パッケージlistingsは、ほとんどのユースケースに最適な選択のようであり、私にとっては今までそうでした.

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

必要な結果

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

s = %q!this is a string.!

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

( listingsUnicode を扱えないこともかなり厄介ですが、それはまた別の問題です。)

listings理想的には、より複雑なレクシング ルールを提供できる拡張機能を探しています。しかし、それを除けば、実行可能な代替手段も探しています。

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

ただし、これには機能が著しく欠けています。listings特に、形式の行番号付け、ソース コードの行参照、ソース コードに LaTeX を埋め込む可能性 (オプションtexclと)mathescapeに興味がありますlistings

listings例として、置換によって提供されるものをいくつか示したソース コード タイプセットを次に示します。

LaTeX リストの例: 横向きの足し算 [Bit Twiddling Hacks から変更された「横向きの追加」]

4

3 に答える 3

377

Normanのアドバイスを真摯に受け止め、(パッチを適用した)Pygmentsを使用してハイライトし、バーストせずに可能な限り多くの機能をプッシュするソリューションをまとめました;-)

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

ミントを提示する

mintedは、Pygmentsを使用して、LaTeXで一流の構文ハイライトを提供するパッケージです。たとえば、次の出力が可能です。

派手な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

(しかし、mintedlatexはandでも動作しpdflatexます…)

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

入手方法

繰り返しになりますが、このパッケージを作成するように動機付けてくれたNormanに感謝します。

于 2009-12-31T13:02:32.530 に答える
8

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

ツールチェーンに外部ツールを導入することになぜそれほど消極的であるかはよくわかりませんが、そうであるために、追加の作業を行う必要があります。ソース コードを見た後、変更listingsが可能であることを期待しますが、個人的には代わりに LaTeX を前処理することを選択します。

于 2009-12-29T03:42:42.110 に答える
3

これは、シンタックスハイライトを使用してソースコードをTeXおよびLaTeXに変換するパッケージです。カスタムプログラミング言語の定義を簡単に追加することができます。

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

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

于 2009-12-27T23:15:42.757 に答える