如果在另一节中,则引用具有节号的项目

如果在另一节中,则引用具有节号的项目

考虑一下文件

\documentclass{scrartcl}
\begin{document}
\section{A}
\begin{enumerate}
    \item\label{a} a
\end{enumerate}

\section{B}
\begin{enumerate}
    \item\label{b} b
\end{enumerate}
Items \ref{b} and \ref{a}.
\end{document}

它打印出“项目 a 和 a”。

相反,我希望它打印出“项目 a 和 1.a”;也就是说,我希望在参考文献中包含章节编号,但与这个问题仅有的如果引用在另一节中。

这有多容易实现?

答案1

您可以在引用之前放置一个(强健的)宏,用于检查的当前值section\label发出时存储的值。

\documentclass{article}
\usepackage{pdftexcmds,etoolbox}

\makeatletter
\labelformat{enumi}{\maybe{section}{\thesection}#1}
\renewcommand{\theenumi}{\alph{enumi}}
\newrobustcmd{\maybe}[2]{%
  \ifnum\pdf@strcmp{\csname the#1\endcsname}{#2}=\z@
  \else
    #2.%
  \fi
}
\makeatother

\begin{document}
\section{A}
\begin{enumerate}
    \item\label{a} a
\end{enumerate}

\section{B}
\begin{enumerate}
    \item\label{b} b
\end{enumerate}
Items \ref{b} and \ref{a}.
\end{document}

在此处输入图片描述

与 frougon 的建议稍有不同的版本:

\documentclass{article}
\usepackage{etoolbox}

\makeatletter
\labelformat{enumi}{\maybe{section}{\arabic{section}}{\thesection}#1}
\renewcommand{\theenumi}{\alph{enumi}}
\newrobustcmd{\maybe}[3]{%
  \ifnum#2=\value{#1}%
  \else
    #3.%
  \fi
}
\makeatother

\begin{document}
\section{A}
\begin{enumerate}
    \item\label{a} a
\end{enumerate}

\section{B}
\begin{enumerate}
    \item\label{b} b
\end{enumerate}
Items \ref{b} and \ref{a}.
\end{document}

相关内容