Il codice sorgente evidenziando in LaTeX
-
21-09-2019 - |
Domanda
Ho bisogno di evidenziare il codice sorgente in LaTeX. Il listings
pacchetto sembra essere la scelta migliore per la maggior parte dei casi d'uso e per me è stato, fino ad ora.
Tuttavia, ora ho bisogno di più flessibilità. In generale, quello che sto cercando è un reale lexer. In particolare, ho bisogno (per una definizione propria lingua) per definire (ed evidenziare!) Propri stili numerici. listings
non consente evidenziando i numeri in codice. Tuttavia, ho bisogno di produrre qualcosa di simile a questo:
listings
, inoltre, non possono far fronte con delimitatori arbitrari per le stringhe. Si consideri il seguente codice Ruby valida:
s = %q!this is a string.!
Qui, !
può essere sostituito da quasi qualsiasi delimitatore.
(Questo listings
non può gestire Unicode è anche abbastanza fastidioso, ma questa è un'altra questione.)
Idealmente, sto cercando una proroga del listings
che mi permette di fornire più regole Lexing complesse. Ma il blocco delle chiamate che, io sono anche alla ricerca di valide alternative.
Altre discussioni hanno suggerito di usare Pygments che può produrre output LaTeX. C'è anche un pacchetto - texments
- per facilitare la transizione.
Tuttavia, questo manca gravemente caratteristiche. In particolare, Sono interessato a numerazione listings
-stile della linea, i riferimenti riga di codice sorgente, e la possibilità di incorporare nel codice sorgente LaTeX (opzioni texcl
e mathescape
in listings
).
A titolo di esempio, ecco una comporre codice sorgente con listings
che mostra alcune delle cose che una sostituzione dovrebbe anche fornire:
[ “Sideways Inoltre” modificata dalla Bit girarsi Hacks]
Soluzione
Prendendo il consiglio di Norman a cuore, ho messo insieme una soluzione che utilizza (una patchato ) Pygments per evidenziare e spinto in molte caratteristiche come possibile senza scoppiare; -)
Ho anche creato un pacchetto di lattice, una volta che la mia patch Pygments è stato rilasciato nella versione rel="noreferrer"> ...
Presentazione coniate
coniate è un pacchetto che utilizza Pygments per fornire sintassi di prim'ordine evidenziando in lattice. Ad esempio, consente l'uscita seguente.
Ecco un file minimo per riprodurre il codice di cui sopra (si noti che compresi i caratteri Unicode potrebbe richiedere 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}
Questo può essere impaginato utilizzando il seguente comando:
xelatex -shell-escape test.tex
(ma coniate funziona anche con latex
e pdflatex
...)
minted.sty
funziona in modo simile a texments.sty
ma permette funzionalità aggiuntive.
Come ottenerlo
-
coniate è presen- su CTAN ( pacchetto informazioni )
-
documentazione è naturalmente incluso.
-
coniate è ora mantenuto da Geoffrey Poore. La versione di sviluppo, tra cui l'ultimo file
.sty
, è disponibile all'indirizzo github.com/gpoore/minted , e può essere clonato da lì.
Ancora una volta, grazie a Norman per avermi spinto a produrre questo pacchetto.
Altri suggerimenti
TeX è (notoriamente) Turing-complete, ma sono abbastanza sicuro che si sta andando ad avere per scrivere questa estensione da soli. La documentazione chiarisce che l'autore originale di listings
orfano nel 2004, e che non è stato aggiornato dal 2006. Il pacchetto non è stato progettato per sostituire la formattazione di costanti numeriche, ma si potrebbe essere in grado di modificarlo cambiando la definizione di \lst@ProcessDigit
. Se questo non funziona, si dovrà capire in dettaglio come le opzioni "stile identificativo" Lavoro, e dovrete duplicare che le macchine per le costanti numeriche.
Non capisco perché sei così riluttante ad introdurre uno strumento esterno nella vostra toolchain, ma perché siete, dovrete fare lavoro extra. Dopo uno sguardo al codice sorgente, mi aspetto che la modifica listings
dovrebbe essere possibile, ma io personalmente sceglierei di pre-elaborare il mio LaTeX, invece.
Questo è un pacchetto che converte il codice sorgente per TeX e LaTeX con evidenziazione della sintassi. E 'possibile aggiungere le definizioni linguaggio di programmazione personalizzato facilmente.
Evidenziare supporta 100 linguaggi di programmazione e include 50 temi di colore. È dotato di codice di riformattazione e rientro.
Non ho usato per sapere come funziona, ma qualcun altro che conosco ha detto che ha funzionato abbastanza bene. Se ho avuto la possibilità di, cercherò fuori io stesso e vedere.