在 tikz 中通过一个框画一条线

在 tikz 中通过一个框画一条线

我正在使用 Quantikz 绘制一个多量子位门(=标记框),而没有针对某些量子位(=水平线)。

我以前从未使用过 tikz,想知道是否有一种简单的方法来获得所需的输出。

这个想法是将特定量子比特之间的量子门表示出来,如图所示,其中 J13 不会影响量子比特 2(中间线)。我希望这条量子比特线位于 J13 框上方:like this

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{quantikz}
\begin{document}
\begin{tikzcd}
 & \gate[wires=2]{J_{12}} & \gate[wires=3]{J_{13}} & \qw                    & \qw \\
 &                        &  \gateinput{------}\gateoutput{------}  & \gate[wires=2]{J_{23}} & \qw \\
 & \qw                    &                        &                        & \qw
\end{tikzcd}
\end{document}

在我失败的尝试中(上图),我在门上添加了虚线,但它们的厚度不对,每次我扩大盒子的尺寸时都需要重新调整。使用 xshift 和 yshift 的解决方案也会受到后者问题的影响。

我认为最简单的解决方案是让量子线命令“\qw”默认绘制在框上方,而不是使用“\gateinput{------}\gateoutput{------}”。

更复杂的解决方案可能是为这种盒式门编写针对特定量子位的命令。

有什么建议或解决方案吗?

答案1

前提:我不是物理学家,我不知道你在说什么。

您可以使用该选项execute at end picture={...}来添加一些在您的之后要执行的代码tikzcd

\tikzcdmatrixnametikzcd是翻译成的TikZ 矩阵的名称。

\tikzcdmatrixname-r-c是 TikZ 矩阵第r行和第 c的单元格名称。

也许有更好的方法(无需手动调整xshiftyshift),但我不知道。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{quantikz}
\begin{document}
    \begin{tikzcd}[execute at
        end picture={
            \draw[thick] ([yshift=-23.8pt, 
            xshift=39pt]\tikzcdmatrixname-1-1.north 
            west) -- 
            ([yshift=-23.8pt, xshift=-39pt]\tikzcdmatrixname-1-5.north west);
        }]
        & \gate[wires=2]{J_{12}} & \gate[wires=3]{\raisebox{4pt}{$J_{13}$}} & 
        \qw                    & \qw \\
        &                        &  & 
        \gate[wires=2]{J_{23}} & \qw \\
        & \qw                    &                        
        &                        & \qw
    \end{tikzcd}
\end{document}

enter image description here

这是一个纯 TikZ 替代方案,无需进行微调matrix

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix, fit}
\tikzset{gate/.style={rectangle, thick, fill=white,align=center, draw, text width=1.5em}}
\begin{document}
    \begin{tikzpicture}
    \matrix[matrix of nodes,
        nodes in empty cells,
        column sep=2.5em,
        row sep=4ex] (mymatr) {
        &[-1em]&&&[-1em]\\
        &&&&\\
        &&&&\\};
    \draw[thick] (mymatr-1-1) -- (mymatr-1-5);
    \draw[thick] (mymatr-3-1) -- (mymatr-3-5);
    \node[fit=(mymatr-1-3)(mymatr-3-3), gate, text height=5ex] {$J_{13}$};
    \draw[thick] (mymatr-2-1) -- (mymatr-2-5);
    \node[fit=(mymatr-1-2)(mymatr-2-2), gate] {$J_{12}$};
    \node[fit=(mymatr-2-4)(mymatr-3-4), gate] {$J_{23}$};
    \end{tikzpicture}
\end{document}

enter image description here

这是一个纯粹的 TikZ 替代方案,无需微调,也无需任何matrix

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{gate/.style={rectangle, thick, align=center, draw, text width=1.5em}}
\begin{document}
    \begin{tikzpicture}[node distance=1.5em]
    \node[gate, minimum height=18ex, text height=0ex] (j13) {$J_{13}$};
   \node[left =of j13.north west, anchor=north east, minimum height=12ex, gate] (j12) {$J_{12}$};
    \node[right =of j13.south east, anchor=south west, minimum height=12ex, gate] (j23) {$J_{23}$};
    \coordinate (start1) at ([yshift=-2ex]j12.north west);
    \coordinate (end1) at ([xshift=1em]j23.east |- start1);
    \draw[thick] (start1) -- +(-1em, 0);
    \draw[thick] (start1 -| j12.east) -- (start1 -| j13.west);
    \draw[thick] (start1 -| j13.east) -- (end1);
    \coordinate (start2) at ([yshift=2ex]j12.south west);
    \draw[thick] (start2) -- +(-1em, 0);
    \draw[thick] (start2 -| j12.east) --
    (start2 -| j23.west);
    \draw[thick] (start2 -| j23.east) --
     +(1em, 0);
     \coordinate (start3) at ([yshift=2ex]j23.south west -| start1);
    \draw[thick] (start3) +(-1em, 0) -- (start3 -| j13.west) ;
    \draw[thick] (start3 -| j13.east) --
     (start3 -| j23.west);
     \draw[thick] (start3 -| j13.east) --
     (start3 -| j23.west);
    \draw[thick] (start3 -| j23.east) --
     +(1em, 0);
    \end{tikzpicture}
\end{document}

enter image description here

答案2

为了将来查看此问题的人士的使用,可以直接在 quantikz 中实现此功能:

\begin{quantikz}[transparent]
& \gate[2]{J_{12}} & \gate[3,label style={yshift=0.2cm}]{
J_{13}} & \qw & \qw \\
& & \linethrough &\gate[2]{J_{23}} & \qw \\
& \qw &&& \qw
\end{quantikz}

唯一需要忍受的是大门是透明的,而不是白色。背景通常是白色的,所以变化不大。

相关内容