最近、l3kernel
およびその他のパッケージを更新し、biblatex-chem
およびをインストールしましたlibertinust1math
。現在、パッケージでエラーが発生していますacro
。
具体的には、次の最小限の例では を使用しようと\emph{\Iac{NFA}}
していますが、「エラー: 数値が不足しているため、ゼロとして扱われます」というエラーが表示されます\l__acro_article_Indefinite_bool
。(完全なエラー メッセージについては、以下を参照してください。) 上記のパッケージを更新してインストールする前は、この例の元となったドキュメントではすべて正常に動作していました。
何が起こっているのかよく分かりませんが、biblatex
何らかの理由で関連しているようです。原因を知っている人はいますか?
\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}
.log
これはエラーの周りのファイルの一部です。完全な.log
ファイルは以下にあります。エラーのログ
\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.
答え1
痛い!これは卑劣なやつだ。
まず、この問題は とは(ある意味)無関係です。この問題はがの に追加されるbiblatex
ためにのみ発生します。これを手動で行うと、biblatex
\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
biblatex
方程式から削除することができます。
問題は、 が\NoCaseChange
に等しく\use:n
、\use:n
が非常にユビキタスマクロなので、何でも作れます見てのように\NoCaseChange
、これは良くありません。 の具体的なケースではacro
、 を\tl_map_tokens:nn
使用して を含むリストを反復処理し{indefinite}
、最終的に次のようなコードに到達します。
\use:n{\__acro_article:nnn {NFA}{long-acc}}{indefinite}
{indefinite}
これはトークン リストを に渡すはずです\__acro_article:nnn {NFA}{long-acc}
が、これはうまく機能します... except は\use:n
大文字と小文字を変更するときに引数をスキップすることを意味しますが、ここでまさにそれが起こります。 は\__acro_article:nnn
スキップされ、indefinite
にタイトル ケース変更されIndefinite
、すべてが軌道から外れます。
これを修正する正しい方法は、\NoCaseChange
違う簡単に間違えられないようにするため\use:n
です:\@firstofone
\ExplSyntaxOn
\cs_gset:Npn \NoCaseChange #1 { \use:n {#1} }
\ExplSyntaxOff
ロード後にこれをドキュメントに追加するとbiblatex
、正常に動作するはずです。
\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}