Как автоматически включить все файлы исходного кода, расположенные в указанном каталоге?

Как автоматически включить все файлы исходного кода, расположенные в указанном каталоге?

Есть ли способ включить все файлы в каталоге и всех подкаталогах в отчет в качестве приложения к коду с помощью listingsпакета?

Я знаю, что могу включить каждый отдельный файл с помощью listingsпакета и \lstinputlisting, но мне просто интересно, есть ли более быстрый способ вставить их в приложение к коду...

решение1

Хорошее решение, которое также работает для листингов, было предложено здесь:Как перебрать имена файлов в папке. Вам просто нужно изменить код следующим образом:

\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}

Обратите внимание, что если вы работаете под Windows, вам придется заменить \app@exeкоманды на что-то вроде (не проверено, но основано на ответе, данном в предыдущей теме):

\app@exe{cmd /c dir /b * > \jobname.tmp}%
\AtEndOfDocument{\app@exe{rm -f #1/\jobname.tmp}}}

Код, который я дал, включит все файлы каталога. Если вы хотите включить только файлы с заданным расширением, вы можете указать его непосредственно в \app@exeкоманде.

Не забудьте скомпилировать с использованием pdflatex -shell-escape yourfile.tex.

решение2

Я пытался использовать это для загрузки кода Python. Однако ваш пример перечислил только имена файлов. Это было намерением? В любом случае, следующее, похоже, работает для меня. Есть ли более элегантный способ?

\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}

Связанный контент