Wie kann ich automatisch alle Quellcodedateien einschließen, die sich in einem bestimmten Verzeichnis befinden?

Wie kann ich automatisch alle Quellcodedateien einschließen, die sich in einem bestimmten Verzeichnis befinden?

listingsGibt es eine Möglichkeit, mithilfe des Pakets alle Dateien in einem Verzeichnis und allen Unterverzeichnissen als Codeanhang in einen Bericht aufzunehmen ?

listingsIch weiß, dass ich mit dem Paket und jede einzelne Datei einbinden kann \lstinputlisting, frage mich aber, ob es einen schnelleren Weg gibt, sie in einen Codeanhang einzufügen ...

Antwort1

Eine gute Lösung, die auch für Inserate funktioniert, wurde hier bereitgestellt:So durchlaufen Sie die Namen von Dateien in einem Ordner. Dazu müssen Sie den Code einfach wie folgt ändern:

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

Beachten Sie, dass Sie unter Windows die Befehle durch etwas wie Folgendes ersetzen müssen \app@exe(nicht getestet, aber basierend auf der Antwort im vorherigen Thread):

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

Der von mir angegebene Code schließt alle Dateien des Verzeichnisses ein. Wenn Sie nur Dateien mit einer bestimmten Erweiterung einschließen möchten, können Sie diese direkt im \app@exeBefehl angeben.

Vergessen Sie nicht, mit zu kompilieren pdflatex -shell-escape yourfile.tex.

Antwort2

Ich habe versucht, damit Python-Code zu laden. Ihr Beispiel hat jedoch nur die Namen der Dateien aufgelistet. War das die Absicht? Wie auch immer, das Folgende scheint für mich zu funktionieren. Gibt es einen eleganteren Weg?

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

verwandte Informationen