我正在使用 Quantikz 绘制一个多量子位门(=标记框),而没有针对某些量子位(=水平线)。
我以前从未使用过 tikz,想知道是否有一种简单的方法来获得所需的输出。
这个想法是将特定量子比特之间的量子门表示出来,如图所示,其中 J13 不会影响量子比特 2(中间线)。我希望这条量子比特线位于 J13 框上方:
\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
。
\tikzcdmatrixname
tikzcd
是翻译成的TikZ 矩阵的名称。
\tikzcdmatrixname-r-c
是 TikZ 矩阵第r行和第 c列的单元格名称。
也许有更好的方法(无需手动调整xshift
和yshift
),但我不知道。
\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}
这是一个纯 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}
这是一个纯粹的 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}
答案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}
唯一需要忍受的是大门是透明的,而不是白色。背景通常是白色的,所以变化不大。