패키지를 업데이트하고 설치한 후 acro에서 숫자 누락 오류가 발생함

패키지를 업데이트하고 설치한 후 acro에서 숫자 누락 오류가 발생함

l3kernel최근에 및 기타 패키지를 업데이트 하고 설치 biblatex-chem했습니다 libertinust1math. 이제 패키지에 오류가 발생합니다 acro.

특히 다음 최소 예제에서는 \emph{\Iac{NFA}}"ERROR: 누락된 숫자, 0으로 처리됨"을 사용하려고 시도 중입니다 . \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납니다 . 수동으로 수행하면\NoCaseChangeexpl3\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}

관련 정보