如何在 Quantikz 中使用自己的风格?

如何在 Quantikz 中使用自己的风格?

我正在使用该quantikz软件包绘制量子电路,但无法将“自己的”门 (BS) 插入为量子门。噪声门是我想插入第二个门的一个工作示例。有人能帮助我吗?

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{quantikz}

\tikzset{pics/.cd, splitter/.style={code={\draw[ultra thick] (#1:{sqrt(1/2)}) --
(#1+180:{sqrt(1/2)});}},splitter/.default=45}

\tikzset{pics/.cd, BS/.style={code={
\draw[->](-1,0)--(1,0);
\draw[->](0,-1)--(0,1);
\path (0,0) pic{splitter};
}}}

\begin{tikzpicture}
    \draw (0,0) pic{BS};    
\end{tikzpicture}

\tikzset{
noisy/.style={starburst,fill=yellow,draw=red,line
width=2pt,inner xsep=-4pt,inner ysep=-5pt}
}

\begin{quantikz}
\lstick{$\ket{0}$}
&\gate[2]{D}
&\gate[1, style={noisy}]{L_{1,1}}\\         % noisy is working
\lstick{$\ket{0}$}
&
&\gate[1, style={BS}]{L_{1,2}}              % BS is not working
\end{quantikz}

\end{document}


答案1

您想知道为什么将样式添加noise\gate命令中有效,而自定义样式却BS无效。让我尝试对此做出解释,希望您能轻松理解。

Z 知道可用于设置节点样式的形状。默认形状是rectangle,例如,对于包含。另一个更复杂的形状是starburst用于设置右上节点的样式。因此,样式noise是一种改变形状使用命令添加到图表中的节点\gate

现在,还有pics,可以说是较大 Ti 的一小部分Z 图片。Apic可用于需要经常重用代码片段的情况。Apic可以包含节点和路径,但 apic本身不是节点,也不是形状。因此,如果您将样式定义BS为 a 的定义pic(您对 执行的操作pics/.cd, BS/.style),则此样式不会对节点执行任何有意义的操作。节点不知道如何处理 a pic,您将收到错误。

pic但实际上你可以做的是将(单独或与其他路径一起)放置path picture在节点上,这意味着你作为选项值给出的路径path picture将添加到相关节点的背景中。你只需要确保缩放path picture正确并位于正确的位置,并且节点足够大以显示整个图片:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{quantikz}

\tikzset{
    pics/.cd, 
    splitter/.style={
        code={
            \draw[ultra thick] (#1:{sqrt(1/2)}) -- (#1+180:{sqrt(1/2)});
        }
    },
    splitter/.default=45
}

\tikzset{BS/.style={
    draw=none,
    minimum width=1cm,
    minimum height=1cm,
    path picture={
        \begin{scope}[x=0.5cm, y=0.5cm]
        \draw[->] (path picture bounding box.center) +(-1,0) -- +(1,0);
        \draw[->] (path picture bounding box.center) +(0,-1) -- +(0,1);
        \path (path picture bounding box.center) pic {splitter};
        \end{scope}
    }
}}

\begin{document}

\tikzset{
    noisy/.style={
        starburst,
        fill=yellow,
        draw=red,
        line width=2pt,
        inner xsep=-4pt,
        inner ysep=-5pt}
}

\begin{quantikz}
\lstick{$\ket{0}$}
    & \gate[2]{D}
    & \gate[1, style={noisy}]{L_{1,1}} \\ 
\lstick{$\ket{0}$}
    &
    & \gate[1, style={BS}]{L_{1,2}}              
\end{quantikz}

\end{document}

在此处输入图片描述

相关内容