我正在使用 latex 和云服务 Nextcloud。因此,我从不同的机器编译同一个 .tex 文件,这样我的所有图形都有不同的全局文件路径。
为了解决这个问题,我想定义一个默认路径命令\defpath{file}
,根据我的库文件所在的位置自动识别正确的全局路径(我有一个固定的路径,我不会触碰它)。
我尝试使用以下内容:
\IfFileExists{
/path/to/source1/libdirectory/library.bib
}
{
\newcommand{\defpath}[1]{{"/path/to/source1/#1"}}
}{
\newcommand{\defpath}[1]{{"/path/to/source2/#1"}}
}
但这给出了错误信息
Illegal parameter number in definition of \reserved@a. ...ath}[1]{{"/path/to/source1/#1"}}}
它试图创建一个最小的工作示例,但问题似乎对我的文件夹结构很敏感,对于读者来说这是无法重现的。我也感到很困惑,因为我的库中有一个类似的 if 子句
\IfFileExists{
/path/to/source1/library.bib
}{
\bibliography{path/to/source1/library}}
{
\IfFileExists{
/path/to/source2/library.bib
}{
\bibliography{/path/to/source2/library}
}{
\bibliography{library}
}
}
运行正常。如果我省略 if 子句并手动定义默认命令
\newcommand{\defpath}[1]{{"/path/to/source1/#1"}}
它也能工作。因此,两者之间的相互作用在某种程度上导致了错误。
任何有关这种奇怪行为可能源自何处的线索都将不胜感激。此外,定义默认路径的替代最佳实践也可能有用。
答案1
##1
这应该通过使用而不是来解决#1
,因为您想在传递给另一个宏的参数内定义一个命令。
看参数中的双井号(数字符号,哈希字符)##1 是什么意思?了解更多信息。