我正在使用acronym
包来扩展首字母缩略词,我也在使用该cleveref
包。我希望每章扩展一次首字母缩略词。例如,在以下代码中,两个首字母缩略词都应产生扩展:
\documentclass{report}
\usepackage{acronym}
\usepackage{cleveref}
\acrodef{ac}{Acronym}
\begin{document}
\chapter{one}
\ac{ac}
\acresetall
\chapter{two}
\ac{ac}
\end{document}
根据acronym
手册,我发现在每章之前调用\acresetall
会产生所需的结果,但我会收到有关重复标签的警告(某种程度上与 冲突cleveref
)。还有其他方法可以获得所需的结果或避免警告吗?
答案1
您可以尝试以下操作:
\documentclass{report}
\usepackage{acronym}
\usepackage{cleveref}
\makeatletter
\renewcommand*\@verridelabel[1]{%
\@bsphack
\protected@write\@auxout{}{\string\undonewlabel{#1}}%
\protected@write\@auxout{}{\string\undonewlabel{#1@cref}}%Added for cleverref
\label{#1}%
\@overriddenmessage rs{#1}%
\@esphack
}%
\makeatother
\acrodef{ac}{Acronym}
\begin{document}
\chapter{one}
\ac{ac}
\acresetall
\chapter{two}
\ac{ac}
\end{document}
答案2
包cleveref
扩展\label{<name>}
为 add \label{<name>@cref}
。并且包在第一章和第二章中acronym
设置了两次标签\label{acro:ac}
。但是它在设置第二个标签之前撤消了第一个标签,来自文件.aux
:
\AC@undonewlabel{acro:ac}
\newlabel{acro:ac}{{1}{1}}
2015/03/21 v1.41 之前的版本acronym
使用\undonewlabel
代替\AC@undonuewlabel
(参见 gtownescapee 的回答)。
下面的补丁对添加的标签做了相同的处理cleveref
:
\documentclass{report}
\usepackage{acronym}
\usepackage{cleveref}
\makeatletter
\newcommand*{\org@overidelabel}{}
\let\org@overridelabel\@verridelabel
\@ifpackagelater{acronym}{2015/03/21}{% v1.41
\renewcommand*{\@verridelabel}[1]{%
\@bsphack
\protected@write\@auxout{}{\string\AC@undonewlabel{#1@cref}}%
\org@overridelabel{#1}%
\@esphack
}%
}{% older versions
\renewcommand*{\@verridelabel}[1]{%
\@bsphack
\protected@write\@auxout{}{\string\undonewlabel{#1@cref}}%
\org@overridelabel{#1}%
\@esphack
}%
}
\makeatother
\acrodef{ac}{Acronym}
\begin{document}
\chapter{one}
\ac{ac}
\acresetall
\chapter{two}
\ac{ac}
\end{document}
文件.aux
:
relax
\reset@newl@bel
\newacro{ac}[ac]{Acronym}
\@writefile{toc}{\contentsline {chapter}{\numberline {1}one}{1}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\AC@undonewlabel{acro:ac@cref}
\AC@undonewlabel{acro:ac}
\newlabel{acro:ac}{{1}{1}}
\newlabel{acro:ac@cref}{{[chapter][1][]1}{1}}
\acronymused{ac}
\@writefile{toc}{\contentsline {chapter}{\numberline {2}two}{2}}
\@writefile{lof}{\addvspace {10\p@ }}
\@writefile{lot}{\addvspace {10\p@ }}
\AC@undonewlabel{acro:ac@cref}
\AC@undonewlabel{acro:ac}
\newlabel{acro:ac}{{2}{2}}
\newlabel{acro:ac@cref}{{[chapter][2][]2}{2}}
\acronymused{ac}
答案3
接受的答案和@Heiko的答案都为我解决了这个问题,直到2015-03-21将首字母缩略词包更新为版本1.41。在此版本中,实现发生了变化,命令\undonewlabel
被替换为\AC@undonewlabel
命令。为了与v1.41兼容,我推荐@Heiko的答案,但将实例替换\undonewlabel
为\AC@undonewlabel
。
我本来想以评论的形式回复,但我还没有足够的声誉。