介紹
最近,我在acro
用xelatex
.
我的文件使用該fancyhdr
包,我將節標題設定為顯示在頁腳處。章節標題字母以大寫形式顯示。
問題
我喜歡盡可能使用縮寫詞。因此,我決定在章節標題中使用首字母縮寫請求,如下所示:
\section{Moving Forward to Distributed \ac{sdn} Management}
但由於某種原因,引擎認為將節標題中的所有文字強制大寫,將 an 轉換\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}
作為不依賴標題樣式定義方式的第三個選項,今年早些時候
acro
引入了該選項case-sensitive
(隨著 v2.11 2020/01/11 的發布),以處理此類問題。假設您沒有兩個不同的首字母縮略詞,一個用作sdn
ID,另一個用作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}
最後兩個例子都給了