我遇到了一个非常奇怪的行为,我设法将其归结为这个最小的例子。这可能是 memoir 或 babel 开发人员的错误报告(应该发送到哪里?)但我认为我应该在这里询问是否有人可以帮助我让它工作。问题可以在生成的文档的第五页中看到:
我原本以为是“关于第 1 章”,但得到的却是“关于第 ??”。如果我删除 babel 包,它似乎可以工作……但我需要它。还有其他解决方案吗?
\documentclass{memoir}
\usepackage[greek, english]{babel}
\usepackage{lipsum}
\begin{document}
\pagestyle{headings}
\chapter{Lorem}
\label{one}
\lipsum[1-5]
\chapter{Comments}
\lipsum[1-3]
\section{Regarding chapter~\ref{one}}
\lipsum[1-5]
\end{document}
答案1
如果你查看控制台日志,你会发现报告的错误是标签ONE
未定义。但你的标签是one
。这表明问题在于\MakeUppercase
在解析引用之前,标签正在被转换为或其等效项。部分解决方案是将引用包装在中\lowercase
,或将标签全部大写。在下面的例子中,我选择了后者。
\documentclass{memoir}
\usepackage[greek, english]{babel}
\usepackage{lipsum}
\begin{document}
\pagestyle{headings}
\chapter{Lorem}
\label{ONE} % make label uppercase
\lipsum[1-5]
\chapter{Comments}
\lipsum[1-3]
\section{Regarding chapter~\ref{ONE}}
\lipsum[1-5]
\end{document}
答案2
这是由于使用大写标题的方式造成的,它会影响引用。一个简单的解决方法是使用大写字母标签进行交叉引用,因为您知道它们将用于大写文本。如果您\label{ONE}
稍后写下,您就会看到它
\section{Regarding chapter~\ref{ONE}}
当然可以修复。不过我建议不要使用全大写文本,而是使用示例\scshape
。