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:

risultato desiderato

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:

LaTeX degli esempi: Sideways Inoltre [ “Sideways Inoltre” modificata dalla Bit girarsi Hacks]

È stato utile?

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.

esempio LaTeX fantasia

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

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top