这是西班牙语 babel 与两栏回忆录和 \frontmatter 之间的冲突。
Babel In TeXLive 2021 似乎现在将这些元素与希腊语组合在一起时也会产生同样的错误,即使没有输入任何希腊语。同时使用这两个es-ucroman
是没用的。即使使用\pagenumbering{roman}
而不是\frontmatter
也会失败,尽管使用 不会出错\pagenumbering{alph}
。
最小不起作用的示例:
\documentclass[twocolumn]{memoir} % works without twocolumn/memoir
\usepackage[LGR,TS1,T1]{fontenc}
\usepackage[greek,spanish,es-ucroman]{babel} % works without greek
\begin{document}
% \pagenumbering{roman} % works with `alph`
\frontmatter % works without frontmatter
foo
\mainmatter
foo
\end{document}
我怎样才能在不切换到其他课程的情况下解决这个问题?
答案1
问题在于babel-spanish
和babel-greek
的相互作用mparhack
。
您可以通过修补重新定义mparhack
和\@outputdblcol
使用 的包中的其他命令来修复它\thepage
。
这应该与西班牙语的默认罗马数字一起使用,es-lcroman
或者es-ucroman
(当babel-greek
进入场景时)。
\documentclass[twocolumn]{memoir} % works without twocolumn/memoir
\usepackage[T1]{fontenc}
\usepackage[greek,spanish,es-ucroman]{babel} % works without greek
\usepackage{xpatch}
\makeatletter
\def\kernel@roman#1{\romannumeral#1}
\def\kernel@Roman#1{\expandafter\@slowromancap\romannumeral#1@}
\def\fix@mph@spanish@greek{%
\let\es@scroman\@firstofone
\let\@Roman\kernel@Roman
\let\@roman\kernel@roman
}
\xpatchcmd{\mph@get@margin}
{\begingroup}
{\begingroup\fix@mph@spanish@greek}
{}{}
\xpatchcmd{\@outputdblcol}
{\def}
{\fix@mph@spanish@greek\def}
{}{}
\xpatchcmd{\mph@outputpage@hook}
{\bgroup}
{\bgroup\fix@mph@spanish@greek}
{}{}
\makeatother
\begin{document}
\frontmatter % works without frontmatter
foo\marginpar{what}
\mainmatter
foo\marginpar{what}
\end{document}