Recientemente actualicé l3kernel
otros paquetes e instalé biblatex-chem
y libertinust1math
. Ahora recibo un error con el acro
paquete.
Específicamente, estoy tratando de usar \emph{\Iac{NFA}}
y obtengo "ERROR: Número faltante, tratado como cero" \l__acro_article_Indefinite_bool
en el siguiente ejemplo mínimo. (Consulte a continuación el mensaje de error completo). Antes de actualizar e instalar los paquetes anteriores, todo funcionaba correctamente con el documento del que derivé este ejemplo.
No estoy seguro de lo que está pasando, aunque parece estar relacionado biblatex
por alguna razón. ¿Alguien sabe qué está causando esto?
\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}
Aquí hay una sección del .log
archivo que rodea el error. El .log
archivo completo se puede encontrar en.registro de error
\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.
Respuesta1
¡Ay! Éste es astuto.
Primero, el problema no está relacionado (más o menos) con biblatex
. El problema sólo aparece allí porque biblatex
se suma \NoCaseChange
a expl3
's \text_expand:n
. Si lo haces manualmente con
\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
puedes eliminar biblatex
de la ecuación.
El problema es que \NoCaseChange
es igual a \use:n
y \use:n
es unextremadamentemacro omnipresente, por lo que hará cualquier cosamirarMe gusta \NoCaseChange
, lo cual no es bueno. En el caso específico de acro
, utiliza \tl_map_tokens:nn
para iterar en una lista que contiene {indefinite}
y finalmente llega a un código que se parece a:
\use:n{\__acro_article:nnn {NFA}{long-acc}}{indefinite}
que debería pasar la {indefinite}
lista de tokens a \__acro_article:nnn {NFA}{long-acc}
, lo cual funciona muy bien... a menos que \use:n
signifique omitir el argumento mientras se cambia el caso, que es exactamente lo que sucede aquí: la \__acro_article:nnn
cosa se omite, indefinite
se cambia el título y el caso a Indefinite
, y todo se sale del pistas.
Creo que la forma correcta de solucionar este problema sería hacer\NoCaseChange
diferentede \use:n
y \@firstofone
para que no se confunda tan fácilmente:
\ExplSyntaxOn
\cs_gset:Npn \NoCaseChange #1 { \use:n {#1} }
\ExplSyntaxOff
Agregue eso a su documento después de cargarlo biblatex
y debería funcionar bien:
\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}