![使用 \citep{} 会导致“!缺少 \endcsname 插入。”错误](https://linux22.com/image/274301/%E4%BD%BF%E7%94%A8%20%5Ccitep%7B%7D%20%E4%BC%9A%E5%AF%BC%E8%87%B4%E2%80%9C%EF%BC%81%E7%BC%BA%E5%B0%91%20%5Cendcsname%20%E6%8F%92%E5%85%A5%E3%80%82%E2%80%9D%E9%94%99%E8%AF%AF.png)
当我尝试编译我的文档时,! 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
。一般来说,我更喜欢utf8
。utf8x
对于选项,加载ucs
是不合法的utf8
;对于选项,加载是不必要的utf8x
,除非将某个选项传递给它,在这种情况下应该加载它前 inputenc
。