有没有办法使用该包将目录中的所有文件和报告中的所有子目录作为代码附录包含在内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}