考虑一下文件
\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}