You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:43