在子目录中查找要使用 \input 的文件

在子目录中查找要使用 \input 的文件

有没有办法让 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 上)表示仅将此搜索路径添加到现有的默认值之前,因此仍会搜索所有标准位置。

相关内容