我反复使用某些关键字,例如var
在我的文档中,我使用 突出显示\src{var}
。输入起来很麻烦,过一段时间就会变得很烦人。反复搜索和替换 到var
然后\src{var}
到\src{\src{var}}
也\src{var}
似乎不必要地复杂。我想告诉 LaTeX 用 替换所有出现的var
。\src{var}
我发现\def
可以将输入减少到\var{}
,但这并没有好多少。可能类似于 C 预处理器的东西:#define var \src{var}
。我发现“替换所有点“-example 但无法将其修改为“替换所有变量”。谢谢您的帮助。
答案1
这是一个基于 LuaTeX 的解决方案。它 (i) 定义一个 Lua 函数,该函数会更改所有“ var
”的实例(请注意前面的空格和(在“var”之后)添加到“ \src{var}
”并(ii)将此函数注册到process_input_buffer
回调中。此回调对整个输入流进行操作前TeX 会处理它。另外,我定义了一个名为的 TeX 宏\src
,以便 TeX 在遇到指令时知道该做什么\src{var}
。
在这种设置下,“aardvark”、“bivariate”和“covariance”等单词保持不变。在下面的第二行输入中,“var”的第一个和最后一个实例也保持不变,因为它们前面没有和后面跟着一个空格。最后,如果输入文件中已经有了的实例\src{var}
,Lua 函数也不会对它们进行操作——正如人们所期望的那样,它们只会被 TeX 执行。
注意,没有任何内容被写回到.tex
输入文件,即,您的输入文件不会充斥着大量的\src
语句。
顺便说一句,我假设文件中应该操作的真实字符串\src
比 更独特一些var
。如果是这样,您可能可以省去字符串前面和后面都必须有空格的要求。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec,xcolor}
\usepackage{luacode,luatexbase}
\begin{luacode}
local function vartosrcvar ( line )
return string.gsub(line, " var " , " \\src{var} ")
end
luatexbase.add_to_callback( "process_input_buffer", vartosrcvar, "var_to_srcvar")
\end{luacode}
\newcommand\src[1]{\textcolor{red}{#1}} % define "\src" to suit your needs
\begin{document}
aardvark bivariate covariance varnish
var uno var due var tre var
\end{document}
答案2
TeX 是一个宏扩展系统(类似,但比 C 的预处理器更强大),但宏是通过\
以下方式引入的:
\newcommand\var{\src{var}}
然后 zz zzz \var\ zzzz
或者你可以定义(比如说)|
成为一个活跃角色
\catcode`\|\active
\def|#1|{\src{#1}}
然后 zz zzz |var| zzzz
理论上,在非常有限的情况下,可以让 TeX 提前读取、查找var
和使用语法zz zzz var zzzz
,但我不会认真考虑这一点,使其工作所必需的扭曲将使你的文档非常脆弱并且与或多或少任何包不兼容。
就我个人而言,我会将\src{var}
编辑器与自动完成功能结合使用,这样您就不必每次都输入所有内容。