在 LaTeX 中输入多个文件

在 LaTeX 中输入多个文件

假设我有一个包含一堆 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}

相关内容