Formatteer TeXForm op verschillende niveaus

In Mathematica kan Format worden gebruikt om de uitvoerformaten zoals TeXForm, OutputForm of TraditionalForm te wijzigen. Dit is een voorbeeld van hoe men de TeXForm van een functie T opnieuw kan definiëren.

In[1]:= Format[T[a_], TeXForm] := "\[Del]" a

Het resultaat is

In[2]:= TeXForm[T[x]]
Out[1]= x \nabla

Dit is wat ik verwachtte. Pas nu hetzelfde formaat toe op T [T [x]]

In[3]:= TeXForm[T[T[x]]]
Out[2]= \nabla  T(x)

De uitvoer die ik zou willen is echter

Out[2]= \nabla \nabla x

Waarom geeft Mathematica deze output niet? En wat kan ik veranderen om dit als uitvoer te krijgen? Ik probeerde meer informatie te vinden over formatteren in de Mathematica Help en over Stack Overflow, maar ik kon niet veel aanwijzingen vinden.

1

4 antwoord

Het zal werken als je niet beperkt tot TeXForm.

In[100] := Format[T[a_]] := \[Del] a

In[101] := TeXForm[T[T[x]]]
Out[101]//TexForm =
           \nabla \nabla x

Waarom zou u T gebruiken als u Del ?

In[7] := Del[a]
Out[7] = ∇a

In[8] := TeXForm[Del[Del[a]]]
Out[8]//TeXForm =
         \nabla \nabla a
4
toegevoegd
In de TeX-code wil ik een ander symbool gebruiken dan in de Mathematica-uitvoer.
toegevoegd de auteur sjdh, de bron

Misschien wilt u de opmaak handmatig doen.

myTeX = TeXForm[# /. T -> (Row[{"\[Del]", #}] &)]&;

T[T[a]] //myTeX
\n abla \n abla a
2
toegevoegd

De reden hiervoor is dat het patroon Format [arg, TeXForm] de indeling niet recursief distribueert over de argumenten. Dit is niet ongebruikelijk. Overwegen:

Clear[f];
f[T[a_]] := "\[Del]" a;

geeft f [T [T [a]]] = "\ [Del]" T [a] , maar

Clear[f];
f[T[a_]] := "\[Del]" f[a];

geeft f [T [T [a]]] = ("\ [Del]") ^ 2 f [a] , wat dichter bij wat je wilt.

Dus definieer

Format[T[a_], TeXForm] := f[T[a]]

met behulp van de tweede keuze van f [T [a _]] hierboven, en je zult een goede start hebben.

2
toegevoegd

Typ het volgende:

Needs["Notation`"]
ESCAPE notation ESCAPE

(of kies "Notation" uit het palet dat opent wanneer u het pakket laadt) In de eerste plaatshouder, invoegen

ESCAPE del ESCAPE a_

In de tweede plaatshouder, voer in

T[a_]

Voer de optie in vóór de afsluitende haak van de notatielijn

, WorkingForm -> TraditionalForm

Nu kunt u uw voorbeeld proberen:

T[T[a]]//TeXForm

en het zou je moeten geven wat je wilt, behalve met haakjes (wat raadzaam is om je gezond verstand in de meeste gevallen toch te behouden):

\nabla (\nabla a)

U kunt misschien verder gaan door de Help-documenten te bekijken onder "Notatie/zelfstudie/Opties en Software"

0
toegevoegd
Ik weet zeker dat de OP ESCAPE del ESCAPE in zijn notitieboekje gebruikte. Wanneer u het resultaat knipt en in StackOverflow plakt, krijgt u het formulier \ Del.
toegevoegd de auteur Codie CodeMonkey, de bron
??? Ik denk niet dat er een manier is om een ​​\ Del-formulier te krijgen ... Ik weet zeker dat je ESCAPE del ESCAPE hebt getypt en \ [Del] hebt gekregen, precies zoals ik het bedoeld had. Ik vermoed dat je je op een of andere manier zorgen maakt dat mijn tekst niet kan worden geknipt en geplakt. Sorry, maar ik wilde meer beschrijvend zijn ten behoeve van lezers die de snelkoppelingen misschien niet kenden.
toegevoegd de auteur Jens, de bron