使用 \pagenumbering{roman} 与 microtype 包结合使用以及章节/章节标签时出现的问题

使用 \pagenumbering{roman} 与 microtype 包结合使用以及章节/章节标签时出现的问题

我正在使用 scrreprt 文档类为我所在大学的学习课程撰写报告。在撰写附录时,我意识到 microtype 包与罗马页码结合使用似乎会导致错误(与使用大写或小写罗马数字无关)。将阿拉伯数字改为罗马数字后,无法再使用 \label{} 命令,否则会导致编译器崩溃。具体来说,如果我在章节或章节命令后添加标签,则会发生与 .tex 和 .aux 文件相关的不同错误。与 .tex 文件相关,我在其中使用标签命令,会产生以下错误:

\MT@res@a 的参数有一个额外的 }。\label{chapter:MyChapterName}

段落在 \MT@res@a 完成之前结束。\label{chapter:MyChapterName}

与 .aux 文件相关,报告了后续错误:

段落在 \@newl@bel 完成之前结束。...T1/LinuxBiolinumT-TLF/b/n/17.28 \def \par

额外},或被遗忘的\endgroup。.../LinuxBiolinumT-TLF/b/n/17.28 \def \par }

额外},或者被遗忘的\endgroup。......1{\fontencoding {T1}\selectfont

额外},或者被遗忘的\endgroup。...1][]\fontencoding {T1}\selectfont i}}}

由于 \MT@res@a 错误似乎与 microtype 的使用有关(我加载时没有任何选项),我尝试在不加载 microtype 的情况下进行编译。它工作正常。通过不将编号样式从阿拉伯语更改为罗马语或不使用标签命令,问题也得到了“解决”。在我看来,上述两种方法都不是很好的解决方法。我遇到的问题似乎也是由用户 cfr 报告的,他对以下内容发表了评论问题并提到了同样的事情问题。如果能与这位用户取得联系就好了,但是这里似乎没有直接留言功能(如果我错了请原谅我,我几个小时前才加入这个社区)。

关于这个问题,我还必须说明,我正在使用 utf-8 输入加密和 T1 字体加密。

我没有构建最小工作示例,但由于强烈建议讨论这个问题,我将尝试创建一个并重现错误。

此外,如果有助于理解问题,我可以提供完整的日志以及 TeXstudio 报告的 .aux 和 .tex 文件中的部分以产生命名的错误。

我期待您的评论/建议/解决方案。如果我没有完全遵守本论坛/社区的规则,在写上述问题时犯了一些形式上的错误,请您原谅。

诚挚的,P. Schweitzer

更新:最小工作示例

很抱歉一开始没有贴出最低限度的工作示例。无论如何,它在这里:

\documentclass{scrreprt}
\usepackage{scrlayer-scrpage}           % I left the scrlayer-scrpage package in place to show pagenumbering, deleting does not affect the error

\usepackage[greek,ngerman]{babel}       % by deleting the greek option, the error is solved

\usepackage{microtype}                  % by commenting this command out, the error is solved

\usepackage{cleveref}                   % by commenting this command out, the error is solved

\cfoot{\pagemark}                       % I left the pagemark command in place to show pagenumbering, deleting does not effect the error

\begin{document}
\clearpage
\pagenumbering{Roman}

\chapter{Abstract} 
\label{chapter:abstract}                % by commenting all labels in Roman or roman numbered sections/chapters out, the error is solved

\clearpage
\pagenumbering{arabic}

\chapter{Mainpart}
\label{chapter:mainpart}

\section{Test2}
\label{sec:test2}

\appendix
    \clearpage
    \pagenumbering{roman}

    \chapter{Appendix}
    \label{chapter:appendix}

    \section{Test3}
    \label{sec:test3}                   % by commenting all labels in Roman or roman numbered sections/chapters out, the error is solved
\end{document}

请注意:我评论了更改,如果应用这些更改,问题就会解决。特别是我注意到,如果我禁用 cleveref 包,错误也会消失,这是我以前没有意识到的。此外,禁用 babel 的 greek 选项也可以解决错误。尽管如此,我尤其需要 greek 选项,因为我正在写一份科学报告,其中大量使用希腊字母。此外,为了使代码在编译器“失败”运行后正常工作,您始终必须删除 .aux 文件。否则,即使您在代码中技术上解决了该问题,错误仍然存​​在。

如果您知道这个错误来自哪里以及如何“正确”地解决它,我会很高兴阅读您的建议!

感谢您的支持。诚挚的,P. Schweitzer

答案1

不幸的是,babel-greek重新定义内部宏\@Roman使得\@roman它们基本上无法使用。

他们的想法是,当使用希腊数字时,罗马数字的页码也会正确显示,有时它可以正常工作,但在microtype需要执行其工作时则不行。

\pageref解决方法是确保使用默认输出编码打印页码并恢复标准定义。不过,如果您在希腊语环境中这样做,则应小心谨慎。

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[greek,ngerman]{babel}

\usepackage{scrlayer-scrpage}
\usepackage{microtype}
\usepackage{cleveref}

% restore the kernel definitions
\makeatletter
\def\@Roman#1{\expandafter\@slowromancap\romannumeral#1@}
\def\@roman#1{\romannumeral#1}
\makeatother

\edef\documentencodingdefault{\encodingdefault}
\cfoot{\fontencoding{\documentencodingdefault}\selectfont\pagemark}

\begin{document}
\pagenumbering{Roman}

\chapter{Abstract}
\label{chapter:abstract}

\clearpage
\pagenumbering{arabic}

\chapter{Mainpart}
\label{chapter:mainpart}

\section{Test2}
\label{sec:test2}

\clearpage
\appendix
\pagenumbering{roman}

\chapter{Appendix}
\label{chapter:appendix}

\section{Test3}
\label{sec:test3}

\end{document}

相关内容