在几个级别格式化TeXForm

时间:2011-12-06 17:48:10

标签: wolfram-mathematica design-patterns

在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中找到有关格式化的更多信息,但我找不到很多线索。

4 个答案:

答案 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”下的帮助文档进一步了解