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