将文档中的某些单词大写

将文档中的某些单词大写

我有一组非常大的文档,其中有些关键字的拼写并不总是正确的。是否可以告诉 latex 始终以某种方式书写某些单词?(在这种情况下,应该将它们大写,但我可能会考虑添加 \emph 等)

我可以为此编写一个脚本,但总的来说,我对这种事后编辑更感兴趣。

直观地看,文本内容如下:

This causes a Damage roll, that causes a damage roll.

所以我想告诉 latex,“damage roll”应该写成“Damage Roll”,所以上面文本的输出是:

This causes a Damage Roll, that causes a Damage Roll.

尽管来源不同。

答案1

将所有东西混合起来,你会得到:

% !TEX TS-program = lualatex
\documentclass{article}

\usepackage{polyglossia}
\usepackage{mfirstuc} % << fot capitalisewords command
\usepackage{luacode} % << for luacode environment
\setdefaultlanguage{english}

%% Lua code - Credits to Mico
\begin{luacode}
function textreplace ( buff )
   buff = string.gsub ( buff, "key sentence one", "\\capitalisewords{%0}" )
   buff = string.gsub ( buff, "key sentence two",       "\\capitalisewords{%0}" )
   buff = string.gsub ( buff, "key sentence three",   "\\capitalisewords{%0}" )
   return buff
end
\end{luacode}
\newcommand{\TextreplaceOn}{\directlua{luatexbase.add_to_callback( "process_input_buffer" , textreplace , "textreplace" )}}
\newcommand{\TextreplaceOff}{\directlua{luatexbase.remove_from_callback( "process_input_buffer" , "textreplace" )}}

\begin{document}
Writing your document normally with key sentence one, other key sentence two and maybe also a key sentence three and the output is:

\TextreplaceOn
Writing your document normally with key Sentence one, other key sentence two  and maybe also a key dentence three and the output is
\end{document}

key sentence添加一个新buff = string...行。但显然你必须用 LuaLaTeX 进行编译(我说但因为这样做几乎没有什么缺点)。

来源(如果您想进行进一步的定制):

https://tex.stackexchange.com/a/78217/114143 https://tex.stackexchange.com/a/165224/114143 https://tex.stackexchange.com/a/305248/114143


编辑:考虑到 Werner 在评论中所说的内容:由于 Lua 代码在 TeX 发挥其魔力之前就已处理,因此key sentence当 TeX 遇到较长的代码时key sentence,它将是\capitalise{key sentence},因此它可以跨越多行,并且编译仍将正常进行。此外,仍然可以使用连字符包(polyglossia因为需要 LuaLaTeX)。此外,从我发布的第三个来源来看,Lua 代码可以激活和停用。我已更新代码以显示此效果并实现了激活宏。

以下是编译后的示例:

在此处输入图片描述

答案2

我发现了这一点: https://stackoverflow.com/questions/1812911/replace-strings-in-latex。我认为你最好使用其他工具(例如perlsed等),尽管LuaTeX似乎提供了一个解决方案:宏:替换所有出现的单词

答案3

虽然您可以编写代码来查找单词并对其进行格式化,但对于文本搜索工具来说,这可能是一项更简单的工作。我只需使用我最喜欢的编辑器(或命令行工具)来查找并替换“damage roll”,\mykeyword{damage roll}然后您可以重新定义\mykeyword以执行您想要的任何格式。

相关内容