问题
我通常会加载一个包含自定义项的帮助 TeX 文件,例如常用包、公司标准颜色和缩写宏。我希望帮助文件也能加载同一文件夹中的另一个外部文件。我当然希望避免每次都给出第二个外部文件的明确路径。
例子
假设帮助文件为cosmetix.tex
,它将加载abbreviations.tex
。abbreviations.tex
与 位于同一文件夹中,cosmetix.tex
并且都位于名为 的文件夹中common
:
% cosmetix.tex
% ... some customization
% load abbreviations
\input{abbreviations.tex}
我的主要文件是tester.tex
:
% tester.tex
\documentclass{article}
% load cosmetix
\input{common/cosmetix.tex}
\begin{document}
Dummy text.
\end{document}
这会导致以下错误:LaTeX 错误:未找到文件“abbreviations.tex”。
问题
如何\input
在不(i)将我的代码转换为包和(ii)使用绝对路径的情况下将嵌套的文件用于不同文件夹中?
语境
虽然这个问题很笼统,但它也是我上一个问题的后续:复制官方信头。我已经复制了我所在学院的信头,而信头又需要加载徽标。我使用该\input
机制加载信头。我知道这不是最优雅的方式,但直到我有时间将其转换为包(或阅读文档以将我的信头转换为选项文件)之前scrlttr2
,这对我来说是一个合理有效的解决方案。
正如我上面提到的,我不能使用绝对路径,因为我使用了多台具有不同操作系统的计算机,因此每台计算机的目录树的根都是不同的。
答案1
使用包import
,它只做一件事:解决这个问题。参见
基本上,该包定义了两个命令:\import
和\subimport
。\import
需要绝对路径,而subimport
需要相对路径。它们都TEXINPUTS
首先查看当前文件夹和。如果您想避免检查TEXINPUTS
,请使用带星号的版本。
例子
对于您的情况,唯一需要更改的行是将 update 改为\input
use \subimport
(当然,还要添加\usepackage{import}
)。也就是说,您需要编写:
\subimport{common}{cosmetix.tex}
无需进行任何更改cosmetix.tex
。
答案2
我个人尽量避免因为换了电脑而不得不记住更改设置。由于您使用的是 Dropbox,我建议您设置目录结构,以便它可移植且不需要特殊设置:
/Projects
common/
paper1/
paper2/
不要将文件保存在\Projetcs
目录中,而只保存在子目录中,并且始终使用相对路径:
\newcommand*{\CommonPath}{../commom}%
\input{CommonPath/abbreviations.tex}%
或者,你可以采用以下解决方案之一如何根据主机名进行检测和条件根据您所在的机器定义不同的根路径。
答案3
正如问题评论中所讨论的那样,更新变量似乎是一个合理的解决方案TEXINPUTS
。您必须在所有计算机上更新此变量。如果您使用 Dropbox 或任何同步软件来保持计算机同步,则应将公共文件夹放在它们的路径中。
对于 WindEdt/Win7,Variables
从中选择选项卡Options | Execution Modes
。在TEXINPUTS
变量下(如果没有则添加)输入文件夹的绝对路径。下面的屏幕截图显示了调用公用文件夹时的情况_Common
。
答案4
我认为是的,因为输入只是按原样输入文件的命令。因此整个文件tester.tex
看起来就像
% tester.tex
\documentclass{article}
% load cosmetix
% cosmetix.tex
% ... some customization
% load abbreviations
\input{abbreviations.tex}
\begin{document}
Dummy text.
\end{document}
这将被编译。由于您位于 文件夹中,因此tester.tex
无法加载abbreviations.tex
。您需要将其\input{common/abbreviations.tex}
放入cosmetix.tex
。