感谢 Bruno 的建议,对于我的具体情况,我的结果来自 Mathematica,使用简单的替换规则更改其中的输出要容易得多。然而,这本身就是一个一般性问题。
这个问题与我以前见过的问题略有不同,我可以使用类似的东西\newcommand{\ga}{\gamma}
来创建快捷方式\
。
我有一系列很长的方程式,其中包含类似x[2]
或 的内容a[3]
。我希望能够始终用其他内容替换它们的任何实例,例如使用命令接收字符串并将其替换为类似于以下内容的内容
\newcommand{x[2]}{x_2}
和
\newcommand{a[2]}{\beta}
理想情况下,这会考虑到里面的数字,但我可以轻松地针对出现的所有实例执行此操作。任何指导都很好(我的文档类是报告)
答案1
一组可扩展的替换:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\trans}{m}
{
\tl_set:Nn \l__brad_trans_tl { #1 }
\regex_replace_all:nnN { \[(.*?)\] } { \c{sb}\cB\{\1\cE\} } \l__brad_trans_tl
\regex_replace_all:nnN { a } { \c{alpha} } \l__brad_trans_tl
% other replacements
% ...
% deliver the new token list
\l__brad_trans_tl
}
\ExplSyntaxOff
\begin{document}
$\trans{x[1]+x[2]^2+a+a[3]}$
\end{document}
答案2
虽然我喜欢在 TeX 中做一些疯狂的事情,但还是在 Mathematica 中进行替换吧!这将为你省去很多麻烦。例如,
expr = (a[1] + a[2])/Sqrt[a[3]]
expr /. {a[1] -> \[Alpha], a[2] -> \[Beta], a[3] -> \[Gamma]} // TeXForm
无需\frac{\alpha +\beta }{\sqrt{\gamma }}
调整输出。
答案3
答案4
为了多样化,这里提供了一个基于 LuaLaTeX 的解决方案。它设置了一个名为的 Lua 函数trans
,该函数在 Lua 的多功能字符串处理例程的帮助下完成大部分工作。LaTeX 宏\trans
是一个调用 Lua 函数的包装器。
\documentclass{article}
\usepackage{luacode} % for "luacode" environment and "\luastringN" macro
\begin{luacode}
function makesubscr ( s )
s = s:gsub ( "(%b[])", function(x)
return ( "_{" .. string.sub ( x , 2 , -2 ) .. "}" )
end )
if s:find ( "%b[]" ) then
s = makesubscr ( s )
end
return s
end
function trans ( s )
s = makesubscr ( s )
s = s:gsub ( "a" , "\\alpha" )
s = s:gsub ( "b" , "\\beta" )
tex.sprint ( s )
end
\end{luacode}
%% TeX-side code
\newcommand\trans[1]{\directlua{trans(\luastringN{#1})}}
\begin{document}
$\trans{x[1]+x[2]^2+a+a[3]}$
$\trans{a[1]+a[2]+b[c+d[3]]+x}$
\end{document}