如果参考标签中不存在前缀字符串,如何添加?

如果参考标签中不存在前缀字符串,如何添加?

我的论文需要一些乳胶帮助。因此,我有以下命令:

\newcommand{\refChap}[1]{Chap.~\ref{chap:#1}}

这使我能够使用以下方式引用我的文档的章节:

\refChap{first_work} % the 'chap:' part is added by the function

例如。我的论文中有很多这种引用。但是,有了我现在用来写作的 VSCode 中的自动完成功能,这样写会更方便:

\refChap{chap:first_work} % the 'chap:' part is added by me in the args

我可以进行查找和替换来修复整篇论文,将 chap: 添加到这些参考文献中。但同样的事情也适用于 fig、eqn 等。

我希望我可以修复 refChap 函数,使其无论是否使用 'chap:' 部分都可以工作。为此,我尝试了以下操作:

\newcommand{\prependChap}[1]{chap:\StrSubstitute{#1}{chap\:}{}}

如果尚未存在,则这将前置“chap:”。

然后:

\newcommand{\refChap}[1]{Chap.~\ref{\prependChap{#1}}}

但是,这会破坏 pdf 渲染,并且在我尝试使用时,chap: 会重复出现很多次。

我做错了什么?如果这是一个基本错误,请原谅,我是第一次编写自己的 latex 命令。顺便说一句,我知道,作为额外的复杂因素,章节标签包含下划线。但是,我也在没有下划线的章节名称上测试了这一点,但没有帮助。

答案1

LaTeX 扩展参数的方式相当复杂,这与其他编程语言非常不同,在其他编程语言中,表达式几乎可以出现在任何位置,并被求值,结果被用作另一个表达式的一部分。因此,通常最好保持宏的参数“干净”,并在参数之外进行处理。

在这种情况下,您可以检查参数是否以前缀 using 开头\IfBeginWith,并在 True 情况下使用\ref带有原始参数的语句,\ref在 False 情况下使用另一个带有添加前缀的语句。

梅威瑟:

\documentclass{report}
\usepackage{xstring}
\newcommand{\refChap}[1]{%
\IfBeginWith{#1}{chap:}{%
Chap.~\ref{#1}}{%
Chap.~\ref{chap:#1}}%
}
\begin{document}
\chapter{First work}
\label{chap:first_work}
This is \refChap{first_work}, which is the same as \refChap{chap:first_work}.
\end{document}

结果:

在此处输入图片描述

相关内容