最近は量子コンピュータという言葉を聞く機会が増え、量子回路を描く必要が増している…はずです。
そのため本記事では業界標準1であるLaTeXのqcircuitパッケージを利用した量子回路の描き方について解説します。
TL;DR
LaTeXのqcircuitパッケージを利用すると次のようなカッコイイ量子回路が描けます。
前提
私の環境はWindows 10 + TeX Live 2018です。
最近のTeXディストリビューションが導入されており、適切にPDFが生成できるなら問題ないと思います。
ただしqcircuit及び依存するxy-picとifpdfパッケージがなければ導入して下さい。
実際に量子回路を描く
例として上に掲載した量子回路のLaTeXファイルを見てみましょう。
\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で量子回路を描く(応用編)を参照下さい。
-
歴史的にはqcircuitパッケージの元となるQ-circuitマクロをM. A. Nielsenも利用していますし、QISKit等最近の量子SDKでも出力として利用されていることから、業界標準と言っても過言ではないはずです。 ↩
-
(u)pLaTeX+dvipdfmxでも問題ありませんが、特に理由がなければコンパイル時間が短くて済むpdfLaTeXをオススメします。 ↩
-
\usepackage[braket]{qcircuit}
としてqcircuitパッケージが提供する\bra
及び\ket
コマンドを利用することも出来ます。 ↩ -
\gate{\text{gate}}
等とすることで文章を書くこともできます。なおtextコマンドはamsmathパッケージに含まれます。 ↩ -
ちなみに区切り線とコマンドを記載した量子回路図もLaTeXで作製しています。 ↩