LaTeX中如何让\acrshort命令仅在首次使用时插入脚注?
解决glossaries包中\acrshort重复添加脚注的问题
问题根源
你原代码里的\defglsentryfmt[acronym]只对\gls命令生效,\acrshort这类缩写专用命令不会自动触发\glsused的状态标记,导致每次调用都被判定为“未使用”,重复生成脚注。
可行解决方案
方案1:重定义\acrshort命令(精准控制)
直接修改\acrshort的行为,让它在首次调用时标记条目为已使用,后续仅输出缩写:
\documentclass{article} \usepackage[acronym]{glossaries} \makeglossaries \newacronym{gcd}{GCD}{Greatest Common Divisor} % 保存原命令,重定义新行为 \let\oldacrshort\acrshort \renewcommand{\acrshort}[1]{% \ifglsused{#1}% {\oldacrshort{#1}}% 已使用过,仅输出缩写 {% 首次使用,输出缩写+脚注,标记为已使用 \oldacrshort{#1}\footnote{\glsentrydesc{#1}}% \glsmark{#1}% }% } \begin{document} \acrfull{gcd}\\ % 首次输出全称,自动标记条目为已使用 \acrshort{gcd} \\ % 此时已标记,仅输出缩写无脚注 \acrshort{gcd} \\ % 同上,无脚注 \printglossary[type=\acronymtype] \printglossary \end{document}
方案2:全局修改缩写条目格式(适配所有缩写命令)
如果需要让\acrshort、\acrlong等所有缩写类命令都遵循“首次加脚注”规则,可以用这种方式:
\documentclass{article} \usepackage[acronym]{glossaries} \makeglossaries \newacronym{gcd}{GCD}{Greatest Common Divisor} % 定义缩写条目的全局格式 \defglsentryfmt[acronym]{% \glsgenentryfmt% \ifglsused{\glslabel}{}{% \footnote{\glsentrydesc{\glslabel}}% \glsmark{\glslabel}% 强制标记为已使用 }% } % 让\acrshort调用时使用上述格式 \renewcommand{\acrshort}[1]{\glsentryfmt[acronym]{#1}} \begin{document} \acrfull{gcd}\\ \acrshort{gcd} \\ \acrshort{gcd} \\ \printglossary[type=\acronymtype] \printglossary \end{document}
效果验证
- 首次调用
\acrshort会输出缩写并添加脚注,同时标记条目为已使用 - 后续所有
\acrshort调用仅输出缩写,不再生成脚注 - 若先调用
\acrfull,由于\acrfull会自动标记条目为已使用,后续\acrshort也不会再加脚注
内容的提问来源于stack exchange,提问作者etex
相关产品推荐
相关产品推荐

