¿Cómo puedo incluir automáticamente todos los archivos de código fuente ubicados en un directorio determinado?

¿Cómo puedo incluir automáticamente todos los archivos de código fuente ubicados en un directorio determinado?

¿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 listingspaquete?

Sé que puedo incluir cada archivo individual usando el listingspaquete 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@exelos 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@exeel 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}

información relacionada