2013-08-01 4 views
2

Мне нужно удалить все \text generated by TeXForm Mathematica.Удалить текст создан TeXForm

Что я делаю сейчас это:

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

Но результат сохраняет фигурные скобки, например: для a=fx,

результат TeXForm[a] является \text{fx}

результат MyTeXForm[a] является {fx}

Но я бы хотел, чтобы это было просто fx

ответ

2

Вы должны иметь возможность использовать строковые рисунки. На основе http://reference.wolfram.com/mathematica/tutorial/StringPatterns.html, что-то вроде следующего должно работать:

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

Я не Mathematica под рукой прямо сейчас, но это должно быть написано «Совпадение„\ текст {“следуют ноль или более символов, которые хранятся в переменной s, за которой следует «}», а затем замените все это тем, что хранится в s. '

UPDATE:

Вышеуказанные работы в простейшем случае там быть один «\ текст {...}» элемент, но шаблон s___ жадный, поэтому на входе a+bb+xx+y, который TeXForm системы Mathematica делает, как "a + \ text {bb} + \ text {xx} + y", он соответствует всем, что находится между первым "\ text {" и last "}" --- so, "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 ($ \} $ B A, C $ \} $ d)", который был бы надлежащая обработка вывода TeXForm «f (\ text {a $ \} $ b}, \ text {c $ \} $ d})".

+0

Хорошо ... Я понял ... Но это не работает в том случае, когда у меня есть много '\ text {_}' в уравнении. Можете ли вы мне помочь? – Eleteroboltz

+0

Что происходит, когда вы запускаете его? Например, что такое вывод MyTeXForm, когда a = "x = 5 \\ text {m/s} +2 \\ text {m/s}"? Я исправлю, что вы хотите, чтобы выход был «x = 5m/s + 2m/s»? – Michael

+0

Я обновил свой ответ с помощью решения, которое, как мы надеемся, будет работать во многих случаях, но, не зная причины, по которым вы хотите это сделать, я не уверен, что смогу помочь намного дальше от головы ... Вероятно, регулярные выражения могут помочь с еще более полным решением, если ваш текст будет содержать символы «}». – Michael