Подсветка исходного кода в LaTeX

Мне нужно выделить исходный код в LaTeX. Посылка listings кажется лучшим выбором для большинства вариантов использования, и для меня это было до сих пор.

Однако сейчас мне нужно больше гибкости. Вообще то, что я ищу, это настоящий лексер. В частности, мне нужно (для определения собственного языка) определить (и выделить!) Собственные стили чисел. listings не позволяет выделять цифры в коде. Тем не менее, мне нужно произвести что-то вроде этого:

Требуемый результат

listings также не может справиться с произвольными разделителями для строк. Рассмотрим следующий допустимый код Ruby:

s = %q!this is a string.!

Вот, ! можно заменить практически любым разделителем.

(Тот listings не может справиться с Юникодом, это тоже довольно досадно, но это еще одна проблема.)

В идеале я ищу расширение listings это позволяет мне предоставлять более сложные правила лексизма. Но, кроме этого, я также ищу жизнеспособные альтернативы.

Другие потоки предложили использовать Pygments, которые могут генерировать вывод LaTeX. Там даже пакет - texments - чтобы облегчить переход.

Тем не менее, это очень не хватает функций. В частности, меня интересует listings в стиле нумерации строк, ссылки на строки исходного кода и возможность встраивания LaTeX в исходный код (параметры texcl а также mathescape в listings).

В качестве примера, вот набор текста исходного кода с listings который показывает некоторые вещи, которые замена должна также обеспечить:

Пример списков LaTeX: боковое дополнение ["Боковое дополнение" модифицировано из "Битовых хедчей"]

3 ответа

Решение

Принимая совет Нормана близко к сердцу, я собрал воедино решение, в котором использовались ( исправленные) фрагменты для выделения и добавления как можно большего числа функций без разрывов;-)

Я также создал пакет LateX, как только мой патч Pygments был выпущен в версии 1.2...

Представление отчеканенного

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

(Но отчеканенный также работает с latex а также pdflatex...)

minted.sty работает аналогично texments.sty но позволяет дополнительные функции.

Как получить его

Еще раз спасибо Норману за то, что он мотивировал меня на создание этого пакета.

TeX (классно) завершен по Тьюрингу, но я уверен, что вам придется написать это расширение самостоятельно. Документация дает понять, что первоначальный автор listings осиротел в 2004 году и не обновлялся с 2006 года. Пакет не предназначен для переопределения форматирования числовых литералов, но вы можете изменить его, изменив определение \lst@ProcessDigit, Если это не сработает, вам нужно будет подробно понять, как работают параметры "стиля идентификатора", и вам придется продублировать этот механизм для ваших числовых литералов.

Я не совсем понимаю, почему вы так неохотно вводите внешний инструмент в свою цепочку инструментов, но поскольку вам это нужно, вам придется проделать дополнительную работу. После просмотра исходного кода я ожидаю, что изменение listings должно быть возможно, но я лично предпочел бы предварительно обработать мой LaTeX.

Это пакет, который преобразует исходный код в TeX и LaTeX с подсветкой синтаксиса. Можно легко добавить пользовательские определения языка программирования.

Highlight поддерживает 100 языков программирования и включает 50 цветовых тем. Он имеет переформатирование кода и отступ.

Я не использовал его, чтобы узнать, как ХОРОШО это работает, но кто-то из моих знакомых сказал, что это работает довольно хорошо. Если у меня будет шанс, я сам попробую и посмотрю.

Другие вопросы по тегам