如何解决希腊语和标题大写之间的冲突?

如何解决希腊语和标题大写之间的冲突?

我需要加载greekbabel支持希腊文,但我也使用titlecaps大写某些标题文本。

不幸的是,这种组合似乎不兼容,但我无法确定具体原因并找出解决方法。

\documentclass[greek,british]{article}
\usepackage{babel}
\usepackage{titlecaps}
\Addlcwords{of}

\begin{document}

    This is some text.

\end{document}

调整此代码以使其正常工作的最佳方法是什么?

在上面的例子中,注释掉\Addlcwords{of}代码可以编译。但是,在我的实际示例中,这只会导致代码后面出现不同的错误,依此类推。所以我很确定我在这里犯了一些系统性的错误。那是什么?

答案1

这是常见的问题:该包使用\roman罗马数字来表示计数器值,但greek选项babel更改\roman为不完全可扩展的命令。

不幸的是,\roman的几乎所有宏中都使用了titlecaps,因此提供补丁意味着重写包。

Manuel 在评论中建议的解决方法可能可以,但它可能会破坏希腊文本。

\documentclass{article}

\makeatletter
\let\latex@roman\@roman
\makeatother

\usepackage[greek,british]{babel}
\usepackage{titlecaps}

\makeatletter
\let\@roman\latex@roman
\makeatother

\Addlcwords{of}

\begin{document}

This is some text.

\end{document}

附注:titlecaps无论如何该包都需要修改,因为它的几个宏在定义中具有未受保护的行尾。

对应该提供正确行为的命令的一系列修补titlecaps似乎如下:

\documentclass{article}

\usepackage[greek,british]{babel}
\usepackage{titlecaps}
\usepackage{xpatch}

\makeatletter
\def\dopatch#1{\xpatchcmd{#1}{\roman}{\romannumeral\value}{}{}}
\dopatch\Addlcwords
\dopatch\add@lcword
\dopatch\seek@lcwords
\dopatch\seek@lcwords
\dopatch\seek@lcwords
\dopatch\seek@lcwords
\dopatch\titlecap
\dopatch\titlecap
\dopatch\titlecap
\dopatch\titlecap
\dopatch\titlecap
\dopatch\titlecap
\dopatch\title@string
\dopatch\title@string
\dopatch\title@string
\dopatch\parse@@@Block
\undef\dopatch
\makeatother

\Addlcwords{of}

\begin{document}

This is some text.

\end{document}

这样,所有出现的\roman{<counter>}都会变成\romannumeral\value{<counter>},这是安全的,因为它扩展为\romannumeral\c@<counter>,并且对数字的搜索到此结束。

更新

随着titlecaps2015/01/30 发布的 1.2 版本,这些问题已得到解决,并且您的原始示例将保持不变。

相关内容