我經常使用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和NetBeans
- 3. git precommit和LaTeX
- 4. MathJax和LaTeX \ definecolor
- 5. LaTeX \ includegraphics和textline
- 6. CMake和Latex
- 7. 在Mathematica中求和
- 8. Java和Mathematica交互
- 9. &符號,XSLT和LaTeX
- 10. LaTeX參考和Makefile
- 11. emacs中tex-mode和latex-mode和LaTeX-mode有什麼區別
- 12. latex latex beamer footnotemark color
- 13. Mathematica,PDF曲線和陰影
- 14. Mathematica,結合ContourPlot3D和ListPointPlot3D
- 15. Latex和fancyhdr的問題
- 16. Emacs預測模式和LaTeX
- 17. R Markdown Kniter和LateX問題
- 18. Jinja2和LaTeX跳轉斜槓
- 19. 使用Mathematica和StackOverflow API觀察新的Mathematica問題
- 20. Mathematica中的表和求和函數
- 21. Mathematica中
- 22. Mathematica ColorFunctionScaling
- 23. Mathematica ListcontourPlot3D
- 24. Mathematica replaceall
- 25. Mathematica NDSolve
- 26. Mathematica中
- 27. Mathematica中
- 28. Mathematica DSolve
- 29. LaTeX,fancyhdr
- 30. Rmarkdown LaTeX
考慮使用某種形式的[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