在Mathematica中,Format可用于改变输出格式,如TeXForm,OutputForm或TraditionalForm。 这是一个如何重新定义函数T的TeXForm的示例。
In[1]:= Format[T[a_], TeXForm] := "\[Del]" a
结果是
In[2]:= TeXForm[T[x]]
Out[1]= x \nabla
这就是我的预期。现在在T [T [x]]
上应用相同的格式In[3]:= TeXForm[T[T[x]]]
Out[2]= \nabla T(x)
但是,我想要的输出是
Out[2]= \nabla \nabla x
为什么Mathematica不提供此输出?我可以改变什么来将其作为输出? 我试图在Mathematica帮助和Stack Overflow中找到有关格式化的更多信息,但我找不到很多线索。
答案 0 :(得分:4)
如果您不限制TeXForm,它将起作用。
In[100] := Format[T[a_]] := \[Del] a
In[101] := TeXForm[T[T[x]]]
Out[101]//TexForm =
\nabla \nabla x
为什么在使用Del
时使用T
?
In[7] := Del[a]
Out[7] = ∇a
In[8] := TeXForm[Del[Del[a]]]
Out[8]//TeXForm =
\nabla \nabla a
答案 1 :(得分:2)
失败的原因是Format[arg, TeXForm]
模式不会在参数上递归分发Format
。这并不罕见。考虑:
Clear[f];
f[T[a_]] := "\[Del]" a;
产生f[T[T[a]]] = "\[Del]" T[a]
,但
Clear[f];
f[T[a_]] := "\[Del]" f[a];
产生f[T[T[a]]] = ("\[Del]")^2 f[a]
,这更接近你想要的。
所以定义
Format[T[a_], TeXForm] := f[T[a]]
使用上面f[T[a_]]
的第二个选项,您将有一个良好的开端。
答案 2 :(得分:2)
您可能需要手动进行格式化。
myTeX = TeXForm[# /. T -> (Row[{"\[Del]", #}] &)]&;
T[T[a]] //myTeX
\n abla \n abla a
答案 3 :(得分:0)
输入以下内容:
Needs["Notation`"]
ESCAPE notation ESCAPE
(或从加载包时打开的调色板中选择“表示法”) 在第一个占位符中,插入
ESCAPE del ESCAPE a_
在第二个占位符中,输入
T[a_]
在表示法行的结束括号之前,插入选项
, WorkingForm -> TraditionalForm
现在你可以试试你的例子:
T[T[a]]//TeXForm
它应该给你你想要的东西,除了括号(为了在大多数情况下保持你的理智,这是可取的):
\nabla (\nabla a)
您可以通过查看“Notation / tutorial / OptionsAndAuxiliaryFunctions”下的帮助文档进一步了解