我需要删除Mathematica 中\text
生成的所有内容。TeXForm
我现在正在做的是这样的:
MyTeXForm[a_]:=StringReplace[ToString[TeXForm[a]], "\\text" -> ""]
但结果保留了大括号,例如: for a=fx
,
结果TeXForm[a]
是\text{fx}
结果MyTeXForm[a]
是{fx}
但我想要的是它只是fx
我需要删除Mathematica 中\text
生成的所有内容。TeXForm
我现在正在做的是这样的:
MyTeXForm[a_]:=StringReplace[ToString[TeXForm[a]], "\\text" -> ""]
但结果保留了大括号,例如: for a=fx
,
结果TeXForm[a]
是\text{fx}
结果MyTeXForm[a]
是{fx}
但我想要的是它只是fx
您应该能够使用字符串模式。基于http://reference.wolfram.com/mathematica/tutorial/StringPatterns.html,类似以下的内容应该可以工作:
MyTeXForm[a_]:=StringReplace[ToString[TeXForm[a]], "\\text{"~~s___~~"}"->s]
我现在手边没有 Mathematica,但这应该说“匹配“\text{”,后跟存储在变量 s 中的零个或多个字符,然后是“}”,然后用存储的任何内容替换所有这些在 s.'
更新:
上述方法适用于存在单个 "\text{...}" 元素的最简单情况,但模式s___
是贪婪的,因此在 input 上a+bb+xx+y
,Mathematica 的 TeXForm 将其呈现为 "a+\text{bb}+\text{xx }+y",它匹配第一个 "\text{" 和最后一个 "}" 之间的所有内容 --- 所以,"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},\text{c$\ }$d})”。
这是一个非常晚的回复,但我刚刚遇到了同样的问题并发现了一个简单的解决方案。在要使用 TexForm 转换的 Mathematica 表达式中的变量之间放置一个空格。
对于原始海报的示例,以下代码效果很好:
a=f x
TeXForm[a]
输出如所愿:f x
由于 LaTeX 在数学模式下会忽略该空间,因此格式会正确。
(顺便说一句,我在下标中有两个并排变量的下标表达式遇到了同样的问题。在它们之间插入一个空格解决了这个问题。)
这就是我所做的(对我来说很好):
MyTeXForm[a_] := ToString[ToExpression[StringReplace[ToString[TeXForm[a]], "\\text" -> ""]][[1]]]