Ich habe vor Kurzem l3kernel
andere Pakete aktualisiert und installiert biblatex-chem
. libertinust1math
Jetzt erhalte ich eine Fehlermeldung bezüglich des acro
Pakets.
Genauer gesagt versuche ich, es im folgenden Minimalbeispiel zu verwenden \emph{\Iac{NFA}}
und erhalte die Meldung „FEHLER: Fehlende Zahl, wird als Null behandelt“ \l__acro_article_Indefinite_bool
. (Die vollständige Fehlermeldung finden Sie weiter unten.) Vor dem Aktualisieren und Installieren der obigen Pakete hat mit dem Dokument, aus dem ich dieses Beispiel abgeleitet habe, alles ordnungsgemäß funktioniert.
Ich bin mir nicht sicher, was los ist, aber es scheint biblatex
irgendwie damit zusammenzuhängen. Weiß jemand, woran das liegt?
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{acro}
\DeclareAcronym{NFA}{%
short = NFA,
short-indefinite = an,
long = nondeterministic finite automaton,
long-plural-form = nondeterministic finite automata%
}
\listfiles
\begin{document}
\emph{\Iac{NFA}} is a mathematical machine.
\cite{knuth:ct:a}
\end{document}
Hier ist ein Abschnitt der .log
Datei, die den Fehler beschreibt. Die vollständige .log
Datei finden Sie unter.log des Fehlers
\openout3 = `thesis.bcf'.
Package biblatex Info: Trying to load bibliographic data...
Package biblatex Info: ... file 'thesis.bbl' found.
(./thesis.bbl)
Package biblatex Info: Reference section=0 on input line 16.
Package biblatex Info: Reference segment=0 on input line 16.
\l__acro_aux_file_iow=\write4
\openout4 = `thesis.acr'.
\AtBeginShipoutBox=\box46
(/usr/local/texlive/2020basic/texmf-dist/tex/latex/translations/translations-ba
sic-dictionary-english.trsl
File: translations-basic-dictionary-english.trsl (english translation file `tra
nslations-basic-dictionary')
)
Package translations Info: loading dictionary `translations-basic-dictionary' f
or `english'. on input line 16.
./thesis.tex:17: Missing number, treated as zero.
<to be read again>
\l__acro_article_Indefinite_bool
l.17 \emph{\Iac{NFA}}
is a mathematical machine.
A number should have been here; I inserted `0'.
(If you can't figure out why I needed to see a number,
look up `weird error' in the index to The TeXbook.)
Package atveryend Info: Empty hook `BeforeClearDocument' on input line 19.
[1{/usr/local/texlive/2020basic/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
Package atveryend Info: Executing hook `AfterLastShipout' on input line 19.
(./thesis.aux (./thesis.acr))
Package atveryend Info: Empty hook `AtVeryEndDocument' on input line 19.
Antwort1
Autsch! Das ist aber hinterhältig.
Erstens hat das Problem nichts mit zu tun biblatex
. Das Problem tritt dort nur auf, weil zu 's biblatex
hinzugefügt wird . Wenn Sie das manuell mit tun\NoCaseChange
expl3
\text_expand:n
\ExplSyntaxOn
\tl_put_right:Nn \l_text_expand_exclude_tl { \NoCaseChange }
\tl_put_right:Nn \l_text_case_exclude_arg_tl { \NoCaseChange }
\cs_set_eq:NN \NoCaseChange \use:n
\ExplSyntaxOff
Sie können es biblatex
aus der Gleichung entfernen.
Das Problem besteht darin, dass \NoCaseChange
gleich ist \use:n
und \use:n
einäußerstallgegenwärtiges Makro, das alles machtsehenwie \NoCaseChange
, was nicht gut ist. Im speziellen Fall von durchläuft acro
es \tl_map_tokens:nn
eine Liste, die enthält {indefinite}
, und erreicht schließlich einen Code, der wie folgt aussieht:
\use:n{\__acro_article:nnn {NFA}{long-acc}}{indefinite}
Dadurch sollte die {indefinite}
Token-Liste an übergeben werden \__acro_article:nnn {NFA}{long-acc}
, was hervorragend funktioniert ... es sei denn, es \use:n
bedeutet, das Argument beim Ändern der Groß-/Kleinschreibung zu überspringen, und genau das passiert hier: Das \__acro_article:nnn
Ding wird übersprungen, indefinite
die Groß-/Kleinschreibung wird in geändert Indefinite
und alles gerät aus den Fugen.
Ich denke, der richtige Weg, dies zu beheben, wäre,\NoCaseChange
andersvon \use:n
und \@firstofone
damit man es nicht so leicht verwechselt:
\ExplSyntaxOn
\cs_gset:Npn \NoCaseChange #1 { \use:n {#1} }
\ExplSyntaxOff
Fügen Sie es nach dem Laden zu Ihrem Dokument hinzu biblatex
, dann sollte es problemlos funktionieren:
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage{acro}
\DeclareAcronym{NFA}{%
short = NFA,
short-indefinite = an,
long = nondeterministic finite automaton,
long-plural-form = nondeterministic finite automata%
}
\listfiles
%% Workaround to \NoCaseChange and \tl_map_tokens:nn issue:
\ExplSyntaxOn
\cs_gset:Npn \NoCaseChange #1 { \use:n {#1} }
\ExplSyntaxOff
\begin{document}
\emph{\Iac{NFA}} is a mathematical machine.
\cite{knuth:ct:a}
\end{document}