Latex 数学与乳胶

Latex 数学与乳胶,latex,wolfram-mathematica,Latex,Wolfram Mathematica,我经常使用mathematica软件,并使用TeXForm命令在计算和我正在排版的latex文档之间来回移动。然而,mathematica不允许我用下划线定义变量,这是我在latex文档中经常需要的。有人知道如何在mathematica中创建具有“更智能”名称的变量吗? 从更广泛的意义上讲,整合mathematica和latex的最佳方式是什么? 谢谢。首先,Mathematica允许您使用下划线定义变量 Subscript[x, 1] = 3 此列表的快捷方式为[ctr]+[\uUx] 如果

我经常使用mathematica软件,并使用TeXForm命令在计算和我正在排版的latex文档之间来回移动。然而,mathematica不允许我用下划线定义变量,这是我在latex文档中经常需要的。有人知道如何在mathematica中创建具有“更智能”名称的变量吗? 从更广泛的意义上讲,整合mathematica和latex的最佳方式是什么?
谢谢。

首先,Mathematica允许您使用下划线定义变量

Subscript[x, 1] = 3
此列表的快捷方式为[ctr]+[\uUx]

如果使用TeXForm转换下标变量,将得到:

x_1
我不喜欢对普通变量使用下标表示法,因为在这种表示法中,您不容易看到变量是否有值。所以你可以直接写

x1
我们现在想把这些变量名转换成TeXForm中的下标符号。 一种方法是使用StringPattern

1.将表达式转换为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.将此特定字符串模式替换为LaTeX的下标符号:

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}}}
现在我认为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,但在TeX输出中,它仍应显示为“b”。为此,我在函数中添加了attributeholdfirst,并在函数中使用了HoldPattern。也许可以做得更简单,但效果很好

希望这能激励你。
致以最诚挚的问候。

考虑使用某种形式的…我总是通过编写自己的函数来定制TeX输出,该函数接受TeXForm的输出并运行一些字符串替换规则。我不认为有必要尝试比这更聪明我怎么能写这样一个函数呢?你能分享一个示例代码吗?
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}}
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}}