如何处理公式中的大量括号?

如何处理公式中的大量括号?

假设我有一个这样的公式(在 LaTeX 或 Maple 或其他文本系统中):

Result: ((6*(k2+k3))*A123*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*(exp(-k3*(k3^2*t-x)))^2+6*A12*(-k3+k2)*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*exp(-k3*(k3^2*t-x)))*(exp(-k2*(k2^2*t-x)))^2+(-(6*(-k3+k2))*A13*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*(exp(-k3*(k3^2*t-x)))^2-(6*(k2+k3))*k2*k3*(A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2-2*A123*k2*k3-A123*k3^2)*exp(-k3*(k3^2*t-x)))*exp(-k2*(k2^2*t-x))

注意:上述公式只是枫叶计算结果的一部分,由于项太多,我无法将它们分解。

显然,它很难读。我想要做的是将匹配的括号逐级折叠。如果把所有括号都折叠起来,我就能清楚地找出有多少项。然后我就可以从顶层分析到每个项的细节。但我只是不知道如何实现这一点。也许有一些现有的软件可以将这种复杂的公式可视化。有什么想法吗?

PS 我使用 Linux 系统。开源替代方案更好。

答案1

有一个名为 vim 脚本foldcol.vim但我不能再多说了。

我个人会这样做:

"put every calculs on one line
:%s/(/\r(\r/g
:%s/)/\r)\r/g

"delete all empty lines
:g/^$/d
"set fold as () to collapse them with "za"
:set foldmethod=marker foldmarker=(,)

"indent all text:
gg=G

它看起来应该是这样的:

结果: (
          6*(
            键数
         *A123*k2*k3*(
           A12*A13*k2^2-2*A12*A13*k2*k3+A12*A13*k3^2-A123*k2^2
         *(

处理完毕后,删除缩进:转到第一行,然后按:

 gg<G............ "need to press dot to repeat
 500gJ "to put all on one line

答案2

折叠仅适用于多行。对于单行,您最好使用最近的隐藏功能;不幸的是,它需要更多的脚本来设置,可能会干扰现有的语法突出显示,并且您没有方便的“显示(更多/更少)折叠”映射。

你可能已经意识到匹配项Vim 附带的插件。还有类似这样的插件彩虹括号.vim从而改善这一点。

相关内容