有人问了一个和我的问题非常相似的问题前,但我认为其他人也面临同样的问题,而且还有其他解决方案。我知道有几家学术出版商不喜欢在连续文本中过度使用大写字母,因为这会严重分散阅读注意力。相反,他们使用小写字母来表示全大写的缩写和突出显示的单词。
由于我正在编写一个 tex 模板以供将来使用,因此我需要一个可以影响所有大写单词的解决方案,而无需更改文件.tex
。此外,其他有同样问题的人可以轻松采用相同的解决方案。
目标: 将文档中所有大写单词全部转换为小写单词。
问题:
- 我们需要确定全大写的单词和它们的边界,然后才能转换它们。
- 在大多数情况下,完整的单词需要用小写字母,包括首字母(如
\textsc{\MakeLowercase{#1}}
),但有些人更喜欢首字母大写(如回答之前提出的问题)。 - 缩写的复数形式(例如 URL、CD)包含后缀s,它应该保持小写(一如既往)。
解决方案: 我寻找过各种方法来解决这个问题,但没有一个能给我正确的解决方案。
使用 Lua 代码(在 LuaLaTeX 中;参见Lua 前沿模式和宏:替换所有出现的单词)。但是,以下代码不起作用,可能是因为它也会影响 LaTeX 命令(我一直在考虑忽略/转义
\
,就像我需要对 word-final 做的那样-s)。\usepackage{luacode} \begin{luacode} function capstosc ( s ) return unicode.utf8.gsub( s, "(%f[%a]%u+%f[%A])" , "{\\scshape\\MakeLowercase{#1}}") end \end{luacode} \AtBeginDocument{% \directlua{luatexbase.add_to_callback ( "process_input_buffer", capstosc, "capstosc" )}
l3regex
(使用与上面类似的 RegEx 搜索条目)但我还没有找到任何方法将其应用于整个文档文本;定制的 TeX 代码;另一个问题是一个答案提供了此功能,但它不能应用于整个文档,并且似乎无法调整以忽略复数s的。