Edited at

LaTeXで量子回路を描く

More than 1 year has passed since last update.

最近は量子コンピュータという言葉を聞く機会が増え、量子回路を描く必要が増している…はずです。

そのため本記事では業界標準1であるLaTeXのqcircuitパッケージを利用した量子回路の描き方について解説します。


TL;DR

LaTeXのqcircuitパッケージを利用すると次のようなカッコイイ量子回路が描けます。

qcircuitによる量子回路例


前提

私の環境はWindows 10 + TeX Live 2018です。

最近のTeXディストリビューションが導入されており、適切にPDFが生成できるなら問題ないと思います。

ただしqcircuit及び依存するxy-picとif­pdfパッケージがなければ導入して下さい。


実際に量子回路を描く

例として上に掲載した量子回路のLaTeXファイルを見てみましょう。


sample.tex

\documentclass[12pt,border={25pt 5pt 5pt 5pt}]{standalone}

\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[cmex10]{amsmath}

\usepackage{qcircuit}
\usepackage{braket}

\begin{document}

\Qcircuit @C=1em @R=.7em {
\lstick{\ket{0}} & \gate{H} & \ctrl{1} & \qw & \qw & \meter \\
\lstick{\ket{0}} & \qw & \targ & \ctrl{1} & \qw & \meter \\
\lstick{\ket{0}} & \qw & \gate{H} & \control \qw & \gate{H} & \meter
}

\end{document}


このようなファイルを用意しpdflatex sample.tex等としてコンパイルするとPDFのカッコイイ量子回路が得られます2

なお本記事では得られたPDFをImageMagickでPNGに変換したものを掲載しています。

上記LaTeXソースには様々なパッケージやコマンドが含まれていますが、カッコイイ量子回路を作製するために必要な知識は次の2点です。


  • standaloneクラスとborderオプション

  • Qcircuitコマンド

とりあえず後者の明らかに量子回路に関係するコマンドから解説していきましょう。


Qcircuit

qcircuitでは方眼紙のように要素を行と列で区切って量子回路を表現します。

解りやすくするために区切り線とコマンドを記載した量子回路図を用意しました。

量子回路とコマンド

先程のQcircuitコマンドと比較すれば一目瞭然ですね。

LaTeXにおけるテーブルと同様に列方向の区切りには&、行区切りには\\を使用します。

\Qcircuit @C=1em @R=.7em {

\lstick{\ket{0}} & \gate{H} & \ctrl{1} & \qw & \qw & \meter \\
\lstick{\ket{0}} & \qw & \targ & \ctrl{1} & \qw & \meter \\
\lstick{\ket{0}} & \qw & \gate{H} & \control \qw & \gate{H} & \meter
}

\Qcircuitに続く@C=1emは列(column)、@R=.7emは行(row)の間隔です。

量子回路の中でケットベクトルを利用したいのでbraketパッケージの\ketコマンドを利用しています3


コマンド

上記の例のように量子ゲートを配置するには\gate{H}等とします。今回使用したコマンドは以下の通りです。

コマンド
効果
備考

\qw
何もしない量子線(quantum wire)を出力

\qwがない場合には横線が無くなります

\gate{#1}

#1で表される量子ゲートを出力

#1は標準で数式環境ですので$H$等とすると怒られます4

\ctrl{#1}
条件を示す点及び#1個下への線を出力

#1は負の値も利用できます

\targ
CNOTゲート等の対象として利用される排他的論理和(XOR)記号を出力

\control
CZゲート等の対象として利用される点を出力
このコマンドは点のみを出力するため通常は\qwと一緒に利用されます

\meter
測定を表す記号を出力

この他にも\qswap\multigate等のコマンドがあります。

詳しくはtexdoc qcircuitを実行してマニュアルを見て下さい。例文が載っており非常に解りやすいです。


standaloneクラス

qcircuitパッケージを利用する上では\documentclass{article}でも良いですが、この場合大きな余白を持ったPDFファイルが生成されます。

そこでstandaloneクラスを利用すると簡単に余白を削ることができます。

ただし\lstickコマンドを使う場合にはオプションとしてborder={25pt 5pt 5pt 5pt}等として左余白を大きくしないと表示されないので、注意して下さい。

なお引数は余白のサイズで{左 下 右 上}の順で指定できます。


おわりに

qcircuitパッケージを利用すると業界標準のカッコイイ量子回路を描くことができます。

そして今回紹介していないqcircuitパッケージの機能やXy-picパッケージの知識を用いれば、次のようなすごいカッコイイ量子回路を描くことだって出来ます5

表面符号の量子回路

このようなすごいカッコイイ量子回路ついてはLaTeXで量子回路を描く(応用編)を参照下さい。





  1. 歴史的にはqcircuitパッケージの元となるQ-circuitマクロをM. A. Nielsenも利用していますし、QISKit等最近の量子SDKでも出力として利用されていることから、業界標準と言っても過言ではないはずです。 



  2. (u)pLaTeX+dvipdfmxでも問題ありませんが、特に理由がなければコンパイル時間が短くて済むpdfLaTeXをオススメします。 



  3. \usepackage[braket]{qcircuit}としてqcircuitパッケージが提供する\bra及び\ketコマンドを利用することも出来ます。 



  4. \gate{\text{gate}}等とすることで文章を書くこともできます。なおtextコマンドはamsmathパッケージに含まれます。 



  5. ちなみに区切り線とコマンドを記載した量子回路図もLaTeXで作製しています。