Einleitung
Kürzlich plagte mich acro
beim Schreiben meiner Abschlussarbeit mit ein Problem mit dem Paket xelatex
.
Mein Dokument verwendet das fancyhdr
Paket, in dem ich den Abschnittstitel so einstelle, dass er in der Fußzeile erscheint. Die Buchstaben des Abschnittstitels werden in Großbuchstaben angezeigt.
Das Thema
Ich verwende gerne Akronyme, wenn ich kann. Deshalb habe ich mich entschieden, eine Akronym-Anforderung in einem Abschnittstitel zu verwenden, wie beispielsweise diese:
\section{Moving Forward to Distributed \ac{sdn} Management}
Aus irgendeinem Grund fand die Engine es jedoch witzig, den gesamten Text im Abschnittstitel zwangsweise in Großbuchstaben zu schreiben, und verwandelte so ein \ac{sdn}
in ein \ac{SDN}
.
Dann passierte Folgendes in der Fußzeile des Dokuments:
Aus diesem Grund wurde ich mit einem Phantom-Akronym geplagt, das in der Hilfsdatei zweimal auftauchte:
\acro@used@once {SDN}{78}{78}{89}
\acro@used@twice {SDN}{79}{79}{90}
während diese Phantom-Akronym-Anfragen im Dokumenterstellungsprotokoll erschienen. In den angegebenen Zeilen gab es keine Akronym-Anfragen:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! 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.
!...............................................
Antwort1
Dies ist nicht unbedingt an gebunden fancyhdr
. Dasselbe passiert mit einem einfachen \pagestyle{headings}
in der Artikelklasse.
Das Problem ist, dass sich an der Überschrift \sectionmark
nichts ändert \MakeUppercase
und – da es \ac
sich bei ua um geschützte Befehle handelt – sich dies ändert \ac{sdn}
, \ac{SDN}
was dann zu der Fehlermeldung führt.
Eine offensichtliche „Lösung“ besteht darin, das Akronym stattdessen mit einer ID in Großbuchstaben zu definieren:
\DeclareAcronym{SDN}{...}
Dies zu ändern, kann jedoch je nach Anzahl der Akronyme und Akronymaufrufe in Ihrem Dokument eine mühsame Arbeit sein. (Obwohl Suchen und Ersetzen eigentlich ganz einfach sein könnte ...)
Eine andere Möglichkeit wäre, das
textcase
Paket zu verwenden, das neu definiert\MakeUppercase
, sodass wir LaTeX anweisen können, bestimmte Teile nicht groß zu schreiben:\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}
Als dritte Option, die nicht von der Art und Weise abhängt, wie der Überschriftenstil definiert ist,
acro
wurde diese Optioncase-sensitive
Anfang dieses Jahres (mit der Veröffentlichung von v2.11 2020/01/11) eingeführt, um diese Art von Problemen zu lösen. Vorausgesetzt, Sie haben nicht zwei verschiedene Akronyme, von denen einessdn
als ID und das andere verwendet wird,SDN
können Sie angebenacro
, dass beide als gleich behandelt werden sollen:\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}
Die letzten beiden Beispiele geben beide
Antwort2
Die Lösung
Es scheint, dass die Kombination aus der Verwendung des acro
Pakets mit dem fancyhdr
Paket und dem Platzieren des Abschnittstitels in der Fußzeile fehlerhaft ist. Aus diesem Grund habe ich die \ac{sdn}
Anfrage aus dem Titel entfernt, wodurch das Problem der Phantomanfrage gelöst wurde \ac{SDN}
.
Jetzt ist die Fußzeile des Dokuments korrekt und die Phantom-Akronym-Anfragen sind verschwunden.