将所有大写单词转换为小写字母 #2

将所有大写单词转换为小写字母 #2

有人问了一个和我的问题非常相似的问题,但我认为其他人也面临同样的问题,而且还有其他解决方案。我知道有几家学术出版商不喜欢在连续文本中过度使用大写字母,因为这会严重分散阅读注意力。相反,他们使用小写字母来表示全大写的缩写和突出显示的单词。

由于我正在编写一个 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的。

相关内容