假设我有一个包含一堆 LaTeX 源文件的目录,我想将它们全部输入到一个主文件中。我可以这样写:
\input{dir/file1.tex}
\input{dir/file2.tex}
\input{dir/file3.tex}
...
有没有办法使用单个命令输入目录“dir”中的所有文件?这很有用,例如,如果我想继续将文件添加到目录“dir”,但又不想记住向主文件添加其他 \input 命令。
答案1
我的建议是创建一个包含所有\input
行的文件,并使用\input
此文件(以及所有所需文件)将其包含到主文档中。保持所有内容最新的最佳方法是使用 Makefile。在 Unix 系统上,您可以使用此命令行创建包含输入行的文件:
ls dir/*.tex | awk'{printf"\\input{%s}\n",$1}'>inputs.tex
您只会inputs.tex
偶尔更新一次(或自动更新),但始终\input{inputs.tex}
在主文档中使用。使用ls
(或find
)的好处在于,您可以组合使用 shell (glob) 模式显式命名某些文件,并使用其他文件来控制以何种顺序包含哪些文件。
Makefile
GNU Make Makefile 自动执行此操作的规则如下所示:
.PHONY:全部 全部:inputs.tex 输入.tex:$(通配符目录/*.tex) ls dir/*.tex | awk'{printf"\\input{%s}\n",$$1}'>inputs.tex
调用make
将触发更新目标,如果任何包含的 TeX 文件发生更改或添加了新文件,则all
目标将会更新。inputs.tex
Shell 转义
阅读有关 PDFLaTeX 中的 shell 转义的解决方案提及法希姆·米塔,还有另一种想法:也可以在 LaTeX 源文件中执行上面提到的命令行,然后读取\input{inputs.tex}
。不过,我还没有尝试过。
答案2
你可以使用包bashful
要在 LaTeX 中执行此操作,例如使用 gniourf_gniourf 建议,你可以编写
\documentclass{minimal}
\usepackage{bashful}
\begin{document}
\bash[stdoutFile=inputs.tex]
{ shopt -s nullglob; for file in dir/*.tex; do echo "\\input{$file}"; done; }
\END
\input{inputs.tex}
\end{document}