更新並安裝軟體套件後,acro 出現缺少數位錯誤

更新並安裝軟體套件後,acro 出現缺少數位錯誤

我最近更新了l3kernel其他軟體包並安裝了biblatex-chemlibertinust1math。我現在收到包錯誤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添加\NoCaseChangeexpl3s \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},效果很好...除非\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}

相關內容