使用 \newcommand、\input 和 \includegraphics

使用 \newcommand、\input 和 \includegraphics

我正在写一篇论文,其中包含对实验进行多次试验的模拟结果。我生成的每个输出图 (.pdf) 都在文件名中包含了试验次数(例如foo_10_trials.pdf,,,),其中数字本身基于正在写入文件的 Bash 脚本中设置的变量。由于实验需要一段时间才能运行,因此在撰写论文时使用较少试验次数的图,然后在最终论文中包含更多试验次数的图会比较方便。问题是我需要仔细检查并更新试验次数,例如将所有s --> s 更改为 s。 foo_100_trials.pdfbar_10_trials.pdfbar_100_trials.pdf10100

我想要做的是创建一个vars/trials.tex只包含一个我可以更改的整数的文件,例如100。然后在我的主稿中我有\newcommand{\trials}{\input{vars/trials}}。我可以在文本中使用它,但我希望能够以这样的方式定义我的图表,使它们也使用这个变量,例如

\newcommand{\fooFigure}[0]{
\begin{figure}[H]
    \centering
    \includegraphics[width=\textwidth]{foo_\trials{}_trials}
    \caption{Foo caption.}
    \label{fig:foo}
\end{figure}
}

\fooFigure

trials.tex这样,我只需将文件更改为 read100而不是即可更新所有图片和文内引用10。我遇到的问题\includegraphics是它似乎无法\trials{}像上面那样接受。我收到的错误是:

ERROR: Undefined control sequence.

--- TeX said ---
\filename@simple ...#2\\}\fi \edef \filename@base 
                                                  {#1}
l.645 \fooFigure

--- HELP ---
TeX encountered an unknown command name. You probably misspelled the
name. If this message occurs when a LaTeX command is being processed,
the command is probably in the wrong place---for example, the error
can be produced by an \item command that's not inside a list-making
environment. The error can also be caused by a missing \documentclass
command.

我绝不是 TeX/LaTeX 方面的专家,所以我不知道这是否是一个未被扩展的问题,\trials或者\input{vars/trials}是其他什么问题。

答案1

获取试验次数

从 TeX 方面来说,如果 bash 脚本可以在 中写入完整的定义var/trials.tex,那么会更容易,例如

\renewcommand*{\trials}{100}

然后该文件就可以轻松被 TeX 读取:

\providecommand*{\trial}{10}% default setting
\input{var/trials}

如果文件var/trials.tex只包含一个整数,那么可以通过包读取catchfile

\usepackage{catchfile}
\CatchFileEdef{\trials}{var/trials.tex}{\endlinechar=-1 }

最后一个命令删除了行尾var/trials.tex以避免数字后出现多余的空格。

使用\trials

上面定义的宏\trials没有参数。因此需要额外的一对括号不是被删除,并将成为文件名的一部分。空格足以结束宏\trials,并且空格不会成为文件名的一部分(例如foo\trials bar将成为foo100bar)。但由于后面跟着句号,因此空格也不是必需的:

\includegraphics[...]{foo_\trials.pdf}

相关内容