定义依赖于案例的默认路径

定义依赖于案例的默认路径

我正在使用 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 是什么意思?了解更多信息。

相关内容