包含 babel 和 cleveref 时出现编译错误。以及存在 \frontmatter 时出现其他错误

包含 babel 和 cleveref 时出现编译错误。以及存在 \frontmatter 时出现其他错误

概述

我目前正在用 LaTeX 重写我的一些讲义。我的母语是西班牙语,所以我正在使用这个babel软件包。我还想为生成的文档添加一些实用功能,例如书签和可点击的引用。然而,就在昨天,我偶然发现了一个编译错误,它阻碍了我的进度,我很难理解问题出在哪里。

详细信息和 MWE

我编写了一个测试文档来检查软件包是否存在问题,经过大量测试后我最终得到了以下代码,我将其命名为main.tex

\documentclass[10pt, spanish, openany]{memoir}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{amsmath, amsthm}
\usepackage[backend=biber]{biblatex}
\usepackage{csquotes}

\usepackage[pdfencoding=auto, psdextra]{hyperref}
\usepackage{cleveref} % this package breaks everything for some reason
\usepackage[numbered]{bookmark}

\begin{document}
    \frontmatter
    {
        \hypersetup{hidelinks}
        \tableofcontents
    }
    \chapter*{Sample introduction}
    \addcontentsline{toc}{chapter}{Sample introduction} % So this section gets added to ToC
    \blindtext
    \begin{align}
        \label{sample:eq1}
        x + y = 2
    \end{align}
    \blindtext
    \mainmatter
    \chapter{Sample chapter}
    \blindtext
    \section{Sample section}
    \blindtext
\end{document}

我在本测试文档中包含的一些包没有使用;但是,我的原始项目确实使用了它们,所以我认为在测试时最好保留它们。现在,经过一番折腾,我想我已经找到了罪魁祸首:(babelspanish参数)和cleveref包。当包含这两个包并\frontmatter使用命令时,我收到编译错误:c:/TeX Projects/Hyperref Frontmatter Test/main.tex:24: Missing } inserted. <inserted text>

我还发现删除\frontmatter(同时保留babelcleveref)会导致编译成功。同样,删除babelcleveref(同时保留命令\frontmatter)时,MWE 可以成功编译。如果可能的话,我想在babelcleveref\frontmatter都存在的情况下编译我的文档。另一件让我感到困惑的事情是,我很确定几周前我能够很好地编译我的原始项目(包括现在有问题的三个项目)。

答案1

更新:解决方案如下


评论有点太长了,在完全更新的 TeXLive 2021 上,我可以将 MWE 降低到

\documentclass{book}
\usepackage[spanish]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{cleveref}
\begin{document}
\frontmatter
\begin{align}
  \label{sample:eq1}
  x + y = 2
\end{align}
\end{document}

英语运行良好。因此,这似乎是\frontmatterspanishbabel amsmath(因为 没有问题equation)和之间的交互cleveref

我不知道问题是什么。我得到的错误是

! Missing } inserted.
<inserted text> 
                }
l.11 \end{align}

正如 Ulrike 在评论中提到的那样,这个问题众所周知,因为spanishbabel 会弄乱罗马数字。

在手册中babel-spanish提到,加载babel选项时es-lcroman,小写字母(\frontmatter使用)也不会改变。

因此这有效

\documentclass{book}
\usepackage[spanish,es-lcroman]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{cleveref}
\begin{document}
\frontmatter
\begin{align}
   \label{sampleEq1}
  x + y = 2
\end{align}
\end{document}

答案2

中有一个错误cleveref,它会使用任意代码进行完全扩展。合法的页码如下炸弹:

\documentclass{book}

\usepackage{cleveref}

\renewcommand{\thepage}{\arabic{chapter}\textbf{/}\arabic{page}}

\begin{document}

Text.\label{bug}

\end{document}

问题是以下分配,在\label@noarg

\edef\@tempb{\thepage}%

它应读取(很有可能,因为我不使用cleveref):

\protected@edef\@tempb{\thepage}%

由于\thepage可以是任意代码,我们不能假设它可以用 完全扩展\edef。这是一个相当常见的错误(我自己有时也会犯这个错误)。

greek例如,也存在类似的问题。

该错误已报告给作者,但与此同时,您可以使用建议的解决方法。或者,您可以修改它cleveref并查看它是否适合您。

相关内容