2009-09-06 30 views
7

Ho un piccolo problema in cui vorrei inserire un svn diff di un documento LaTeX in un altro documento LaTeX, l'obiettivo è mostrare cosa è cambiato dalla revisione XXX. Tuttavia, poiché il diff contiene molti comandi LaTeX, non posso includerlo direttamente nel documento poiché LaTeX li intercetterà e non li "stamperà" semplicemente.Come mostrare codice LaTeX in un documento LaTeX?

Oggi ho questo nel mio Makefile

DIFF_INFO=diff.info.tex 
DIFF_REV=167 
diffinfo: 
    $(shell echo "\n" > $(DIFF_INFO)) 
    $(shell echo "\\section{diff $(DIFF_REV)} \n" >> $(DIFF_INFO)) 
    $(shell echo \\\\begin{verbatim} >> $(DIFF_INFO)) 
    $(shell svn diff --revision $(DIFF_REV) $(N).tex >> $(DIFF_INFO)) 
    $(shell echo \\\\end{verbatim} >> $(DIFF_INFO)) 

E alla fine del documento LaTeX ho questo:

\IfFileExists{diff.info.tex} 
{ 
    \newpage 
    \input{diff.info.tex} 
} 

Ma questo non riesce difficile!

La mia prossima idea è scrivere uno script perl che sostituisca tutti i caratteri non validi con qualcosa che LaTeX può mostrare, ma sembra che sto rischiando di reinventare la ruota, così ho pensato che avrei potuto chiedere se qualcuno avesse un'idea migliore ?

Come inserire e mostrare il codice LaTeX nel documento?

Grazie Johan


Aggiornamento: Grazie "sconosciuto (google)" per indicare alla lettera, ha fatto quello che volevo a.

Aggiornamento: mi sembra anche che dovrei provare che gli elenchi che las3rjock ci ha parlato dal momento che sembra una specie di piacevole.

Aggiornamento: Impossibile ottenere le inserzioni per funzionare nel mio caso, ricevo alcuni avvisi utf su caratteri non validi. Ma il verbatim funziona, quindi questa volta userò in quel modo.

risposta

7

C'è' un pacchetto verbatim che è possibile includere con \usepackage{verbatim} e l'accesso utilizzando il nome del file \verbatiminput{}.

+5

D'accordo. Stavo per raccomandare il pacchetto di annunci che offre la stessa cosa nel comando \ lstinputlisting {filename}. In particolare per i file generati a livello di codice come un diff, questo è il modo in cui andare visto che mantiene il file TeX contenente un modello pulito e semplice. – Boojum

+3

Sì - lstinputlisting è quasi sempre migliore di verbatiminput. Evito letteralmente in quasi tutte le occasioni. –

12

I seconda raccomandazione di Boojum in un commento a un'altra risposta che si utilizza il pacchetto listings. Per gli elenchi di codici LaTeX, utilizzo le impostazioni che ho trovato nel pacchetto classicthesis di André Miede. Ecco un documento di esempio (quine.tex) e la sua uscita:

\documentclass[12pt,letterpaper]{article} 
\usepackage{listings} 
\usepackage[usenames,dvipsnames]{color} 

% listings settings from classicthesis package by 
% Andr\'{e} Miede 
\lstset{language=[LaTeX]Tex,%C++, 
    keywordstyle=\color{RoyalBlue},%\bfseries, 
    basicstyle=\small\ttfamily, 
    %identifierstyle=\color{NavyBlue}, 
    commentstyle=\color{Green}\ttfamily, 
    stringstyle=\rmfamily, 
    numbers=none,%left,% 
    numberstyle=\scriptsize,%\tiny 
    stepnumber=5, 
    numbersep=8pt, 
    showstringspaces=false, 
    breaklines=true, 
    frameround=ftff, 
    frame=single 
    %frame=L 
} 

\begin{document} 
\lstinputlisting{quine.tex} 
\end{document} 

LaTeX document displaying its own source code
(click to enlarge)

+0

Questa è una delle migliori soluzioni del pacchetto di annunci. Avevo persino creato una speciale che definisce diverse impostazioni della lingua per php, xml, sql, ecc ... – Sorcerer86pt