配方奶粉的双头箭

配方奶粉的双头箭

我有一个量化公式。我想展示当量词顺序颠倒时会发生什么。为此,我喜欢在公式上使用双向箭头,如下所示:

可能吗?我不介意您是否使用图形包(例如 TikZ),只要我可以将箭头放在正确的位置即可。

答案1

使用 TikZ 执行此操作的方法如下:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
a
% `inner sep=0` removes unwanted padding in the nodes;
% `baseline, anchor=base` alignes the baseline of the text in the nodes 
%      with the baseline of the sourrounding text;
% `>=latex` selects the arrow style (see the TikZ manual for which
%      arrows are available.
\begin{tikzpicture}[inner sep=0cm,baseline,anchor=base,>=latex]
    % the first node, named 'left-node'
    \node (left-node) {$(\forall x \in X)$};

    % add a second node to the right of left-node
    \node [right=0cm of left-node] (right-node) {$(\forall y \in Y)$};

    % draw the connecting line between the north sides of the two nodes,
    % 1.5ex above the nodes.
    \draw[<->,red] (left-node.north) |- +(0,1.5ex) -| (right-node.north);

    % alternatively, draw a line between the north sides of the two nodes, with
    % starting angle 30° and ending at 150°.
    %\draw[<->,red] (left-node.north) to[out=30,in=150] (right-node.north);
\end{tikzpicture}
b
\end{document}

这将给出示例 1示例 2,具体取决于您取消注释了以 开头的哪一行\draw。根据您想要在哪里使用它,您可能需要\displaystyle在两个节点中添加数学运算。


似乎有人对pst-node在 TikZ 中做类似的事情感兴趣。第一个近似值是(以下示例需要编译两次)

\newcommand\tikzmark[1]{\tikz[remember picture,overlay,baseline=-1ex] \node (#1) {};}

\[(\forall x\tikzmark{a}\in X)(\forall y\tikzmark{b}\in Y)\]
\tikz[remember picture,overlay] \draw[<->,red] (a.north) |- +(0,1.5ex) -| (b.north);

然而,在这种情况下,这并不是我们想要的,因为标记不在中间:例子

添加第二个参数并不是\tikzmark一件简单的事情,因为仅仅将内容放入节点会破坏所有上下文(数学模式、间距等)。我不太明白pst-nodein 的作用\rnode(但从结果来看,有些空间会丢失)。如果使用仅限于简单情况,以下方法应该可以很好地工作(如有必要,请添加\displaystyle):

\newcommand\tikzmark[2]{\tikz[remember picture,baseline,anchor=base] \node (#1) {$#2$};}

\[(\forall x\tikzmark{a}{\in} X)(\forall y\tikzmark{b}{\in} Y)\]
\tikz[remember picture,overlay] \draw[<->,red] (a.north) |- +(0,1.5ex) -| (b.north);

例子

还有一个问题:叠加的图片不占用任何空间,因此线条和箭头可能会与前一行的文本发生冲突。如果不手动添加一些空间,我不知道如何解决这个问题。


通过我的第一个例子,你还可以做更多有趣的事情,比如

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{positioning,decorations.pathreplacing,calc}
\begin{document}
\[
\begin{tikzpicture}[inner sep=0cm,baseline,anchor=base,>=latex,decoration=brace]
    \node (left-node) {$(\forall x \in X)$};
    \node [right=0cm of left-node] (right-node) {$(\forall y \in Y)$};

    \draw[decorate,red] ($(left-node.north west)+(0.3ex,0.2ex)$) -- ($(left-node.north east)+(-0.3ex,0.2ex)$);
    \draw[decorate,red] ($(right-node.north west)+(0.3ex,0.2ex)$) -- ($(right-node.north east)+(-0.3ex,0.2ex)$);
    \draw[<->,red,transform canvas={yshift=1.2ex}] (left-node.north) to[out=30,in=150] (right-node.north);
\end{tikzpicture}
\]
\end{document}

例子

答案2

通常我也更喜欢pgf/tikZ。不过这里有一个快速的解决方案pst 节点

\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{pst-node}

\begin{document}
  \[
    (\forall x\rnode{a}{\in} X)(\forall y\rnode{b}{\in} Y)
  \]
  \ncbar[angle=90,arrows=<->,nodesep=2pt]{a}{b}
\end{document}

结果

相关内容