我们的化学老师给了我们一套词汇卡,其中包括我们应该能够解释的所有术语(期待期末考试)。因为只有这些卡片并不能帮助我和朋友创建一个词汇表。目前,该集合包含大约 180 个术语。考虑到最终文档的大小,我们决定将LaTeX
这个项目分成单个文件,以便我们能够非常轻松地处理不同的术语。该项目的初始设置如下所示:
每个术语都应该在子文件夹中获得一个文件entries
。是否可以使用单个命令将所有文件输入到主文件中?是否有类似的东西\input{entries/*}
?
编辑:
这些文件应该以术语解释的名称命名。因此,这些文件不会被编号,并且具有完全不同的名称。
答案1
如果文件按顺序编号,那么您可以使用pgffor
包通过循环插入它们:
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\foreach \x in {1,...,10}{
\input{file\x}
}
\end{document}
这将输入file1
到file10
您的文档中。
如果文件具有任意名称,您仍然可以使用循环,但每个名称都需要在命令中指定\foreach
,例如\foreach \x in {worda,wordb,wordc}
等。
这回答了您的实际问题,但对于您要解决的更大问题(即制作词汇表),可能还有其他解决方案。datatool
例如,我更倾向于将条目保存在电子表格中,然后用于创建词汇表。
答案2
您没有解释输入文件的顺序。如果顺序与 Unix 命令的输出顺序相同,ls
并且您正在使用bash
命令解释器,那么您可以创建包含以下内容的脚本runtex
(例如):
#!/bin/bash
ls entries/* > entfiles
echo {} >> entfiles
pdfcsplain main.tex
注意:将 替换pdfcsplain
为你正在运行 TeX 的命令。可能是latex
或其他内容。最后,该main.tex
文件可以包含:
\def\inputfile#1 {\ifx^#1^\else \input#1 \expandafter\inputfile\fi}
\expandafter\inputfile \input entfiles
然后您可以尝试运行该runtex
命令或bash runtex
命令。
答案3
到目前为止,我见过的所有解决此类问题的方法都依赖于 shell 脚本或\write18
随后用 和创建的临时文件\input
(ted)。但值得注意的是,也可以使用管道代替临时文件。实际上,我不确定“管道输入”功能是否在所有系统上都适用于\openin
以及\input
,但在我的系统上(MacTeX/TeXLive 安装)它可以。
要构建一个(几乎)最小的工作示例,请创建一个文件,将其Main.tex
放置在子目录 旁边Data
,然后依次将四个名为Foo.tex
、Bar.tex
、Baz.tex
和 的文件放入其中AnotherFileName.tex
。这四个文件可以读取如下(例如):
内容Foo.tex
:
\subsection{The \emph{Foo} file}
\lipsum[2]
内容Bar.tex
:
\subsection{The \emph{Bar} file}
\lipsum[3]
内容Baz.tex
:
\subsection{The \emph{Baz} file}
\lipsum[4]
内容AnotherFileName.tex
:
\subsection{There is of course a problem\ldots}
\ldots~the order of file inclusion depends on the order in which they are
listed by the \texttt{ls} command; but I~am afraid this cannot be avoided!
\lipsum[5-8]
您现在可以测试 (A)MWE 了,它包含Main.tex
以下内容的文件:
\documentclass[a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\makeatletter
\@ifdefinable\@fileliststream{\newread\@fileliststream}
\@ifdefinable\@currentfilename{}
\newcommand*\InputAllFilesInSubfolder[1]{
% #1 <- Path to subfolder: MUST end with the (operating system dependent)
% character for separating path components.
\openin\@fileliststream |"ls '#1'"\relax
\loop \unless\ifeof\@fileliststream
\begingroup
\endlinechar \m@ne % cf. exercise 20.18
\global\readline\@fileliststream to\@currentfilename
\endgroup
\ifx\@currentfilename\@empty \else
\typeout{Inputting "#1\@currentfilename".}%
\input{#1\@currentfilename}%
\fi
\repeat
\closein\@fileliststream
}
\makeatother
\begin{document}
\tableofcontents
\section{Main section}
\lipsum[1]
\InputAllFilesInSubfolder{Data/}
\end{document}
在这种情况下,我认为显示输出并不是特别有意义。
添加
然而,很明显,该命令的选项ls
让你可以控制文件输入的顺序:你可能想尝试一下,例如,
\openin\@fileliststream |"ls -rtU '#1'"\relax