使用 babel package spanish 编写附录第十五章(西班牙语字母表中的字母 ñ)时出错

使用 babel package spanish 编写附录第十五章(西班牙语字母表中的字母 ñ)时出错

我目前正在用 LaTeX 编写一个很长的文档(我的论文),文档的结构中我编写了附录 15 的数字,但众所周知,西班牙语中 15 的数字字母是 ñ,因此在编译时出现错误,我尝试使用最小文档,但突然出现文档错误,我遇到了同样的错误。我使用的是 TeX Live 2014

错误是:

Extra \ or. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}
Something's wrong - Perhaps a missing \ item. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}
Missing} inserted. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}
Extra \ else. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}
Something's wrong - Perhaps a missing \ item. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}
Missing} inserted. ... {\ 'E} index 15} {33} {Appendix.alph1.Alph15}

更详细的内容是.toc

\ contentsline {chapter} {Ap \ '{e} index \ numberline {\ ~ N} ap \ IeC {\' e} index 15} {33} {Appendix.alph1.Alph15}

我该如何消除这个错误,因为我需要做这个附录,我附件中的最小文档也给了我错误:

\documentclass[10pt,letterpaper,spanish]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{babel}
\usepackage[title, titletoc,page]{appendix}
\usepackage{graphicx}
\usepackage{hyperref}
\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{capitulo 1}
\appendix
\chapter{apéndice 1}
\chapter{apéndice 2}
\chapter{apéndice 3}
\chapter{apéndice 4}
\chapter{apéndice 5}
\chapter{apéndice 6}
\chapter{apéndice 7}
\chapter{apéndice 8}
\chapter{apéndice 9}
\chapter{apéndice 10}
\chapter{apéndice 11}
\chapter{apéndice 12}
\chapter{apéndice 13}
\chapter{apéndice 14}
\chapter{apéndice 15}
\end{document}

答案1

问题出\numberlinespanish.ldf(2014/04/24 v5.0n)的重新定义中:

\def\numberline#1{%
  \hb@xt@\@tempdima{%
    #1%
    \if&#1&\else.\fi
    \hfil
  }%
}

#1包含数字(或不包含)。测试\if&#1&会扩展数字。如果为空或扩展为无,则抑制以下点。但是,这种扩展是以困难的方式进行的,不尊重 LaTeX 的保护机制。因此,数字的#1稳健(在 LaTeX 意义上)宏在硬扩展中中断。\~\~N

以下重写测试扩展了 内的数字\protected@edef,这是一种符合 LaTeX 保护机制的扩展。然后将定义的宏\@temp@num与空宏进行比较,\@empty而无需进一步扩展。

\makeatletter
\renewcommand*{\numberline}[1]{%
  \hb@xt@\@tempdima{%
    #1%
    \protected@edef\@temp@num{#1}%
    \ifx\@temp@num\@empty\else .\fi
    \hfil
  }%
}   
\makeatother

完整示例:

\documentclass[10pt,letterpaper,spanish]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{babel}
\usepackage[title, titletoc,page]{appendix}
\usepackage{graphicx}
\usepackage{hyperref}

\makeatletter
\renewcommand*{\numberline}[1]{%
  \hb@xt@\@tempdima{%
    #1%
    \protected@edef\@temp@num{#1}% 
    \ifx\@temp@num\@empty\else .\fi
    \hfil
  }%
}
\makeatother

\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{capitulo 1}
\appendix
\chapter{apéndice 1}
\chapter{apéndice 2}
\chapter{apéndice 3}
\chapter{apéndice 4}
\chapter{apéndice 5}
\chapter{apéndice 6}
\chapter{apéndice 7}
\chapter{apéndice 8}
\chapter{apéndice 9} 
\chapter{apéndice 10}
\chapter{apéndice 11}
\chapter{apéndice 12}
\chapter{apéndice 13}
\chapter{apéndice 14}
\chapter{apéndice 15}
\end{document}

还有改进的空间:

  • T1编码,参见 David 的回答
  • 字体系列 Latin Modern,Computer Modern 的后继者。
  • bookmark。那么书签更新更快,功能更多。
  • 最后的例子也使用了编号书签。

完整示例:

\documentclass[10pt,letterpaper,spanish]{book}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{babel}
\usepackage[title, titletoc,page]{appendix}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{bookmark}
\bookmarksetup{numbered, open}

\makeatletter
\renewcommand*{\numberline}[1]{%
  \hb@xt@\@tempdima{%
    #1%
    \protected@edef\@temp@num{#1}%
    \ifx\@temp@num\@empty\else .\fi
    \hfil
  }%
}
\makeatother

\begin{document}
\frontmatter
\tableofcontents
\mainmatter
\chapter{capitulo 1}
\appendix
\chapter{apéndice 1}
\chapter{apéndice 2}
\chapter{apéndice 3}
\chapter{apéndice 4}
\chapter{apéndice 5}
\chapter{apéndice 6}
\chapter{apéndice 7}
\chapter{apéndice 8}
\chapter{apéndice 9}
\chapter{apéndice 10}
\chapter{apéndice 11}
\chapter{apéndice 12}
\chapter{apéndice 13}
\chapter{apéndice 14}
\chapter{apéndice 15}
\end{document}

答案2

你可能应该向 Babel 维护者报告这个问题,但如果你添加

\usepackage[T1]{fontenc}

无论如何这都是一个好主意,因为如果您使用默认的 OT1 编码,您将无法正确连接带重音字母的单词。

相关内容