Формат TeXForm на нескольких уровнях - PullRequest
1 голос
/ 06 декабря 2011

В Mathematica Format можно использовать для изменения форматов вывода, таких как TeXForm, OutputForm или TraditionalForm.Это пример того, как можно переопределить TeXForm функции T.

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 и в Переполнении стека, но не смог найти много подсказок.

Ответы [ 4 ]

4 голосов
/ 06 декабря 2011

Это будет работать, если вы не ограничиваетесь TeXForm.

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

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

Зачем использовать T, когда вы можете использовать Del?

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

In[8] := TeXForm[Del[Del[a]]]
Out[8]//TeXForm =
         \nabla \nabla a
2 голосов
/ 07 декабря 2011

Возможно, вы захотите выполнить форматирование вручную.

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

T[T[a]] //myTeX
\n abla \n abla a
2 голосов
/ 06 декабря 2011

Причина этого сбоя заключается в том, что шаблон 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_]] выше, и вы хорошо стартуете.

0 голосов
/ 07 декабря 2011

Введите следующее:

Needs["Notation`"]
ESCAPE notation ESCAPE

(или выберите «Обозначения» в палитре, которая открывается при загрузке пакета). В качестве первого заполнителя введите

ESCAPE del ESCAPE a_

.второй заполнитель, введите

T[a_]

Перед закрывающей скобкой строки нотации введите опцию

, WorkingForm -> TraditionalForm

Теперь вы можете попробовать свой пример:

T[T[a]]//TeXForm

и он должен давать вам то, что вы хотите, за исключением скобок (что, в любом случае, целесообразно для поддержания вашего здравомыслия в любом случае):

\nabla (\nabla a)

Вы можете пойти дальше, посмотрев на справку.документы в разделе «Обозначения / учебное пособие / Опции и вспомогательные функции»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...