Выделение исходного кода в LaTeX
Мне нужно выделить исходный код в LaTeX. Пакет listings
кажется лучшим выбором для большинства случаев использования, и для меня это было до сих пор.
Однако теперь мне нужна большая гибкость. В общем, то, что я ищу, - настоящий лексер. В частности, мне нужно (для определения собственного языка) определять (и выделять!) Собственные стили номеров. listings
не позволяет выделять номера в коде. Однако мне нужно создать что-то вроде этого:
![Required result]()
listings
также не может справиться с произвольными разделителями для строк. Рассмотрим следующий действующий код Ruby:
s = %q!this is a string.!
Здесь !
может быть заменен почти любым разделителем.
(То, что listings
не может обрабатывать Юникод, также довольно досадно, но это еще одна проблема.)
В идеале я ищу расширение listings
, которое позволяет мне предоставлять более сложные правила лексики. Но, не допуская этого, я также ищу жизнеспособные альтернативы.
Другие темы предложили использовать Pygments, который может производить вывод LaTeX, Theres даже пакет - texments
- чтобы облегчить переход.
Однако у этого нет недостатков. В частности, меня интересует нумерация строк listings
, ссылки на исходные коды кода и возможность вложения LaTeX в исходный код (опции texcl
и mathescape
в listings
).
В качестве примера, heres набор исходных кодов с listings
, который показывает некоторые из вещей, которые должна также обеспечить замена:
[ "Боковое добавление", измененное с помощью бит Twiddling Hacks]
Ответы
Ответ 1
Взяв Норманса за сердце, Ive взломал решение, которое использовало (a исправлено) Пигменты для выделения и нажатия на как можно больше функций без разрыва; -)
Ive также создал пакет LateX, как только патч Pyigs был выпущен в версия 1.2...
Представление чеканки
minted - это пакет, который использует Pyigs для обеспечения подсветки синтаксиса в LaTeX. Например, он позволяет получить следующий результат.
![fancy LaTeX example]()
Ищите минимальный файл для воспроизведения вышеуказанного кода (обратите внимание, что в том числе символы 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
, но допускает дополнительные функции.
Как его получить
Еще раз спасибо Norman за то, что он мотивировал меня создать этот пакет.
Ответ 2
TeX (классно) Turing-complete, но я уверен, что вам придется писать это расширение самостоятельно. В документации ясно, что оригинальный автор listings
потерял ее в 2004 году и не обновлялся с 2006 года. Пакет не был предназначен для переопределения форматирования числовых литералов, но вы могли бы его модифицировать изменив определение \[email protected]
. Если это не сработает, вам нужно будет детально понять, как работают опции "стиль идентификатора", и вам придется дублировать это оборудование для ваших числовых литералов.
Я не совсем понимаю, почему вы так неохотно вводите внешний инструмент в свою инструментальную цепочку, но поскольку вы находитесь, вам придется выполнять дополнительную работу. Посмотрев исходный код, я ожидаю, что модификация listings
должна быть возможной, но я лично предпочел бы предварительно обработать мой LaTeX.
Ответ 3
Это - пакет, который преобразует исходный код в TeX и LaTeX с подсветкой синтаксиса. Можно легко добавлять пользовательские определения языка программирования.
Выделение поддерживает 100 языков программирования и включает 50 цветных тем. Он содержит переформатирование кода и отступы.
Я не использовал его, чтобы знать, как он работает, но кто-то другой, которого я знаю, сказал, что он работает очень хорошо. Если у меня будет шанс, я попробую сам и посмотрю.