ヨッシーの日記

いろいろかきます

【LaTeX】カルノー図の描き方

最近実験レポートでカルノー図を描く機会があったときに、少し手間取ったので自分への備忘録として残しておきます。
実際、TeXのパッケージを使ってカルノー図を書くのは少し手間なのですが、比較的綺麗に描けますし、慣れれば速いので結構オススメできる方法です。(慣れるほどカルノー図を描かされるような機会はないでしょうが…)
また、この方法ではTeXの本文に100行近いテンプレートを差し込むようなことはしませんので、手軽にカルノー図を描くことができます。

準備

まず「askmaps」というスタイルファイル(ZIPファイルになってます)を下のリンクからダウンロードして、インストールします。パッケージのインストール方法は色んなサイトに解説が載ってるので各自の環境に合わせて行って下さい。また、TeXLiveでは標準でインストールされているそうです。


ctan.org

使い方

プリアンブル

まずプリアンブルに

\usepackage{askmaps}
\usepackage{color}

を挿入します。一応説明しておくと、askmapsは先程のカルノー図を描くためのパッケージで、colorは色の付いた線でカルノー図の囲みを描きたい場合は追加します。

2変数のカルノー

以下のようなコードで2変数のカルノー図を描くことができます。

\begin{figure}[htbp]
  \centering
  \askmapii{\(a\)}{{\(D_0\)}{\(D_1\)}}{}{1110}%
   {%
    \color{red}\put(0.5,1.0){\oval(0.8,1.8)}
    \color{blue}\put(1,1.5){\oval(1.8,0.8)}
   }
  \caption{\(a\)のカルノー図}
  \label{}
\end{figure}


これで下の図のようなカルノー図が描けます。

f:id:yoshi12030:20191120223047p:plain

ではそれぞれどのようにして描いているのかを説明します。

まず、上で示したサンプルはTeXで図を貼るときのサンプルによく似ていて、丁度「\includegraphics」の部分を「\askmapii」で置き換えたようなものになっています。「\askmapii」は2変数のカルノー図を描くコマンドで、5つの引数を持ちます。


1つ目の引数は論理関数の出力変数の名前を定義します。図の例では「a」になっていますが、数式のスタイルで挿入したいのであれば引数に「\(a\)」などと入力することにより数式スタイルにすることができます。


2つ目の引数は論理関数の入力変数の名前(2変数であれば2つ)を定義します。図の例のように文字を数式のスタイルで挿入したい場合は「{\(D_0\)}{\(D_1\)}」のように中括弧で区切って指定します。


3つ目の引数はオプションで、今回は指定していません。
4つ目の引数は表の中の数字(1や0などの数字)を指定します。指定の仕方は2変数なのであれば表の枠は全部で4つあるので「1110 」のように4つの数字を入力すれば大丈夫です。引数の数字の順番は

f:id:yoshi12030:20191120224626p:plain

のように指定すればOKです。(つまり「1234」と入力すれば上の図が得られます)


5つ目の引数では楕円を使って「ループ」を表現します。「\color」コマンドでは楕円の色を指定します。どの色が指定できるのかは、colorパッケージのリファレンスを参照して下さい。

「\put」コマンドでは楕円を置く場所の中心座標を指定します。この座標はカルノー図の左下が原点になっていてカルノー図の1マスが長さ1に相当します。例えば「\put(0.5, 1.0)」とすると左下を原点とした座標で(0.5, 1.0)の場所が中心に指定されます。(これは上の図で赤い楕円の中心になっている)

「\oval」コマンドでは楕円の大きさをしています。例えば「\oval(0.8, 1.8)」とすると、X方向に長さ0.8でY方向に長さ1.8の楕円が作られます。

3変数のカルノー

3変数のカルノー図は「\askmapiii」というコマンドで描くことができます。

\begin{figure}[htbp]
  \centering
  \askmapiii{\(a\)}{{\(D_0\)}{\(D_1\)}{\(D_2\)}}{}{12345678}%
   {%
    \color{red}\put(0,1){\oval(1.8,1.8)[r]}
    \color{red}\put(4,1){\oval(1.8,1.8)[l]}
   }
  \caption{\(a\)のカルノー図}
  \label{}
\end{figure}

このサンプルで次のような図が描けます。

f:id:yoshi12030:20191120231321p:plain

「\oval」コマンドのオプションを使うことで図のような半円を描くこともできます。オプションのリストは下の表にまとめておきました。


オプション 説明
r
楕円の右半分のみを描画
l
楕円の左半分のみを描画
t
楕円の上半分のみを描画
b
楕円の下半分のみを描画

参考にしたもの

この記事を書くにあたって以下のサイトや文章を参考にさせて頂きました。

天地有情 [LaTeX] askmaps --- カルノー図を描く

askmapsの公式マニュアル(英語)