2009-09-06 35 views
7

Tengo un pequeño problema en el que me gustaría insertar un svn diff de un documento LaTeX en otro documento LaTeX, el objetivo es mostrar qué ha cambiado desde la revisión XXX. Sin embargo, dado que el diff contiene muchos comandos LaTeX, no puedo incluirlo directamente en el documento, ya que LaTeX los interpondrá y no solo "imprimirá".¿Cómo mostrar el código LaTeX en un documento LaTeX?

Hoy tengo esto en mi 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)) 

Y al final del documento LaTeX tengo esto:

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

Pero esto falla duro!

Mi próxima idea es escribir un script en Perl que reemplace todos los caracteres inválidos con algo que LaTeX pueda mostrar, pero parece que me arriesgaré a reinventar la rueda, así que pensé que podría preguntar si alguien tenía una mejor idea ?

¿Cómo incluyo y muestro código LaTeX en el documento?

Gracias Johan


actualización: Gracias "desconocido (Google)" por señalar textualmente, que hizo lo que yo quería.

Actualización: También parece que debería probar los listados que las3rjock nos contó, ya que se ven muy bien.

Actualización: No se pudo obtener listados que funcionen en mi caso, recibo algunas advertencias utf extrañas sobre caracteres inválidos. Pero al pie de la letra funciona, entonces usaré esta vez.

Respuesta

7

Hay un paquete verbatim que puede incluir con \usepackage{verbatim} y acceder utilizando \verbatiminput{ nombre de archivo }.

+5

acuerdo. Iba a recomendar el paquete de listados que ofrece lo mismo en el comando \ lstinputlisting {filename}. Particularmente para los archivos generados por programación como un diff, esta es la manera correcta, ya que mantiene el archivo TeX que lo contiene como una plantilla agradable y limpia. – Boojum

+3

Sí, lstinputlisting es casi siempre mejor que la versión literal. Evito al pie de la letra en casi todas las ocasiones. –

12

I segunda recomendación de Boojum en un comentario a otra respuesta que utiliza el paquete listings. Para las listas de códigos LaTeX, uso la configuración que encontré en el paquete classicthesis de André Miede. Aquí es un documento de muestra (quine.tex) y su salida:

\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

Esa es una de las mejores soluciones del paquete de listados. Incluso he hecho una inclusión especial que define varias configuraciones de idioma para php, xml, sql, etc. – Sorcerer86pt