Как окрашивать линии в LaTeX, которые соответствуют регулярным выражениям - PullRequest
3 голосов
/ 05 января 2010

В настоящее время я использую пакет списков LaTeX для отображения блока кода и сравнения файла с предыдущей версией.

Оба блока окрашены списками, как если бы они были кодом (каким они являются), но я бы хотел покрасить diff аналогично режиму diff в emacs - красный для строк, соответствующих ^-, зеленый для ^\+ и т. Д.

Кто-нибудь знает, есть ли пакет для достижения этого, могут ли списки сделать это, или можно ли написать команду LaTeX, чтобы сделать это? (а точнее - где найти хороший источник информации о последних?)

Спасибо

Худ

Ответы [ 2 ]

2 голосов
/ 05 января 2010

Если вам нужны только неукрашенные различия, Pygments поддерживает их, поэтому texments (латексная оболочка для фрагментов) делает то, что вы хотите.

Но я предполагаю, что вам нужно, чтобы цвет разлился, а синтаксис основного кода был выделен соответствующим образом. Как правило, этого нельзя делать обычным способом, поскольку подсветка синтаксиса может зависеть от состояния из предыдущей строки, а с помощью udiffs предыдущая строка может отсутствовать или вставленная строка может следовать за удаленной строкой, & c.

Чтобы сделать все правильно, вам нужно синтаксически выделить старые и новые версии, а затем объединить выделенные версии вместе, чтобы получить правильный вывод. Довольно много работы, и я не слышал ни о ком, кто это делал.

Вы также можете попробовать просто изменить обычную подсветку синтаксиса для языка, удалить правила подсветки, которые включают многострочное состояние, и вставить правила в цветные линии с разметкой udiff. Ср Фрагменты ' Напишите свой собственный лексер ; то, что вы хотите от diff, сложнее, так как вы хотите, чтобы то, что окрашено, было выделено, поэтому вы не можете просто превратить строки в GenericTokens; Я не знаю, как правильно это сделать.

0 голосов
/ 05 января 2010

Используйте инструмент для создания сценариев, такой как sed, awk, Python [lang of choice] для создания исходного кода латекса.

...