![titlecap – 不要将连字符“to”大写](https://linux22.com/image/421008/titlecap%20%E2%80%93%20%E4%B8%8D%E8%A6%81%E5%B0%86%E8%BF%9E%E5%AD%97%E7%AC%A6%E2%80%9Cto%E2%80%9D%E5%A4%A7%E5%86%99.png)
我拼命想\titlecap
打印序列到序列作为序列到序列。
但是,将单词“to”添加到小写单词列表中(即\Addlcwords
)似乎还不够,定义的例外似乎被带连字符的单词忽略了——导致序列到序列。
是否有可用的选项来实现上述结果?
血管内皮生长因子:
\documentclass{article}
\usepackage{titlecaps}
\Addlcwords{to}
\begin{document}
\titlecap{sequence-to-sequence}
\end{document}
答案1
我已经研究过为什么会出现这种情况(请参阅附录)。人们希望将其添加到小写列表中就足够了(我有一段时间没有看过代码了)。与此同时……如何覆盖这种行为?
通常情况下,您会将“to”括在 中\textnc{to}
,表示“无变化”,这会覆盖 a 内的大写命令\titlecap
,并且不会对其外的任何操作。但是,在您的特定示例中,单词sequence-to-sequence
是参数的第一个单词,它被特殊处理(即使它在小写列表中,也会被大写。
因此,您需要一种不同的方法...请参阅文档的第 3 页:“为了防止单词被标题化(强制将其变为小写),可以在其前面紧接着一个\relax
。这样,\relax
标题就是,而不是后面的单词。此方法可用于一次性标题例外,或用于克服上面描述的花括号问题,如\{\relax if\}
。”
第一行显示没有连字符。第二行是 OP 提出的情况,带有覆盖\relax
。第三行是当单词不是参数的第一个单词的一部分时如何执行此操作。最后一行显示\textnc
在 之外的工作\titlecap
。
\documentclass{article}
\usepackage{titlecaps}
\Addlcwords{to}
\begin{document}
\titlecap{sequence to sequence}% WITHOUT HYPHENS WORKS AS EXPECTED
\titlecap{sequence-\relax to-sequence}% PREPEND \relax FOR SPECIAL CASE EXCEPTIONS
\titlecap{a sequence-\textnc{to}-sequence}% ENCLOSE WITH \textnc
a sequence-\textnc{to}-sequence
\end{document}
附录
好吧,事实证明,虽然代码可以在连接符号(例如[
、(
、-
等)之后触发大写(这是您不喜欢的行为),但使用小写单词列表来阻止-to-
示例中的 大写的唯一方法是(理论上,稍后会详细介绍)将小写单词定义为sequencetosequence
。但这也不能满足您的要求,因为它会阻止s
字母大写,以及to
。
出现这种奇怪行为的原因是,该包使用的方法是筛选出(忽略)小写单词搜索中的符号字符,例如(
、等。[
不过,还有一个额外的麻烦,那就是我发现连字符-
没有像其他符号一样被屏蔽掉。我必须更仔细地研究,以确定我是否有正当理由做出这一例外。
我可以说,如果有人想将连字符视为括号,方括号等,可以这样做:
\documentclass{article}
\usepackage{titlecaps}
\makeatletter
% THESE ARE THE PUNCTUATION MARKS SCREENED OUT FOR
% LOWER CASE WORD SEARCH
\renewcommand\kill@punct{%
\catcode`-=9 %
\catcode`.=9 %
\catcode`,=9 %
\catcode`:=9 %
\catcode`;=9 %
\catcode`(=9 %
\catcode`)=9 %
\catcode`[=9 %
\catcode`]=9 %
\catcode`?=9 %
\catcode`!=9 %
\catcode``=9 %
\catcode`'=9 %
}
\renewcommand\restore@punct{%
\catcode`-=12 %
\catcode`.=12 %
\catcode`,=12 %
\catcode`:=12 %
\catcode`;=12 %
\catcode`(=12 %
\catcode`)=12 %
\catcode`[=12 %
\catcode`]=12 %
\catcode`?=12 %
\catcode`!=12 %
\catcode``=12 %
\catcode`'=12 %
}
\makeatother
\Addlcwords{sequencetosequence}
\begin{document}
\titlecap[x]{sequence-to-sequence}
\end{document}
然而,正如我上面提到的,这也不是理想的结果,因为大写字母s
也会被抑制
您要查找的内容取决于我是否能按照非字母符号执行新的小写单词搜索。我猜我在设计软件包时已经尝试过这样做,但没有成功。但是,如果有解决方案,我会更新软件包。