排版内联彭罗斯/Cvitanovic 张量图(鸟迹)

排版内联彭罗斯/Cvitanovic 张量图(鸟迹)

20 世纪 50 年代,罗杰·彭罗斯 (Roger Penrose) 发明了一种张量的私人图形符号,后来他将其发表出来。维基百科上有简短的介绍。它基本上是一个有向图,上面有一些标签和一些外部边。Predrag Cvitanovic 有一个修改版本这更适合排版,因为他使用箭头而不是依靠“重力”来给出边缘的方向,因此更容易以内联或显示方程的形式布局。彭罗斯在他的图表中使用几何形状作为节点,但我也很乐意使用字母。使用 Cvitanovic 的约定,我可以做简单的示例作为内联 tex 数学,例如,\rightarrow\bigoplus\rightarrow\bigodot\leftarrow\rightarrow u\rightarrow v\leftarrow。(对于几何版本,最好有大正方形、圆形和三角形,大小为\bigoplus--- 有什么方法可以制作这些吗?像 这样的\nabla似乎太小了。)

真正好的办法是将稍微复杂一些的示例排版为乳胶数学。以下是两个在节点中使用字母的示例:

鸟迹样本

像上面的例子显然可以用像这样的符号来实现\rightleftarrow。我想知道是否有可能获得一些更奇特的功能,例如第二张图中的圆圈和环路,或者 WP 文章中显示的各种横杆和波浪形横杆。这些图与费曼图有些相似,所以似乎可以使用用于绘制这些图的包之一来完成,但这些包似乎更倾向于绘制更大、更不可避免的二维图,而且我也不清楚哪个包是最好的和最现代的。

[编辑] 另请参阅:https://mathoverflow.net/questions/25187/resources-for-graphical-languages-penrose-notation-feynman-diagrams-birdtra

答案1

我对 tikz 有了足够的了解,可以得出以下内容:

使用 tikz 以 birdtracks 符号编写的张量

我的代码如下。如果大家能提供意见,我会非常感激,因为我真的不知道用 tikz 做什么。有没有好的方法可以避免硬编码节点之间的距离和圆的大小?

\documentclass{article}
\RequirePackage{tikz}
\begin{document}

\pgfdeclarelayer{nodelayer}
\pgfdeclarelayer{edgelayer}
\pgfsetlayers{edgelayer,nodelayer,main}
\tikzstyle{plain}=[rectangle,fill=none,draw=black,scale=1.0,inner sep=1.8pt] % circle also works
\tikzstyle{arrow}=[draw=black,arrows=-latex]

The notation
\begin{tikzpicture}[baseline=(n0.base),thick]
        \begin{pgfonlayer}{nodelayer}
                \node [style=plain] (n0) at (0, 0) {$u$};
                \node [style=plain] (n1) at +(2.3em, 0) {$v$};
        \end{pgfonlayer}
        \begin{pgfonlayer}{edgelayer}
                \draw [style=arrow] (n0) to (n1);
        \end{pgfonlayer}
\end{tikzpicture}
means the inner product $u_a v^a$.

The following displayed picture represents the tensor expression $u^a_{abc}\nabla_d v^{bc}$:

\begin{tikzpicture}[thick]
        \begin{pgfonlayer}{nodelayer}
                \node [style=plain] (n0) at (0, 0) {$u$};
                \node [style=plain] (n1) at (3.1em, 0) {$v$};
                \node [style=circle,draw=black,minimum size=2.1\baselineskip] (c1) at (n1) {};
        \end{pgfonlayer}
        \begin{pgfonlayer}{edgelayer}
                \draw [style=arrow,out=10,in=170] (n0) to (n1);
                \draw [style=arrow,out=-10,in=190] (n0) to (n1);
                \draw [style=arrow,out=30,in=150, distance=1.8\baselineskip, loop] (n0) to ();
                \draw [style=arrow] (c1.east) to +(1.4em,0);
        \end{pgfonlayer}
\end{tikzpicture}

\end{document}

相关内容