使用 \citep{} 会导致“!缺少 \endcsname 插入。”错误

使用 \citep{} 会导致“!缺少 \endcsname 插入。”错误

当我尝试编译我的文档时,! Missing \endcsname inserted.如果引用键中有“:”,则会出现以下错误。这是我的 MWE:

\documentclass[12pt,a4paper,twoside]{article}
\usepackage[utf8x]{inputenc}
\usepackage{ucs}
\usepackage[francais,french]{babel}
\usepackage[T1]{fontenc}\usepackage{amsmath}
\usepackage[authoryear]{natbib}
\setlength{\bibsep}{0pt}
\begin{document}
Blablablabla \citep{Organization:2003aa}.
\bibliographystyle{biblio}
\bibliography{Biblio}
\end{document}

仅当 bibdex 引用键包含“:”时才会出现错误,如果我将“:”替换为破折号,则不会出现错误。我使用的 bst 文件是去年我自己定制的,我将其用于另一篇论文,它运行良好。

在此先感谢您的帮助。

答案1

问题是,\cite当语言为法语时,命令和朋友不会激活任何有关冒号的保护,因为冒号在法语中具有特殊含义。

解决方法:\NAT@sort@cites修改

\begin{filecontents*}{\jobname.bib}
@article{x:y,
 author={A. U. Thor},
 title={Title},
 journal={Journal},
 year=2013,
}
\end{filecontents*}

\documentclass[12pt,a4paper,twoside]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{amsmath}
\usepackage[authoryear]{natbib}

\makeatletter
\let\ORG@NAT@sort@cites\NAT@sort@cites
\def\NAT@sort@cites#1{%
  \edef\@tempa{\detokenize{#1}}%
  \ORG@NAT@sort@cites\@tempa
}
\makeatother

\begin{document}

Blablablabla \citep{x:y}.
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}

请注意,这filecontents*只是提供一个独立的示例。

还要注意,同时加载francais和是没有意义的french,因为它们的作用相同,可能会混淆babel。一般来说,我更喜欢utf8utf8x对于选项,加载ucs是不合法的utf8;对于选项,加载是不必要的utf8x,除非将某个选项传递给它,在这种情况下应该加载它 inputenc

相关内容