moderncv 和 babel spanish 导致“缺少 \endcsname...”错误

moderncv 和 babel spanish 导致“缺少 \endcsname...”错误

当我运行以下代码时,它会按预期进行编译:

\documentclass[%
  11pt
 ,a4paper
 ,sans
]{moderncv}

\moderncvstyle{classic}
\moderncvcolor{blue}

\usepackage[scale=0.75]{geometry}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%\usepackage[spanish, activeacute]{babel} 

% Personal Data
\firstname{John}
\familyname{Doe}
\title{CV}
\address{city}{state}{country}
\phone[mobile]{+1~(234)~567~890}
\phone[fixed]{+2~(345)~678~901}
\phone[fax]{+3~(456)~789~012}
\email{[email protected]}
\homepage{www.johndoe.com}
\extrainfo{extrainfo}
\quote{somequote}

\begin{document}

\makecvtitle

\section{First section}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
\cventry{Prueba}{Alimentación}{alimentaci'on}{}{}{}

\end{document} 

取消注释\usepackage[spanish, activeacute]{babel}会产生以下错误(此处仅粘贴第一部分):

! 缺少插入的 \endcsname。\protect l.22 \phone[mobile]{+1~(234)~567~890} 标记的控制序列不应出现在 \csname 和 \endcsname 之间。

如果我随后注释掉这些\phone行(因此babel仍未注释),它就可以正常运行。此外,将 babel 与另一种语言(例如 ngerman)和这些\phone行一起使用,也可以正常运行。

有人能告诉我发生了什么吗?为什么我不能同时使用 babel spanish 和\phoneuncommented?

我在 Linux Mint Debian 版本上使用 moderncv 1.5.1、Texlive 2012.20120611-5 和 Texmaker 3.4。

谢谢。

答案1

babel西班牙语模块重新定义为\roman使用小型大写字母,并在许多地方moderncv用于\roman构建索引宏,基本上是通过这样做

\csname xyz\roman{counter}\endcsname

\roman如果以这种方式重新定义,则将不起作用。

解决方案:es-lcroman加载时添加选项babel

\usepackage[spanish,es-lcroman]{babel}

我不确定activeacuteUTF-8 输入是否真的有必要。我不会用它~来输入电话号码:普通空格似乎就足够了。


如果需要的话,一种不同的策略es-scroman是修补所有moderncv使用以下命令\roman

\documentclass[
  11pt,
  a4paper,
 sans,
]{moderncv}

\moderncvstyle{classic}
\moderncvcolor{blue}

\usepackage[scale=0.75]{geometry}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[spanish, activeacute]{babel} 

\usepackage{regexpatch}
\makeatletter
\regexpatchcmd*{\endcvcolumns}
 {\c{roman}\cB.tmpiteratorcounter\cE.}
 {\c{romannumeral}\c{c@tmpiteratorcounter}}
 {}{}
\regexpatchcmd*{\cvcolumn}
 {\c{roman}\cB.cvcolumnscounter\cE.}
 {\c{roman}\c{c@cvcolumnscounter}}
 {}{}
\regexpatchcmd*{\collectionadd}
 {\c{roman}\cB.(collection@\cP.2@count)\cE.}
 {\c{romannumeral}\c{csname}c@\1\c{endcsname}}
 {}{}
\makeatother

% Personal Data
\firstname{John}
\familyname{Doe}
\title{CV}
\address{city}{state}{country}
\phone[mobile]{+1 (234) 567~890}
\phone[fixed]{+2 (345) 678 901}
\phone[fax]{+3 (456) 789 012}
\email{[email protected]}
\homepage{www.johndoe.com}
\extrainfo{extrainfo}
\quote{somequote}

\begin{document}
\makecvtitle

\section{First section}
\cventry{year--year}{Degree}{Institution}{City}{\textit{Grade}}{Description}
\cventry{Prueba}{Alimentación}{alimentaci'on}{}{}{}

\end{document} 

应向 的维护者提交错误修复请求moderncv。涉及的宏是

  1. \endcvcolumns其定义为\newenvironment{cvcolumns},其中

    \roman{tmpiteratorcounter}
    

    应该成为

    \romannumeral\c@tmpiteratorcounter
    
  2. \cvcolumn,其中

    \roman{cvcolumnscounter}
    

    应该成为

    \romannumeral\c@cvcolumnscounter
    
  3. \collectionadd(在 中moderncvcollection.sty),其中

    \roman{collection@#2@count}
    

    应该成为

    \romannumeral\csname c@collection@#2@count\endcsname
    

类似的问题\moderncvstyle{banking}可以通过添加来解决

\renewcommand*{\maketitlesymbol}{%
    {\quad{\rmfamily\textbullet}\quad}}

该样式使用~~~而不是\quad,由于西班牙语模块 的babel处理方式~,在标题中使用 会破坏编译。我相信\quad\hspace{...}无论如何都应该使用:将空格序列留给文字处理器,LaTeX 可以做得更好。;-)

答案2

建议的解决方案并不完整。您将在其他 cv 脚本中遇到同样的问题。加载 spanish-babel 为:

\usepackage[spanish,es-noquoting,es-noshorthands]{babel}

或者

\usepackage[spanish,es-noquoting,es-noshorthands,activeacute]{babel}

例如,您将 María 写为Mar'ia。简写会干扰moderncv

相关内容