有没有办法让 TeX 在某个目录的子目录中找到所有以 .tex 结尾的文件以用作\input
?
在我的文档中,我想包含来自如下目录树的大量文件:
/transcripts/2013-05/2013-05-12/2013-05-12-transcript1/2013-05-12-transcript1.tex
/2013-05-12-transcript2/2013-05-12-transcript2.tex
/2013-05-14/2013-05-14-transcript1/2013-05-14-transcript1.tex
/2013-06/2013-06-07/2013-06-07-transcript1/2013-06-07-transcript1.tex
我知道我可以使用以下方法定义特定目录
\makeatletter
\def\input@path{{./transcripts/}{./transcripts/2013-05}}
\makeatother
但如果能告诉它类似这样的话就好了
./transcripts/*/*/*/
有什么方法可以实现这个吗?
我知道这问题解决了类似的问题。但是,我不想自动包含文件,它们仍然将通过“\input{filename}:
\documentclass{article}
\begin{document}
\input{2013-05-12-transcript1.tex}
...
\input{2013-05-12-transcript2.tex}
\end{document}
我想要实现的是能够只输入名称而不必每次都输入整个文件路径。
编辑:根据下面的建议,我尝试 /usr/local/texlive/2015/texmf.cnf
通过添加来编辑TEXINPUTS = /path/to/folder//:
,以便它可以递归搜索我的文件夹,但显然我缺少一些关于如何做到这一点的基本知识。有人能帮我吗?
编辑2(2019): 我又回到刚才的这个问题:
(a) 我无法让下面 David 的答案发挥作用。如能得到进一步帮助,我将不胜感激。(b) 我还想找到一个可移植的解决方案,在文档本身的序言中指定。有什么想法吗?
答案1
我重新创建了你的文件结构,这对我来说很有用:
transcripts/
├── 2013-05
│ ├── 2013-05-12
│ │ ├── 2013-05-12-transcript1
│ │ │ └── 2013-05-12-transcript1.tex
│ │ └── 2013-05-12-transcript2
│ │ └── 2013-05-12-transcript2.tex
│ └── 2013-05-14
│ └── 2013-05-14-transcript1
│ └── 2013-05-14-transcript1.tex
└── 2013-06
└── 2013-06-07
└── 2013-06-07-transcript1
└── 2013-06-07-transcript1.tex
文件2013-05-12-transcript1.tex
为\textbf{First}
,文件2013-05-12-transcript2.tex
为\textbf{Second}
,文件2013-05-14-transcript1.tex
为\textbf{Third}
,文件2013-05-14-transcript1.tex
为\textbf{Fourth}
,示例文件如下:
% arara: pdflatex
\documentclass{article}
\begin{document}
\input{2013-05-12-transcript1.tex}
...
\input{2013-05-12-transcript2.tex}
...
\input{2013-05-14-transcript1.tex}
...
\input{2013-06-07-transcript1.tex}
\end{document}
视窗
我已将其保存在D:\transcripts
临时配置
打开命令行cmd
(不需要管理员权限)并执行:
set TEXINPUTS=.;D:/transcripts//;
pdflatex sampleforum.tex
这将一直有效,直到您关闭命令行,也就是说,每次关闭命令行后您都必须执行此操作...繁琐...是的。
永久配置
打开命令行cmd
(不需要管理员权限)并执行:
setx TEXINPUTS .;D:/transcripts//;
关闭命令行,打开新的并执行:
reg query HKEY_CURRENT_USER\Environment
pdflatex sampleforum.tex
这样我们就TEXINPUTS
在你的环境变量中配置好了,现在它正在渗透。
如果需要TEXINPUTS
从环境变量中删除,请使用:
reg delete HKEY_CURRENT_USER\Environment /v TEXINPUTS /f
或者,您也可以通过图形模式来调整环境变量。
Linux
我已将其保存在~/transcripts
临时配置
在命令行中执行:
export TEXINPUTS=.:~/transcripts//:
pdflatex sampleforum.tex
永久配置
添加以下.bashrc
行:
export TEXINPUTS=.:~/transcripts//:
在两种情况下(Win/Linux),您都不需要admin
权限root
,只需要一个简单的用户帐户。
另一个选择是使用tlmgr conf auxtrees
,但目录将具有TDS
形式。
问候语
以防别人想复制……这一行
mkdir -p transcripts/{2013-05/{2013-05-12/{2013-05-12-transcript1,2013-05-12-transcript2},2013-05-14/2013-05-14-transcript1},2013-06/2013-06-07/2013-06-07-transcript1}
它使工作变得更容易:)
答案2
不用管 \input@path 只需设置texmf.cnf
或环境变量TEXINPUTS
即可
input/transcripts//:
尾随//
表示递归搜索子目录,而:
(或;
在 Windows 上)表示仅将此搜索路径添加到现有的默认值之前,因此仍会搜索所有标准位置。