Исходный код, выделяющийся в ЛАТЕКСЕ

Я должен выделить исходный код в ЛАТЕКСЕ. Пакет listings кажется, лучший выбор для большинства примеров использования, и для меня это было, до сих пор.

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

Required result

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

s = %q!this is a string.!

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

(Это listings не может обработать Unicode, является также довольно раздражающим, но это - другая проблема.)

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

Другие потоки предложили использовать Pygments, который может произвести ЛАТЕКСНЫЙ вывод. Существует даже пакет – texments – упрощать переход.

Однако это очень испытывает недостаток в функциях. В частности, я интересуюсь listings- нумерация строк стиля, ссылки строки исходного кода и возможность встраивания ЛАТЕКСА в исходном коде (опции texcl и mathescape в listings).

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

LaTeX listings example: Sideways addition[“Поперечное дополнение”, измененное от Взломов Битового жонглирования]

185
задан Community 23 May 2017 в 02:26
поделиться

3 ответа

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

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

Представляем minted

minted - пакет, который использует Pygments для подсветки высококлассного синтаксиса в LaTeX. Например, он позволяет выводить следующее.

fancy LaTeX example

Вот минимальный файл для воспроизведения вышеуказанного кода (обратите внимание, что для включения символов Юникода может потребоваться 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

(Но minted также работает с latex и pdflatex ...)

minted. sty работает аналогично texments.sty, но обладает дополнительными возможностями.

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

  • minted перечислено в списке CTAN ( информация о пакете )

  • документация конечно же включена.

  • minted в настоящее время поддерживается Джеффри Пуром. Версия разработки, включая последний файл .sty, доступна по адресу github.com/gpoore/mint, и может быть клонирована оттуда.

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

.
338
ответ дан 23 November 2019 в 05:54
поделиться

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

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

.
5
ответ дан 23 November 2019 в 05:54
поделиться

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

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

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

.
3
ответ дан 23 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: