我經常使用mathematica軟件並使用TeXForm命令在計算和我排版的latex文檔之間來回切換。然而,mathematica不允許我用下劃線定義變量,這在我的latex文檔中經常需要。有人知道如何在mathematica中用「更聰明」的名字創建變量嗎? 從更廣泛的意義上講,整合使用mathematica和latex的最佳方式是什麼? 謝謝。Mathematica和Latex
2
A
回答
1
首先,Mathematica允許您使用下劃線定義變量。
Subscript[x, 1] = 3
這個IST [CTR]快捷+ [_]
如果轉換與TeXForm標變量,你會得到:
x_1
我寧願不使用標準變量的下標表示法,因爲您無法輕易看到變量是否已在此記法中創建了一個值。所以,你可能只寫
x1
我們現在想這些類型的變量名稱的變換而TeXForm下標符號。 執行此操作的一種方法是使用StringPattern。
1.Transform你的表達在TeXForm一個字符串:
In[360]:= ToString[(-b+y1) ((b-y1)/(b-y2))^(-(w10/(x\[Gamma]1-\[Omega]2))), TeXForm]
Out[360]= (\text{y1}-b) \left(\frac{b-\text{y1}}{b-\text{y2}}\right)^{-\frac{\text{w10}}{\text{x$\gamma $1}-\text{$\omega $2}}}
2.Replace這一特定字符串模式,以乳膠標符號:
In[361]:= StringReplace[%, "\\text{"~~name_?LetterQ~~index_?DigitQ~~"}":> name<>"_"<>index]
Out[361]= (y_1-b) \left(\frac{b-y_1}{b-y_2}\right)^{-\frac{\text{w10}}{\text{x$\gamma $1}-\text{$\omega $2}}}
您可能已經注意到,這替換隻是在由一個字母和一個數字組成的變量名稱上工作。較長的變量名稱將被忽略。這是因爲StringPattern「_」僅代表ohne字符,對於一系列字符,請使用「__」,但我們必須確保符合最可能的順序。爲了趕上較長的變量名,我們應用另一個字符串替換:
In[362]:= StringReplace[%,
"\\text{"~~Shortest[name__]~~Shortest[index__?DigitQ]~~"}":> "\\text{"<>name<>"}_{"<>index<>"}"]
Out[362]= (y_1-b) \left(\frac{b-y_1}{b-y_2}\right)^{-\frac{\text{w}_{10}}{\text{x$\gamma $}_{1}-\text{$\omega $}_{2}}}
現在所有的變量似乎是正確的乳膠符號的下標變量。但是由於內部是單個字母或數字,因此一些「\ text {}」和「{}」現在都是obsolet。 爲了優化LaTeX的代碼,我們可以添加更多的repacements:
In[371]:= StringReplace[%, "{" ~~ i_?DigitQ ~~ "}" :> i];
StringReplace[%, "\\text{" ~~ name_?LetterQ ~~ "}" :> name]
Out[372]= (y_1-b) \left(\frac{b-y_1}{b-y_2}\right)^{-\frac{w_{10}}{\text{x$\gamma $}_1-\text{$\omega $}_2}}
現在我認爲你的TeX看起來不夠好,所以我們可以定義做了所有替代一步到位的函數:
In[506]:=
ClearAll[myTeXForm]
SetAttributes[myTeXForm, HoldFirst]
myTeXForm[expr_] := Fold[StringReplace, ToString[HoldPattern[expr], TeXForm],
{"\\text{HoldPattern}\\left[" ~~ str__ ~~ "\\right]" ~~ EndOfString :> str,
"\\text{" ~~ Shortest[str__] ~~ Shortest[i__?DigitQ] ~~ "}" :>
"\\text{" <> str <> "}_{" <> i <> "}",
{"{" ~~ i_?DigitQ ~~ "}" :> i, "\\text{" ~~ s_?LetterQ ~~ "}" :> s}}]
測試功能:
b=134;
myTeXForm[(-b+y1) ((b-y1)/(b-y2))^(-(w10/(x\[Gamma]13-\[Omega]2)))]
Out[510]= (y_1-b) \left(\frac{b-y_1}{b-y_2}\right)^{-\frac{w_{10}}{\text{x$\gamma $}_{13}-\text{$\omega $}_2}}
請注意,我用一個小技巧來保護函數agains其參數值。在這個例子中,變量b已經是134的值,但是在TeX Output中它仍然應該是「b」。爲此,我將Attribut HoldFirst添加到了我們的函數中,並在裏面使用了HoldPattern。也許可以做到這一點更容易,但它工作正常。
希望這可能會激勵你。 此致敬禮。
相關問題
- 1. 如何將Mathematica語法轉換爲latex?
- 2. LaTeX \ includegraphics和textline
- 3. Latex和NetBeans
- 4. Java和Mathematica交互
- 5. 在Mathematica中求和
- 6. latex latex beamer footnotemark color
- 7. Mathematica,結合ContourPlot3D和ListPointPlot3D
- 8. Mathematica,PDF曲線和陰影
- 9. Jinja2和LaTeX跳轉斜槓
- 10. Latex和fancyhdr的問題
- 11. Emacs預測模式和LaTeX
- 12. Mathematica DSolve
- 13. Mathematica中
- 14. Mathematica ListcontourPlot3D
- 15. LaTeX,fancyhdr
- 16. Rmarkdown LaTeX
- 17. 關於Mathematica中ListDensityPlot的ColorFunction和Blend
- 18. 在Mathematica中自動生成總和
- 19. Mathematica內部數字格式和精度
- 20. Mathematica和GAP:有沒有接口?
- 21. 總和正弦數據用Mathematica
- 22. Mathematica幫助While和模塊命令
- 23. Mathematica評估控制和表達式
- 24. 在LaTeX Beamer中增加LaTeX Beamer
- 25. Mathematica問題
- 26. 非維化Mathematica
- 27. Mathematica Map問題
- 28. Tricky RegionPlot question(Mathematica)
- 29. 網格在mathematica
- 30. Mathematica Downvalue Lhs
考慮使用某種形式的[CamelCase](http://en.wikipedia.org/wiki/CamelCase)... – Werner 2014-11-02 18:57:26
我總是通過編寫自己的函數來定製TeX輸出,該函數接受TeXForm的輸出並運行一些字符串替換規則。我不認爲這是值得去比這更聰明的 – Simon 2014-11-02 20:05:17
我怎麼寫這樣的功能?你能分享一個示例代碼嗎? – user191919 2014-11-02 20:06:38