
Я новичок в Latex, работаю в Linux с TextLive и VScode с расширением Latex-Workshop. Мне пришлось потратить немного времени, чтобы заставить их работать вместе, но в итоге все работает нормально, за исключением того, что я постоянно получаю сообщение об ошибке в заголовке «Отсутствует endcsname вставлено» для одной конкретной записи в моем bibfile:
@article{llavearticulo,
author = {Arthur B Cummings and David Eftekhary and Frank G House},
title = {The accurate determination of college students
coefficients of friction},
journal = {Journal of Sketchy Physics},
volume = {13},
year = {2003},
number = {2},
pages = {46--129}
}
Это просто фиктивная статья из курса по латексу. MWE:
\documentclass[12pt]{report}
\usepackage[a4paper, margin=2.54cm, head=1.27cm, foot=1.27cm]{geometry}
\usepackage[spanish]{babel}
\usepackage{natbib}
\usepackage{fancyhdr}
\usepackage{import}
\usepackage{hyperref}
\usepackage{xcolor}
\usepackage[table]{xcolor}
\usepackage{pdflscape}
\usepackage{ulem}
\usepackage{amsmath}
\usepackage{multicol}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{cellspace}
\usepackage{graphicx}
\usepackage[spanish]{cleveref}
\usepackage{url}
\graphicspath{{./images}}
\newcommand{\mychapter}[2]{
%\setcounter{chapter}{#1}
%\setcounter{section}{0}
\chapter*{#1 #2}
\addcontentsline{toc}{chapter}{#1 #2}
\refstepcounter{chapter}
}
\fancypagestyle{plain}{
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
}
\pagestyle{plain}
\renewcommand{\contentsname}{Índice general}
\renewcommand{\listfigurename}{Índice de cuadros}
\renewcommand{\listtablename}{Índice de figuras}
\title{My title}
\author{My myself}
\date{}
\begin{document}
\maketitle
Otras formas de citas
\begin{itemize}
\item \cite[p.12]{llavearticulo}
\item \cite[e.g.][p.12]{llavearticulo}
\item \cite[e.g.][]{llavearticulo}
\item \cite[][]{llavearticulo}
\item \citep{llavearticulo}
\item \cite*{llavearticulo}
\item \citep*{llavearticulo}
\end{itemize}
\newpage
\bibliography{sources}
\bibliographystyle{chicago}
\end{document}
Проверяем сгенерированные файлы, в файле main.bbl обнаружена ошибка в строке перед концом:
\begin{thebibliography}{}
\bibitem[\protect\citeauthoryear{Cummings, Eftekhary, and House}{Cummings et~al.}{2003}]{llavearticulo}
Cummings, A.~B., D.~Eftekhary, and F.~G. House (2003).
\newblock The accurate determination of college students coefficients of friction.
\newblock {\em Journal of Sketchy Physics\/}~{\em 13\/}(2), 46--129.
\end{thebibliography}
Я уже искал ответы на предыдущие вопросы, но единственные, которые хоть немного напоминали мне, были те, в которых использовались ключи со странными символами в файле bib или подчеркивание в каком-то поле.
решение1
В качестве вступления: в будущем, пожалуйста, лучше поработайте над обрезкой вашего MWE. Большинство загруженных вами пакетов не используются в документе, и если вы выполните предварительную обрезку (комментируя каждый пакет по одному и проверяя, влияет ли это на проблему), вы, возможно, придете к выводу, что следующий пример гораздо более минималистичный
\documentclass[12pt]{report}
\usepackage[spanish]{babel}
\usepackage{natbib}
\title{My title}
\author{My myself}
\date{}
\begin{document}
\maketitle
Otras formas de citas
\begin{itemize}
\item \cite[p.12]{llavearticulo}
\item \cite[e.g.][p.12]{llavearticulo}
\item \cite[e.g.][]{llavearticulo}
\item \cite[][]{llavearticulo}
\item \citep{llavearticulo}
\item \cite*{llavearticulo}
\item \citep*{llavearticulo}
\end{itemize}
\newpage
\bibliography{sources}
\bibliographystyle{chicago}
\end{document}
и что виновник — babel
с spanish
опцией.
Проблема в том, что babel-spanish создает несколько сокращений для быстрого ввода акцентированных символов с использованием стандартного набора символов ASCII. Среди них — возможность печатать ~n
и компилировать его в ñ
. К сожалению, за пределами испанского babel этот ~
символ также вставляет (определенный тип) пробела и natbib
(особенно в chicago
стиле) использует его для форматирования некоторых элементов библиографии.
Два возможных решения
Если вы вообще не используете сокращения babel (судя по MWE, который вы опубликовали, вы печатаете документ в Unicode и можете вводить символы как
ñ
напрямую), проще всего полностью отключить сокращения в babel. Это можно сделать, добавив соответствующие параметры в\uspackage[...]{babel}
. Попробуйте, например,\usepackage[spanish, es-noshorthands, shorthands=off]{babel}
Если вы действительно используете сокращения Babel, вы также можете отключить нежелательное сокращение до того, как ваша библиография будет напечатана. Попробуйте заменить последние несколько строк вашего кода на
\newpage
\shorthandoff{~} % <- turns off the ~ short hand
\bibliography{sources}
\bibliographystyle{chicago}
\end{document}