Podświetlanie kodu źródłowego w Latexie

Muszę wyróżnić kod źródłowy w Latexie. Pakiet listings wydaje się być najlepszym wyborem dla większości przypadków użycia i dla mnie był, aż do teraz.

Jednak teraz potrzebuję większej elastyczności. Ogólnie rzecz biorąc, to czego szukam to prawdziwy lexer. W szczególności muszę (dla własnej definicji języka) zdefiniować (i podkreślić!) własne style liczbowe. listings nie pozwala na podświetlanie liczb w kodzie. Jednak muszę wyprodukować coś takiego:

Wymagany wynik

listings nie można również poradzić sobie z arbitralnymi ogranicznikami dla łańcuchów. Rozważ następujący poprawny kod Ruby:

s = %q!this is a string.!

Tutaj ! można zastąpić prawie dowolnym ogranicznikiem.

(to, że listings nie może obsłużyć Unicode jest również dość denerwujące, ale to już inna sprawa.)

W idealnym przypadku Szukam rozszerzenia listings, które pozwoli mi na dostarczenie bardziej złożonych reguł lexingu. Ale poza tym, Szukam również realnych alternatyw.

Inne wątki zasugerowały użyciepigmentów , które mogą wytwarzać wyjście lateksu. Jest nawet paczka– texments – aby ułatwić przejście.

Jednak, to bardzo brakuje funkcji. W szczególności interesuje mnie numeracja linii w stylu listings, odwołania do linii kodu źródłowego oraz możliwość osadzania LaTeX-a w kodzie źródłowym (opcje texcl i mathescape w listings).

Jako przykład, oto zestaw kodu źródłowego z listings, który pokazuje niektóre z rzeczy, które zamiennik powinien również zawierać:

Przykład list lateksowych: dodawanie boków["Sideways addition" modified from Bit Twidling Hacki]

Author: Community, 2009-12-27

3 answers

Biorąc do serca Rady Normana, zhakowałem rozwiązanie, które wykorzystało (a łatane ) pigmenty do podświetlania i wepchnąłem jak najwięcej funkcji bez pękania; -)

Stworzyłem również Pakiet LateX, kiedy moja łatka Pygments została wydana w wersji 1.2 ...

Prezentowanie wybite

minted jest pakietem, który używa pigmentów, aby zapewnić najwyższej klasy podświetlanie składni w Latexie. Na przykład, pozwala na następujące wyjście.

fantazyjny przykład lateksu

Oto minimalny plik do odtworzenia powyższego kodu(zauważ, że włączenie znaków Unicode może wymagać 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}

Można to wpisać za pomocą następującego polecenia:

xelatex -shell-escape test.tex

(Ale działa również z latex i pdflatex ...)

minted.sty działa podobnie do texments.sty, ale umożliwia dodatkowe funkcje.

Jak go zdobyć

Jeszcze raz dziękuję Normanowi za zmotywowanie mnie do wyprodukowania tego pakietu.
 321
Author: Konrad Rudolph,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-29 12:28:43

TeX jest (znany) Turing-complete, ale jestem prawie pewien, że będziesz musiał napisać to rozszerzenie samodzielnie. Dokumentacja wyjaśnia, że oryginalny autor listings osierocił go w 2004 roku i że nie był aktualizowany od 2006 roku. Pakiet nie został zaprojektowany do nadpisywania formatowania literałów numerycznych, ale możesz go zmodyfikować, zmieniając definicję \lst@ProcessDigit. Jeśli to nie zadziała, będziesz musiał szczegółowo zrozumieć, w jaki sposób opcje "stylu identyfikatora" pracuj, a będziesz musiał zduplikować tę maszynę dla literałów numerycznych.

Nie do końca rozumiem, dlaczego tak niechętnie wprowadzasz zewnętrzne narzędzie do swojego łańcucha narzędzi, ale ponieważ tak jest, będziesz musiał wykonać dodatkową pracę. Po spojrzeniu na kod źródłowy, spodziewam się, że modyfikacja listings powinna być możliwa, ale osobiście wybrałbym preproces mojego LaTeX-a.

 5
Author: Norman Ramsey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-29 03:42:42

Ten jest pakietem, który konwertuje kod źródłowy do TeX i LaTeX z podświetleniem składni. Możliwe jest łatwe dodawanie niestandardowych definicji języka programowania.

Highlight obsługuje 100 języków programowania i zawiera 50 motywów kolorystycznych. Posiada formatowanie kodu i wcięcia.

Nie użyłem go, aby wiedzieć, jak dobrze działa, ale ktoś inny, którego znam, powiedział, że działa całkiem dobrze. Jeśli będę miał okazję, sam to wypróbuję i zobaczę.

 2
Author: homerj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-18 17:49:00