我需要加载greek
以babel
支持希腊文,但我也使用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>
,并且对数字的搜索到此结束。
更新
随着titlecaps
2015/01/30 发布的 1.2 版本,这些问题已得到解决,并且您的原始示例将保持不变。