以下示例编译时出现错误:
\documentclass{article}
\usepackage[english]{babel}\usepackage{csquotes}
\usepackage{listings}%\usepackage{listingsutf8}
\usepackage[style=ieee]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{bib.bib}
@Article{A1, title = {A b}}
@Article{A2, title = {A~b}}
\end{filecontents}
\addbibresource{bib.bib}
\begin{document}
A: \cite{A1}.\\
B: \cite{A2}.\\
\printbibliography
\end{document}
l.23未定义控制序列。
某些原因可能导致~
参考书目条目中的字符对 LaTeX 造成混淆,因为\cite{A2}
注释掉的文档编译时没有错误。
无论是更改\usepackage[english]{babel}
为\usepackage{babel}
还是更改\usepackage[style=ieee]{biblatex}
为\usepackage{biblatex}
,
或者删除\usepackage{listings}
(这是必要的,但它的应用已从 MWE 中删除),
都会导致文档编译时不会出现错误,因此涉及四个因素:所有这三个包以及参考书目中波浪符号的使用。
我无法找出这种不兼容的原因,但解决这个问题对我来说非常有用。
答案1
编辑:
最近(2019年9月)listings
已更新,此问题不再存在。
正如 Ulrike Fischer 在下面的评论中所说,这是 中的一个错误listings
。包使用\lccode
来定义字符类型以供以后使用。这个\lccode
技巧之所以使用,~
是因为它是 LaTeX 中的一个标准活动字符。但listings
“忘记”将其重置\lccode
为原始值,然后\the\lccode`~
保持等于122
( 的值z
)。
要修复此问题,您可以在加载后立即重置\lccode
。~
此外listings
,egreg 发现这里,同样的问题也发生在 上\/
,因此可以对两者使用相同的修复方法:
\usepackage{listings}
\lccode`~=0 % Fix for ~
\lccode`\/=0 % Fix for \/ (https://tex.stackexchange.com/a/202621/134574)
旧答案:
该问题实际上与无关biblatex
。以下 MWE 引发了相同的错误:
\documentclass{article}
\usepackage{babel}
\usepackage{listings}
\begin{document}
\MakeLowercase{A~b}
\end{document}
错误是:
! Undefined control sequence.
<to be read again> az
b
l.12 \MakeLowercase{A~b}
发生这种情况是biblatex
因为它使用了\MakeLowercase
。
babel
我认为,该错误是由于和的相互作用导致的某些不兼容造成的listings
。
显然\lccode
of~
被定义为z
,而 thisz
未定义。一种解决方法(不确定是否是最佳选择)是进行以下定义:
\begingroup\lccode`~=`z\lowercase{\endgroup\let~= }
那么你的 MWE 工作正常:
\documentclass{article}
\usepackage[english]{babel}\usepackage{csquotes}
\usepackage{listings}%\usepackage{listingsutf8}
\usepackage[style=ieee]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{bib.bib}
@Article{A1, title = {A b}}
@Article{A2, title = {A~b}}
\end{filecontents}
\addbibresource{bib.bib}
\begingroup\lccode`~=`z\lowercase{\endgroup\let~= }
\begin{document}
A: \cite{A1}.\\
B: \cite{A2}.\\
\printbibliography
\end{document}