删除TeXForm生成的\ text

时间:2013-08-01 21:23:32

标签: latex wolfram-mathematica mathematica-8

我需要删除Mathematica中\text生成的所有TeXForm

我现在正在做的是:

MyTeXForm[a_]:=StringReplace[ToString[TeXForm[a]], "\\text" -> ""]

但结果保留了括号,例如: 对于a=fx

TeXForm[a]的结果是\text{fx}

MyTeXForm[a]的结果是{fx}

但我想要的只是fx

2 个答案:

答案 0 :(得分:2)

您应该能够使用字符串模式。基于http://reference.wolfram.com/mathematica/tutorial/StringPatterns.html,以下内容应该有效:

MyTeXForm[a_]:=StringReplace[ToString[TeXForm[a]], "\\text{"~~s___~~"}"->s]

我现在没有Mathematica方便,但这应该说'匹配'\ text {“后跟零或多个字符存储在变量s中,后跟”}“,然后替换所有这些什么存储在s。'

更新:

上述工作最简单的情况是只有一个“\ text {...}”元素,但模式s___是贪婪的,所以输入a+bb+xx+y,Mathematica的TeXForm渲染作为“a + \ text {bb} + \ text {xx} + y”,它匹配第一个“\ text {”和last“}”之间的所有内容---所以,“bb} + \ text {xx” - - 导致输出

In[1]:= MyTeXForm[a+bb+xx+y]
Out[1]= a+bb}+\text{xx+y

对此的修复是用Shortest[]包装模式,导致第二个定义

In[2]:= MyTeXForm2[a_] := StringReplace[
          ToString[TeXForm[a]],
          Shortest["\\text{" ~~ s___ ~~ "}"] -> s
        ]

产生输出

In[3]:= MyTeXForm2[a+bb+xx+y]
Out[3]= a+bb+xx+y

根据需要。 不幸的是,当文本本身包含右括号时,这仍然不起作用。例如,输入f["a}b","c}d"](由于某种原因......)将给出

In[4]:= MyTeXForm2[f["a}b","c}d"]]
Out[4]= f(a$\$b},c$\$d})

而不是“f(a $ \} $ b,c $ \} $ d)”,这将是TeXForm输出的正确处理“f(\ text {a $ \} $ b },\ {文本C $ \} $ d})”。

答案 1 :(得分:0)

这就是我所做的(对我来说很好):

In your Google Cloud console select “IAM & admin”->”IAM”

You will see the “ADD” option. This will allow you to set permissions for your new 
Service Account. Click “ADD”​. 

You can then enter the service account and role ('Owner' if you are following the instructions in the tutorial).