Help us understand the problem. What is going on with this article?

TikZ超入門 もしもBloch球が描けたなら

Introduction

昨今盛り上がりを見せる量子コンピューター。
最初に必ず出てくるのがブロッホ球(Bloch sphere)である。
解説は数あれど、描き方を解説した記事はないのではないか。

もしも、、、もしもBloch球が描けたなら、、、

Requirement

LaTeXについて少し知っておく必要があります。
Donald E. Knuthによって開発された組版システムTeXを拡張したもので、
様々な分野の論文を書くのに使用されます。
インストールや使用方法などは、別サイトをご参考にしてください。
本記事ではLuaTeX-jaを使用しました。

TikZ

LaTeX用の描画パッケージで、高度な描画機能を有しています。

Hands-on

それでは始めましょう。

draw
tikz.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \draw(0,0)--(1,2);
}
\end{document}

プリアンブルに\usepackage{tikz}を書くことでTikZが使用できるようになります。
\tikz{}の中に具体的な描画命令を書いていきます。
ここでは\drawを使用しました。これを組版(typeset)すると、以下のような出力が得られます。
Screen Shot 2018-12-07 at 08.00.55.png
左下が(0,0)で右上が(1,2)になります。
(0,0)--(1,2);はこれらの座標間に線を引けという命令になっているんですね。
文の最後に;をつけるのを忘れないでください。
例えば代わりに(0,0)rectangle(1,2);とすると、長方形の出力が得られます。
また円を描画するcircleなんてのもあります。

option

LaTeXではお馴染みの書式を用いてオプションを設定することができます。
例えば\draw[->]とすると、矢印が描画されます。

coordinate

この命令を使用すると、座標を設定することができます。
\coordinate(origin)at(0,0);は点(0,0)にoriginという座標を設定します。
一度設定した座標は以降、(label)の形で使用することができます。

A second shot

ここまでの知識を用いて、3次元の座標軸とBloch球を描いてみます。

tikz.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \coordinate(o)at(0,0);
  \draw(o)circle(2cm);
  \draw[->](o)--(-0.81,-0.79);%x
  \draw[->](o)--(2,0);%y
  \draw[->](o)--(0,2);%z
}
\end{document}

出力は以下のようになります。

Screen Shot 2018-12-07 at 08.19.46.png

だいぶそれらしくなりましたね。

node

node{} を用いることで、描画を行いながら要素を追加していくことができます。
またnode(label)の形でラベルを設定することもできます。

tikz.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \coordinate(o)at(0,0);
  \draw[->](o)--(1,1)node(tikz)[right]{TikZ};
  \draw[->](tikz)--(2,0);
}
\end{document}

組版結果
Screen Shot 2018-12-07 at 08.55.05.png

この例ではTikZというノードを追加すると同時に、tikzというラベルを
設定しています。またオプションにrightを設定することで、矢印の右にノードを追加しています。

tikzstyle

同じオプションを何度も使用する場合に、エイリアスを設定することができます。
\tikzstyle{style_name}=[option1,option2]
このように書くと、style_name-> などと同様に使用することができます。

The Final edition

さて、ここまでで最低限の知識は獲得できました。
もうあなたには次のコードを読み解くことができるはずです。

tikz.tex
\documentclass{standalone}
\usepackage{tikz,braket}
\begin{document}
\tikz{
  \tikzstyle{st}=[lightgray, fill, fill opacity=0.1];
  \coordinate(o)at(0,0);
  \draw(o)circle(2cm);
  \draw[fill](o)circle(1.5pt);%origin
  \draw[st](o)--(56.7:0.4)arc(56.7:90.:0.4)--cycle;%theta angle
  \draw(0.18,0.6)node{$\theta$};
  \draw[st](o)--(-135.7:0.4)arc(-135.7:-33.2:0.4)--cycle;%varphi angle
  \draw(0.14,-0.58)node{$\varphi$};
  \draw[->](o)--(-0.81,-0.79) node[above left]{\ $x$};%x
  \draw[->](o)--(2,0)node[right]{$y$};%y
  \draw[->](o)--(0,2)node[below right]{$z$}node[above]{\ $\ket{0}$};%z |0>
  \draw[rotate around={0.:(0.,0.)},dashed](0,0)ellipse(2cm and 0.9cm);%ellipse
  \draw[thick,->](o)--(0.70,1.07)node[above]{\ $\ket{\psi}$};%state vector
  \draw[densely dotted,->](o)--(0,-2)node[below]{\ $\ket{1}$};%-z |1>
  \draw[dotted](o)--(0.7,-0.46)--(0.7,1);%triangle
}
\end{document}

いざ、Typeset 、、、

Screen Shot 2018-12-07 at 09.05.41.png

!!?

これでいつでも論文がかけますね🍺

Bibliography

how-to-draw-a-bloch-sphere
TikZの概念

Appendix

TikZにはsyntactic sugarと言いますか、むしろ混乱の元な気がするのですが、省略形があることを付言しておきます。

  • \draw\path[draw]の省略形
  • \draw nodeは単に\nodeとできる
ThomsonKernel
大阪分散技術コミュニティ主催
https://twitter.com/OSAKA_DTC
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away