Вопрос

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

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

Required result

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

s = %q!this is a string.!

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

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

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

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

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

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

LaTeX listings example: Sideways addition [“Боковое добавление”, модифицированное из взломов с поворотом бит]

Это было полезно?

Решение

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

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

Представляя отчеканенный

отчеканенный это пакет, который использует Pygments для обеспечения первоклассной подсветки синтаксиса в 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 но допускает дополнительные функции.

Как это получить

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

Другие советы

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top