我正在使用包含其他首字母缩略词的标准天体物理学首字母缩略词,例如日冕物质抛射 (CME) 行星际日冕物质抛射 (ICME),我希望它们能够一起工作,也就是说,如果我已经使用了 \ac{CME} 并且 CME 的完整版本已经打印出来,我希望 \ac{ICME} 的结果是行星际 CME (ICME),如果不是,它应该给出完整版本。
换句话说,我想要这样的东西
\documentclass[paper=a4, fontsize=12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel} % English language/hyphenation
\usepackage[pdftex]{graphicx}% Enable pdflatex
\usepackage[printonlyused]{acronym}
\begin{document}
\begin{acronym}
\acro{CME}{Coronal Mass Ejection}
\acro{ICME}{Interplanetary \ac{CME}}
\end{acronym}
\section{Text}
\acresetall
The \ac{ICME} is a version of \ac{CME}.
\acresetall
A version of \ac{CME} is called \ac{ICME}.
\end{document}
导致这个
而不是现在这样
答案1
这是解决您问题的方法。我添加了宏acx
,该宏会打印首字母缩略词的长版本或短版本,并且不会将其标记为已使用。
编辑:我改变了之前的答案,因为再想想它太复杂了。
\documentclass[paper=a4, fontsize=12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel} % English language/hyphenation
\usepackage[pdftex]{graphicx}% Enable pdflatex
\usepackage[printonlyused]{acronym}
\makeatletter
\newcommand{\acx}{\protect\@acx}%
\newcommand{\@acx}[1]{%
\ifAC@dua
\acl{#1}%
\else
\expandafter\ifx\csname ac@#1\endcsname\AC@used
\acs{#1}%
\else
\acl{#1}%
\fi
\fi
}
\makeatother
\begin{document}
\begin{acronym}
\acro{CME}{Coronal Mass Ejection}
\acro{ICME}{Interplanetary \acx{CME}}
\end{acronym}
\section{Text}
\acresetall
The \ac{ICME} is a version of \ac{CME}.
\acresetall
A version of \ac{CME} is called \ac{ICME}.
\end{document}
答案2
我的评论几乎指向正确的方向:
\documentclass{article}
\usepackage[printonlyused]{acronym}
\begin{document}
\begin{acronym}
\acro{CME}{Coronal Mass Ejection}
\acro{ICME}{Interplanetary \acl{CME}}
\end{acronym}
\section{Text}
\acresetall
The \ac{ICME} is a version of \ac{CME}.
\acresetall
A version of \ac{CME} is called \ac{ICME}.
\end{document}
(请注意,在的定义中使用了\acl{CME}
而不是)得出:\ac{CME}
\acro{ICME}
我以为您可能需要考虑首字母缩略词是否标记为已使用,但显然在本例中不是这样(\aclu
等等)。不过,请检查第一次扩展是否确实发生,和/或\acresetall
在正文开头进行(以及摘要开头,如果您在那里使用它们)。