我有一组非常大的文档,其中有些关键字的拼写并不总是正确的。是否可以告诉 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。我认为你最好使用其他工具(例如perl
,sed
等),尽管LuaTeX似乎提供了一个解决方案:宏:替换所有出现的单词。
答案3
虽然您可以编写代码来查找单词并对其进行格式化,但对于文本搜索工具来说,这可能是一项更简单的工作。我只需使用我最喜欢的编辑器(或命令行工具)来查找并替换“damage roll”,\mykeyword{damage roll}
然后您可以重新定义\mykeyword
以执行您想要的任何格式。