¿Hay alguna manera de incluir todos los archivos en un directorio y todos los subdirectorios en un informe como un apéndice de código usando el listings
paquete?
Sé que puedo incluir cada archivo individual usando el listings
paquete y \lstinputlisting
, pero me pregunto si hay una manera más rápida de insertarlos en un apéndice de código...
Respuesta1
Aquí se proporciona una buena solución que también funciona para listados:Cómo iterar sobre el nombre de los archivos en una carpeta. Sólo tienes que modificar el código así:
\documentclass{article}
\usepackage{listings}
\makeatletter
\def\app@exe{\immediate\write18}
\def\listDir#1{%
\app@exe{ls #1/* | xargs cat >> \jobname.tmp}%
\lstinputlisting{\jobname.tmp}
\AtEndDocument{\app@exe{rm -f #1/\jobname.tmp}}}
\makeatother
\begin{document}
\listDir{your_directory}
\end{document}
Tenga en cuenta que, si está ejecutando Windows, tendrá que reemplazar \app@exe
los comandos por algo como (no probado, pero basado en la respuesta dada en el hilo anterior):
\app@exe{cmd /c dir /b * > \jobname.tmp}%
\AtEndOfDocument{\app@exe{rm -f #1/\jobname.tmp}}}
El código que proporcioné incluirá todos los archivos del directorio. Si desea incluir solo archivos con una extensión determinada, puede especificarla directamente en \app@exe
el comando.
No olvides compilar usando pdflatex -shell-escape yourfile.tex
.
Respuesta2
Estaba intentando usar esto para cargar código Python. Sin embargo, su ejemplo solo enumera los nombres de los archivos. ¿Era esa la intención? De todos modos, lo siguiente parece funcionar para mí. ¿Existe una forma más elegante?
\documentclass{article}
\usepackage[cache=false]{minted}
\usepackage{listings}
\usepackage{pgffor}
\usepackage{pgfplotstable}
\usemintedstyle{friendly} % Python Code Style
\makeatletter
\def\app@exe{\immediate\write18}
\def\createData#1{%
\app@exe{cmd /c dir /b *.py > \jobname.dat}%
\AtEndDocument{\app@exe{cmd rm -f #1/\jobname.dat}}}
\makeatother
\begin{document}
\createData{.}% from the current dir
\pgfplotstableread[header=false]{\jobname.dat}{\mytable}
\pgfplotstablegetrowsof{\mytable}
\pgfmathsetmacro{\rows}{\pgfplotsretval-1}
\foreach \i in {0,...,\rows} {
\pgfplotstablegetelem{\i}{[index]0}\of\mytable
\subsection*{Source code for \textsf{\pgfplotsretval}}
\inputminted[
frame=lines,
framesep=2mm,
baselinestretch=1.2,
%bgcolor=gray,
fontsize=\footnotesize,
linenos
]
{python}{\pgfplotsretval}
}
\end{document}