如何用“x_2”替换“x[2]”的每个全局实例

如何用“x_2”替换“x[2]”的每个全局实例

感谢 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

我确实不建议这样做,但是正如你问的那样......

在此处输入图片描述

\documentclass{article}

\begin{document}


\mathcode`\[="8000
\mathcode`\]="8000
{
\catcode`\[=\active \gdef[{_\bgroup}
\catcode`\]=\active \gdef]{\egroup}
}

hmmm
\[
a[1]+a[2]+b[c+d[3]] + x
\]

\end{document}

答案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}

相关内容