有什么好的软件包可以排版量子电路吗?

有什么好的软件包可以排版量子电路吗?

我想排版看起来像

在此处输入图片描述

我已经知道

  • Q-circuit 具有很好的自定义宏,可用于此目的,但基于相对较慢且笨重的 XyPic
  • TikZ,我可以使用它来手动设置(这就是我热链接的图片的绘制方式)

还有其他我应该知道的替代方案吗?

答案1

显然 Nielsen 和 Chuang 使用qasm2circ产生数字量子计算与量子信息

答案2

您链接到的图像是我几年前在 TikZ 中制作的图表。这也不是一种特别有效的方法。这些天我使用 TikZ 矩阵环境来排版它。量子电路唯一真正的选择是 qasm2circ 和 q-circuit。但我不喜欢它们生成的输出,在我看来,TikZ 才是真正的出路。当然,它可能需要多敲几个键,但我认为努力是值得的。需要指出的一点是,TikZ 可能很慢,但如果您让它外部化 TikZ 图像,那么在\includegraphics每个图表进行一次缓慢的编译后,它就会变得和正常情况一样快。

您所链接的示例的修订版本可能更具启发性,如下所示:

\documentclass[10pt]{standalone}
\usepackage{tikz}

% TikZ libraries `calc` needed now to tweak bracket.
\usetikzlibrary{backgrounds,fit,decorations.pathreplacing,calc}
% Dirac Kets
\newcommand{\ket}[1]{\ensuremath{\left|#1\right\rangle}}

\begin{document}
    \begin{tikzpicture}[thick]
    % `operator' will only be used by Hadamard (H) gates here.
    % `phase' is used for controlled phase gates (dots).
    % `surround' is used for the background box.
    \tikzstyle{operator} = [draw,fill=white,minimum size=1.5em] 
    \tikzstyle{phase} = [draw,fill,shape=circle,minimum size=5pt,inner sep=0pt]
    \tikzstyle{surround} = [fill=blue!10,thick,draw=black,rounded corners=2mm]
    %
    \matrix[row sep=0.4cm, column sep=0.8cm] (circuit) {
    % First row.
    \node (q1) {\ket{0}}; &[-0.5cm] 
    \node[operator] (H11) {H}; &
    \node[phase] (P12) {}; &
    \node[phase] (P13) {}; &
    &[-0.3cm]
    \coordinate (end1); \\
    % Second row.
    \node (q2) {\ket{0}}; &
    \node[operator] (H21) {H}; &
    \node[phase] (P22) {}; &
    &
    \node[operator] (H24) {H}; &
    \coordinate (end2);\\
    % Third row.
    \node (q3) {\ket{0}}; &
    \node[operator] (H31) {H}; &
    &
    \node[phase] (P33) {}; &
    \node[operator] (H34) {H}; &
    \coordinate (end3); \\
    };
    % Draw bracket on right with resultant state.
    \draw[decorate,decoration={brace},thick]
        ($(circuit.north east)-(0cm,0.3cm)$)
        to node[midway,right] (bracket) {$\displaystyle\frac{\ket{000}+\ket{111}}{\sqrt{2}}$}
        ($(circuit.south east)+(0cm,0.3cm)$);
    \begin{pgfonlayer}{background}
        % Draw background box.
        \node[surround] (background) [fit = (q1) (H31) (bracket)] {};
        % Draw lines.
        \draw[thick] (q1) -- (end1)  (q2) -- (end2) (q3) -- (end3) (P12) -- (P22) (P13) -- (P33);
    \end{pgfonlayer}
    %
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

自 2018 年 9 月起quantikzTiKZ 库: https://ctan.org/pkg/quantikz

它故意采用与 qcircuit 非常相似的语法。对于您的电路:

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

\begin{document}

\begin{quantikz}
\gategroup[wires=3,steps=11,style={rounded corners,fill=blue!20}, background]{}
&\lstick{$|{0}\rangle$} & \gate{H}&\ctrl{1} & \ctrl{2} &\qw &\qw 
 \rstick[wires=3]{$\frac{|{000}\rangle + |{111}\rangle}{\sqrt{2}}$} 
\\
&\lstick{$|{0}\rangle$} & \gate{H}& \control{} & \qw& \gate{H} &\qw
\\
&\lstick{$|{0}\rangle$} & \gate{H}& \qw & \control{} & \gate{H} &\qw
&&&&
\end{quantikz}

\end{document}

2022 年 12 月 23 日更新:在 overleaf 中,选择 texlive 2022 发行版进行编译时会包含 quantikz,无需手动上传 tikzlibraryquantikz.code.tex 文件。

答案4

我在用着⟨q|图片⟩目前我的工作使用的是 TikZ。到目前为止,它对我来说已经足够灵活了,链接的 GitHub 页面上有很多示例,但我将在这里列出几个示例:

在此处输入图片描述 在此处输入图片描述

相关内容