TikZ 是否可以模拟 PSTricks 的内联 \Rnodes 并分散在复杂方程中?

TikZ 是否可以模拟 PSTricks 的内联 \Rnodes 并分散在复杂方程中?

PSTricks\Rnode可以轻松地为由 (La)TeX 排版的复杂方程式添加注释:

PSTricks 内联 \Rnode

\Rnodes只需在方程式的现有元素周围添加,数学排版就会保留。如何在 TikZ 中以同样简单的方式实现这一点?

产生上述示例的 LaTeX 代码:

\documentclass[12pt]{standalone}
\usepackage{pst-node}

\begin{document}

\raisebox{0ex}[4ex][5ex]{ 
$\rule{0ex}{5ex}
R^{\alpha \beta} - 
{1 \over 2}R g^{\alpha \beta} + 
g^{\alpha \beta} \Lambda 
=
\frac{8 \pi G}{c^4 \mu_0} 
\left( 
  F^{\alpha}{}^{\Rnode{a}{\scriptstyle\psi}}   % <---- 1st \Rnode
  F_{\Rnode{b}{\scriptstyle\psi}}{}^{\beta} +  % <---- 2nd \Rnode
  {1 \over 4} g^{\alpha \beta} F_{\psi\tau} 
  F^{\psi\tau}\right)
\ncbar[linecolor=blue,angle=-90,nodesep=1pt,arm=2ex]{<->}{a}{b}$ }

\end{document}

答案1

实际上,使用 TikZ 来实现相对容易:

将节点放置在

\tikz[baseline, rememeber picture]
  \node[anchor=base, inner sep=+0pt, outer sep=+0pt] (<name>) {<text>};

baseline和的组合anchor=base放在<text>已经建立的基线和 上inner sep=+0pt,确保outer sep=+0pt节点(和图片)具有与实际包围 的框相同的大小<text>

然后你可以在 TikZ 路径中使用这些<name>s(应该是overlayed):

\tikz[remember picture, overlay]
  \draw (<name 1>) -- (<name 2>);

如果您经常简单地连接两个节点并且始终定义最后一个节点,那么您可以使用宏让您的生活更轻松\Tnode\TnodeC其中后者类似于第一个,但也会绘制一条到第一个定义的最后一个节点的路径。

如果您不想连接最后两个节点,您可以在边的可选参数后给出坐标/节点名称。

概述:

\Tnode[<optional node options>]{<node name>}{<node math>}

\TnodeC[<optional node options>]{<node name>}{<node math>}
                           [<optional edge options>]{<alternative target node for the edge>}

当然,您也可以使用to path={<anything>}内部<optional edge options>来覆盖任何内容(您不需要使用\tikztarget\tikzstart)。

对于不相关的边,您当然可以使用\path前面描述的分离边。

还有\TnodeC一个带星号的版本,其中考虑了路径的垂直尺寸。(在您的情况下,这会拉伸,这就是我结合\left( … \right)使用的原因,但您也可以只使用。)\vphantom\TnodeC*\bigl( … \bigr)


还可以实现将节点名称括在(and中的语法,)但这会使代码稍微大一些。


对于各种实现方法,\ncbar请参阅TikZ 是否有与 PSTricks \ncbar 命令等效的命令?。我已经使用了我的paths.ortho库及其du路径运算符/样式,但您可以随意用您想要的任何解决方案替换它。(udlr/distance是在节点的边界和路径的水平(中间)部分之间测量的。)

代码

\documentclass{article}
\usepackage{tikz} \usetikzlibrary{paths.ortho}
\makeatletter
\def\tnode@#1#2#3{%
  \node[inner sep=+0pt, outer sep=+0pt, anchor=base, name=#2, #1]{\m@th$#3$};}
\newcommand*{\Tnode}[3][]{%
  \tikz[baseline,remember picture]{\tnode@{#1}{#2}{#3}}\xdef\@tnodeclastnode{#2}}
\def\TnodeC{%
  \pgfutil@ifnextchar*%
    {\let\if@tnodec@overlay\iftrue\expandafter\TnodeC@\pgfutil@gobble}
    {\let\if@tnodec@overlay\iffalse\TnodeC@}}
\newcommand*{\TnodeC@}[3][]{%
  \pgfutil@ifnextchar[{\TnodeC@opt@{#1}{#2}{#3}}{\TnodeC@opt@{#1}{#2}{#3}[]}}
\def\TnodeC@opt@#1#2#3[#4]{%
  \pgfutil@ifnextchar\bgroup{\@@TnodeC{#1}{#2}{#3}{#4}}
                            {\@@TnodeC{#1}{#2}{#3}{#4}{\@tnodeclastnode}}}
\def\@@TnodeC#1#2#3#4#5{%
  \tikz[baseline, remember picture]{
    \tnode@{#1}{#2}{#3}%
    \path[overlay] (#2) edge[TnodeC edge/.try,#4] coordinate (@tnodec@aux) (#5);
    \if@tnodec@overlay
      \path (#2 |- @tnodec@aux) -- (#2);
    \fi}}
\makeatother
\tikzset{TnodeC edge/.style={
  du, udlr/distance=2ex, shorten >=+4\pgflinewidth, shorten <=+4\pgflinewidth}}
\begin{document}
Gummies cheesecake gingerbread. Jelly-o applicake cupcake. Marshmallow gingerbread jelly
 beans soufflé gingerbread. Sesame snaps apple pie chocolate bar chocolate gummies
 jujubes.
\[\textstyle
  R^{\alpha\beta} - \frac{1}{2} R g^{\alpha\beta} + g^{\alpha\beta} \Lambda =
  \frac{8 \pi G}{c^4 \mu_0} 
  \left( 
    F^{\alpha\Tnode {a}{\scriptstyle\psi}}
    F_{     \TnodeC {b}{\scriptstyle\psi}[blue,stealth-stealth]}
    {}^{\beta} + \frac{1}{4} g^{\alpha \beta} F_{\psi\tau} F^{\psi\tau}
  \right)
  \vphantom{
    F^{\Tnode  {@a}{\scriptstyle\psi}}
    F_{\TnodeC*{@b}{\scriptstyle\psi}}
  }
\]
Caramels halvah apple pie cookie pastry wafer lollipop croissant jujubes. Tart cupcake
 pastry. Gingerbread candy sesame snaps pastry oat cake jelly beans. Soufflé chocolate
 gummi bears.

\[
  \Tnode {aa}{\psi} \quad\TnodeC*{bb}{\pi} [out=30, in=150, looseness=10, <->]
\]
\end{document}

输出

在此处输入图片描述

相关内容