介绍
acro
最近,我在用 撰写论文时被该软件包的一个问题所困扰xelatex
。
我的文档使用了fancyhdr
包,我将章节标题设置为显示在页脚。章节标题字母以大写形式显示。
问题
我喜欢尽可能使用首字母缩略词。因此,我决定在章节标题中使用首字母缩略词请求,例如:
\section{Moving Forward to Distributed \ac{sdn} Management}
但出于某种原因,引擎认为强制将章节标题中的所有文本大写很有趣,将 转换\ac{sdn}
为\ac{SDN}
。
正因为如此,我被辅助文件中两次出现的幻影缩写所困扰:
\acro@used@once {SDN}{78}{78}{89}
\acro@used@twice {SDN}{79}{79}{90}
而这些虚假的缩写请求出现在文档构建日志中。在以下几行中不存在缩写请求:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! acro error: "undefined"
!
! You've requested acronym `SDN' on line 499 but you apparently haven't
! defined it, yet!
! Maybe you've misspelled `SDN'?
!
! See the acro documentation for further information.
!
! Type <return> to continue.
!...............................................
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! acro error: "undefined"
!
! You've requested acronym `SDN' on line 514 but you apparently haven't
! defined it, yet!
! Maybe you've misspelled `SDN'?
!
! See the acro documentation for further information.
!
! Type <return> to continue.
!...............................................
答案1
这不一定与 绑定。文章类中的fancyhdr
简单情况也是如此。\pagestyle{headings}
问题在于,标题上的和 – 因为\sectionmark
和 朋友是受保护的命令 – 更改为,然后导致错误消息。\MakeUppercase
\ac
\ac{sdn}
\ac{SDN}
一个明显的“解决方案”就是用大写的 ID 来定义首字母缩略词:
\DeclareAcronym{SDN}{...}
但是,根据文档中首字母缩略词和首字母缩略词的数量,这可能是一项繁琐的工作。(尽管搜索和替换实际上可能相当容易......)
另一种可能性可能是使用
textcase
重新定义的包,\MakeUppercase
以便我们可以告诉 LaTeX 不要将某些部分大写:\documentclass{article} \usepackage{acro} \usepackage[overload]{textcase} \DeclareAcronym{sdn}{ short = SDN , long = some dummy nonsense } \pagestyle{headings} \begin{document} \section{Moving Forward to Distributed \protect\NoCaseChange{\acs*{sdn}} Management} \end{document}
作为第三种不依赖于标题样式定义方式的选项,为了解决此类问题,我们在今年早些时候(2020/01/11 发布 v2.11)
acro
引入了该选项。假设您没有两个不同的首字母缩略词,一个用作ID,另一个使用,您可以告诉将两者视为相同:case-sensitive
sdn
SDN
acro
\documentclass{article} \usepackage{acro} \acsetup{case-sensitive=false} \DeclareAcronym{sdn}{ short = SDN , long = some dummy nonsense } \pagestyle{headings} \begin{document} \section{Moving Forward to Distributed \acs*{sdn} Management} \end{document}
最后两个例子都给出了