あんパン

こしあん派

LaTeXでカルノー図を描く

レポートでカルノー図が必要になったので、LaTeXでカルノー図描けるようにした。

これを参考に、ちょっとだけ変えた。

f:id:masawada:20140713230430p:plain

こんなのが生成できる。便利だ。

LaTeXでカルノー図

具体的にはまず\documentclass

\documentclass[a4j,10pt,dvipdfmx]{jarticle}

みたいな感じにする。dvipdfmxを入れないと他の画像類がうまく表示されないっぽい。次に

\usepackage[dvipdfmx]{graphicx}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}

と上のソースの8行目くらいから73行目くらいの両方をプリアンブルに突っ込む。

本文に

\begin{center}
  \begin{figure}
    \centering
    \begin{Karnaugh}{$\tt{x_1 x_0}$}{$\tt{y_0 y_0}$}
      \contingut{0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0}
      \implicant{4}{12}
      \implicant[3pt]{12}{9}
      \implicantdaltbaix[4pt]{12}{14}
    \end{Karnaugh}
    \caption{カルノー図}
  \end{figure}
\end{center}

みたいなのを書くと生成できる。\begin{Karnaugh}{$1}{$2}$1$2をよしなに弄るとラベルを変更することができる。\contingut{0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0}みたいに書くと

  00 01 11 10
00 0 4 12 8
01 1 5 13 9
11 3 7 15 11
10 2 6 14 10

みたいな順番で入る。これは真理値表を書いて横→縦に4bitを見た時0000, 0001, 0010...となるようにしているため。本家はこれが縦→横になってた。あとはラベルがabcdだけだったから引数で渡せるようにした。

囲む方法は3つあって

  • \implicant{$1}{$2}
  • \implicantcostats{$1}{$2}
  • \implicantdaltbaix{$1}{$2}

て感じ。それぞれ$1$2は上の表の番号を書けばよろしい。\implicantは通常の囲み、\implicantcostatsは横方向で左右をまたぐときに使う。\implicantdaltbaixは縦方向で上下をまたぐときに使う。まぁそれぞれ使ってみればわかると思う。

\implicant[3pt]{$1}{$2}みたいに指定することでボーダーの幅を少し広げることができる。これで重なった場合も綺麗になる。

本家は4x4だけじゃなくて4x2もあったんだけど、今回は使わないので消した。diffをとればだいたい同じ要領で変更できると思う。

なにはともあれこれでレポートが書きやすくなった。


追記: 3変数版も書きました

masawada.hatenablog.jp