Existe uma maneira de incluir todos os arquivos em um diretório e todos os subdiretórios em um relatório como um apêndice de código usando o listings
pacote?
Eu sei que posso incluir cada arquivo individual usando o listings
pacote e \lstinputlisting
, mas só estou me perguntando se existe uma maneira mais rápida de inseri-los em um apêndice de código...
Responder1
Uma boa solução que também funciona para listagens foi fornecida aqui:Como iterar pelo nome dos arquivos em uma pasta. Você só precisa modificar o código assim:
\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}
Observe que, se você estiver executando no Windows, terá que substituir \app@exe
os comandos por algo como (não testado, mas com base na resposta dada no tópico anterior):
\app@exe{cmd /c dir /b * > \jobname.tmp}%
\AtEndOfDocument{\app@exe{rm -f #1/\jobname.tmp}}}
O código que forneci incluirá todos os arquivos do diretório. Se você deseja incluir apenas arquivos com uma determinada extensão, você pode especificá-la diretamente no \app@exe
comando.
Não se esqueça de compilar usando pdflatex -shell-escape yourfile.tex
.
Responder2
Eu estava tentando usar isso para carregar código python. No entanto, seu exemplo listou apenas os nomes dos arquivos. Essa era a intenção? De qualquer forma, o seguinte parece funcionar para mim. Existe uma maneira mais 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}