\input{} 仅输入部分命令时出错

\input{} 仅输入部分命令时出错

我有一个main.tex文件,其序言中包含以下路径定义

\def\commonpath{C:/Users/Default/Documents/Folder}

这编译得很好。如果我将代码分成几行,如下所示:

\def\commonpath{%
   C:/Users/Default/Documents/Folder%
}

一切都编译得很好。

我想要做的是将路径取出放到一个单独的文件中。例如,我想创建一个文件folderpath.tex并将其放在与相同的目录中main.texfolderpath.tex应该只包含以下行:

C:/Users/Default/Documents/Folder

然后,main.tex我想得到类似的东西

\def\commonpath{%
   \input{folderpath.tex}%
}

但是,当我这样做并尝试编译时,出现错误missing \begin{document}

我该如何解决这个问题?我以为该\input{}命令实际上就是输入文件的内容。

任何帮助,将不胜感激。

答案1

你可以expl3很容易地使用以下命令来做到这一点:

\ExplSyntaxOn
\file_get:nnN { folderpath.tex } {} \commonpath
\ExplSyntaxOff

答案2

最简单的方法是使用\input{folderpath}folderpath.tex包含\def\commonpath{a/b/c}

如果您的\input文件包含以下内容a/b/c,那么您必须小心行尾的空格,以及通常插入到文件末尾、\par文件挂钩代码中的不可扩展标记。

答案3

\def\commonpath{\input{folderpath}}不应使用该方法,原因如下:

  1. \input是 LaTeX 中一个相当复杂的命令;
  2. 原始的\input、可用的\@@input也不是一个简单的命令;
  3. 无论如何,您每次调用时都会访问文件系统\commonpath

为什么\input在 LaTeX 中很复杂?因为它不仅需要打开文件,还需要读取文件并关闭文件:

  • 该命令的语法已被修改,因此它符合标准语法(而原语\input不符合):

  • LaTeX 希望跟踪输入文件;

  • 其他一些细节…

那么为什么不呢\@@input?这是因为 TeX 对输入文件做了一些处理,例如,它会在行尾添加一个空格(准确地说\endlinechar,是标准的,通常会转换为空格)。

你可以使用这个catchfile包并执行

\CatchFileDef\commonpath{folderpath}{}

(不要忘记后面的{}),或者提及expl3方式(可能更可取)。这样做可以避免多次访问文件系统。

相关内容