我想排版看起来像
我已经知道
- Q-circuit 具有很好的自定义宏,可用于此目的,但基于相对较慢且笨重的 XyPic
- TikZ,我可以使用它来手动设置(这就是我热链接的图片的绘制方式)
还有其他我应该知道的替代方案吗?
答案1
答案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 月起quantikz
TiKZ 库:
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 页面上有很多示例,但我将在这里列出几个示例: