![根据引用出现的位置,在公式引用中包含/排除章节编号?](https://linux22.com/image/380147/%E6%A0%B9%E6%8D%AE%E5%BC%95%E7%94%A8%E5%87%BA%E7%8E%B0%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%8C%E5%9C%A8%E5%85%AC%E5%BC%8F%E5%BC%95%E7%94%A8%E4%B8%AD%E5%8C%85%E5%90%AB%2F%E6%8E%92%E9%99%A4%E7%AB%A0%E8%8A%82%E7%BC%96%E5%8F%B7%EF%BC%9F.png)
我希望当公式在同一节中被引用时,引用该公式时不包括节号,但当公式在不同节中被引用时,包括节号。
下面是我尝试获取的一个示例:
这是我尝试过的,并且我很清楚它的问题出在哪里:
\documentclass{article}
\usepackage[noabbrev]{cleveref}
\renewcommand{\thesection}{\Alph{section}}
\creflabelformat{equation}{#2(\thesection.#1)#3}
\begin{document}
\section{The first section}\label{first}
This is the some disussion in \cref{first}. This is the first equation:
\begin{equation}\label{A:1}
1+1 = 2
\end{equation}
This is some more disussion. Here is a reference to \cref{A:1}.
\section{The second section}\label{second}
\setcounter{equation}{0}
This is some discussion in \cref{second} which references \cref{first}.
This is another equation:
\begin{equation}\label{B:1}
2+2 = 4
\end{equation}
This is some discussion of \cref{B:1}, and a brief comment that it is
easily derived from equation \cref{A:1}.
\end{document}
不幸的是,我不知道如何获得我想要的结果。
答案1
我只能同意张瑞熙的评论:这种格式常常让读者感到困惑,我强烈建议不要使用它。
如果仍要实现,则必须修改theequation
而不是设置,creflabelformat
因为creflabelformat
只有在引用标签时才会进行评估。此时,方程式所在的原始部分已经丢失。
如果该节与包含参考的部分相同,则为了跳过该节,我定义了一个小宏。这目前仅适用于 pdfTeX,但\pdfstrcmp
可以轻松替换为 ,expl3
以\str_if_eq_x:nnF
兼容更多引擎。
\documentclass{article}
\usepackage[noabbrev]{cleveref}
\usepackage{etoolbox}
\DeclareRobustCommand\skipifequals[2]{%
\ifnum\pdfstrcmp{#1}{#2}=0
\else
#2%
\fi
}
\newcommand\skipifcurrent[1]{\protecting{\skipifequals{#1}}{#1}}
\renewcommand{\thesection}{\Alph{section}}
\creflabelformat{equation}{#2(#1)#3}
\renewcommand\theequation{\skipifcurrent{\thesection.}\arabic{equation}}
\begin{document}
\section{The first section}\label{first}
This is the some disussion in \cref{first}. This is the first equation:
\begin{equation}\label{A:1}
1+1 = 2
\end{equation}
This is some more disussion. Here is a reference to \cref{A:1}.
\section{The second section}\label{second}
\setcounter{equation}{0}
This is some discussion in \cref{second} which references \cref{first}.
This is another equation:
\begin{equation}\label{B:1}
2+2 = 4
\end{equation}
This is some discussion of \cref{B:1}, and a brief comment that it is
easily derived from equation \cref{A:1}.
\end{document}
答案2
我最终使用了expl3
基于 Marcel Krüger 的答案的解决方案:
\ExplSyntaxOn
\cs_new_protected:Npn \ifsection #1#2#3 {
\str_if_eq_x:nnTF{\thesection}{#1}{#2}{#3}
}
\cs_new:Npn \ifcurrentsection #1#2 { \ifsection{\thesection}{#1}{#2} }
\renewcommand\theequation{
\ifcurrentsection{}{\thesection.}\arabic{equation}
}
\ExplSyntaxOff
这使我可以更加灵活,并根据引用是出现在当前部分还是其他部分来改变行为。