LaTeX 中的常规文本/字符串操作

LaTeX 中的常规文本/字符串操作

有没有办法轻松编码来自 (La)TeX 内部一些文本操作的东西,比如“查找”和“替换”,以便我可以自动化繁琐的体力劳动?

编辑Christian Hupfer 在评论中提到这l3regex可能是一个解决方案,涵盖了下面提到的限制 - 尽管 David Carlisle 说“不”。它是哪一个?)

但也存在一些重要的限制:

  • 该方法必须是通用的,即仅使用宏是行不通的,因为我可能想要执行诸如将所有出现的“=”替换为“>”之类的操作。

  • 我不想使用 LuaTeX(我听说这很容易做到)

  • 编码最好在序言中完成。如下所示这里这可以通过包轻松完成xstring,但这样做的缺点是,如果我想搜索整个文本(可能非常大),我必须将所有内容括在里面,\StrSubstitute[0]这似乎是一种丑陋的方法,并且需要我弄乱我宁愿保持不变的文档内容。

  • 至少我应该能够进行文本替换,但我希望有一些更高级的功能,这意味着至少可以使用 sed 等 Linux 脚本语言的部分文本操作功能

答案1

您已声明您“可能想要执行诸如用 替换所有出现的 ”之类的操作=>并且“[c]oding 最好应该在序言中完成”。

我会祈祷你会重新考虑不使用 LuaLaTeX 的决定。Lua(编程语言)具有非常灵活和强大的字符串库,LuaTeX 提供了多种方式将 Lua 编码函数分配给各种“回调”——满足了您在前言中完成所有编码的要求。在下面的例子中,函数eq2gt(顾名思义,用 替换所有 的实例=>被分配给process_input_buffer回调,该回调在处理的早期阶段运行,即,TeX 的“眼睛”开始处理。这样,该eq2gt函数就可以充当预处理器,在排版工作本身开始之前“动态”修改输入文件的部分内容。

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

%% Lua-side code
\usepackage{luacode}
\begin{luacode}
function eq2gt ( buff )
   return ( string.gsub ( buff , "=" , ">" ) )
end
\end{luacode}

%% TeX-side code
\AtBeginDocument{\luadirect{luatexbase.add_to_callback(
   "process_input_buffer" , eq2gt , "eq2gt" )}}

\begin{document} 
\[
1+1+1=2    % not correct...
\]

$1-1-1=-2$ % not correct either...
\end{document}

相关内容