Подсветка исходного кода в LaTeX
Мне нужно выделить исходный код в LaTeX. Посылка listings
кажется лучшим выбором для большинства вариантов использования, и для меня это было до сих пор.
Однако сейчас мне нужно больше гибкости. Вообще то, что я ищу, это настоящий лексер. В частности, мне нужно (для определения собственного языка) определить (и выделить!) Собственные стили чисел. listings
не позволяет выделять цифры в коде. Тем не менее, мне нужно произвести что-то вроде этого:
listings
также не может справиться с произвольными разделителями для строк. Рассмотрим следующий допустимый код Ruby:
s = %q!this is a string.!
Вот, !
можно заменить практически любым разделителем.
(Тот listings
не может справиться с Юникодом, это тоже довольно досадно, но это еще одна проблема.)
В идеале я ищу расширение listings
это позволяет мне предоставлять более сложные правила лексизма. Но, кроме этого, я также ищу жизнеспособные альтернативы.
Другие потоки предложили использовать Pygments, которые могут генерировать вывод LaTeX. Там даже пакет - texments
- чтобы облегчить переход.
Тем не менее, это очень не хватает функций. В частности, меня интересует listings
в стиле нумерации строк, ссылки на строки исходного кода и возможность встраивания LaTeX в исходный код (параметры texcl
а также mathescape
в listings
).
В качестве примера, вот набор текста исходного кода с listings
который показывает некоторые вещи, которые замена должна также обеспечить:
["Боковое дополнение" модифицировано из "Битовых хедчей"]
3 ответа
Принимая совет Нормана близко к сердцу, я собрал воедино решение, в котором использовались ( исправленные) фрагменты для выделения и добавления как можно большего числа функций без разрывов;-)
Я также создал пакет LateX, как только мой патч Pygments был выпущен в версии 1.2...
Представление отчеканенного
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
(Но отчеканенный также работает с latex
а также pdflatex
...)
minted.sty
работает аналогично texments.sty
но позволяет дополнительные функции.
Как получить его
отчеканенный указан на CTAN ( информация о пакете)
документация, конечно, включена.
отчеканенный теперь поддерживается Джеффри Пур. Версия для разработчиков, включая последнюю версию
.sty
файл доступен по адресу https://github.com/gpoore/minted и может быть клонирован оттуда.
Еще раз спасибо Норману за то, что он мотивировал меня на создание этого пакета.
TeX (классно) завершен по Тьюрингу, но я уверен, что вам придется написать это расширение самостоятельно. Документация дает понять, что первоначальный автор listings
осиротел в 2004 году и не обновлялся с 2006 года. Пакет не предназначен для переопределения форматирования числовых литералов, но вы можете изменить его, изменив определение \lst@ProcessDigit
, Если это не сработает, вам нужно будет подробно понять, как работают параметры "стиля идентификатора", и вам придется продублировать этот механизм для ваших числовых литералов.
Я не совсем понимаю, почему вы так неохотно вводите внешний инструмент в свою цепочку инструментов, но поскольку вам это нужно, вам придется проделать дополнительную работу. После просмотра исходного кода я ожидаю, что изменение listings
должно быть возможно, но я лично предпочел бы предварительно обработать мой LaTeX.
Это пакет, который преобразует исходный код в TeX и LaTeX с подсветкой синтаксиса. Можно легко добавить пользовательские определения языка программирования.
Highlight поддерживает 100 языков программирования и включает 50 цветовых тем. Он имеет переформатирование кода и отступ.
Я не использовал его, чтобы узнать, как ХОРОШО это работает, но кто-то из моих знакомых сказал, что это работает довольно хорошо. Если у меня будет шанс, я сам попробую и посмотрю.