循环或指定卡诺图中的蕴涵项颜色

循环或指定卡诺图中的蕴涵项颜色

我正在使用 Mattias Jacobsson 的优秀 karnaugh-map 包绘制卡诺图。

每个蕴涵项都用不同的颜色绘制——除非蕴涵项超过 6 个。超过 6 个之后,所有颜色都固定为青色。在某些情况下,这可能会使蕴涵项变得模糊,因为它们会相互重叠。

有没有办法指定蕴涵项的颜色?或者踢出包以重新开始颜色循环?

MWE 如下:

\documentclass[tikz, border=2mm]{standalone}
\usepackage{karnaugh-map}

\begin{document}

\begin{karnaugh-map}[4][4][4][EF][CD][AB]
  \minterms{0,2,3,5,9,13,14,18,21,22,24,25,26,29,40,41,43,45,48,49,51,53,56,58,59,61}
  \terms{16,37,42,50,57}{X}
  \autoterms[0]
  \implicant{0}{0}[0,1]
  \implicant{3}{2}[0]
  \implicant{5}{13}[0,1,2,3]
  \implicant{13}{9}[0,1,2,3]
  \implicant{14}{14}[0]
  \implicant{2}{6}[1]
  \implicantedge{8}{8}{10}{10}[1,3]
  \implicant{8}{10}[2,3]
  \implicant{0}{2}[3]
\end{karnaugh-map}

\end{document}

具有 9 个蕴涵项的 6-变量 Kmap

特别注意右下行的颜色问题。

答案1

负责颜色的命令karnaugh-map如下:

\newcommand{\@karnaughmap@func@decimaltocolor@}[1]{%
  \ifnum#1=0 red\fi
  \ifnum#1=1 green\fi
  \ifnum#1=2 yellow\fi
  \ifnum#1=3 cyan\fi
  \ifnum#1=4 blue\fi
  \ifnum#1=5 magenta\fi
  \ifnum#1>5 cyan\fi
}

要扩展颜色,请在加载包后添加以下几行。

\makeatletter
\renewcommand{\@karnaughmap@func@decimaltocolor@}[1]{%
  \ifnum#1=0 red\fi
  \ifnum#1=1 green\fi
  \ifnum#1=2 yellow\fi
  \ifnum#1=3 cyan\fi
  \ifnum#1=4 blue\fi
  \ifnum#1=5 magenta\fi
  \ifnum#1=6 brown\fi
  \ifnum#1=7 lime\fi
  \ifnum#1=8 orange\fi
  \ifnum#1>8 cyan\fi
}
\makeatother

要循环显示颜色,请按如下方式重新定义命令:

\makeatletter
\renewcommand{\@karnaughmap@func@decimaltocolor@}[1]{%
  \ifnum#1=0 red\fi
  \ifnum#1=1 green\fi
  \ifnum#1=2 yellow\fi
  \ifnum#1=3 cyan\fi
  \ifnum#1=4 blue\fi
  \ifnum#1=5 magenta\fi
  \ifnum#1>5 \expandafter\@karnaughmap@func@decimaltocolor@\expandafter{\numexpr#1-6}\fi
}
\makeatother

您还可以结合这两种方法,即延长颜色和循环。只需确保数字正确即可:

  • 后面的数字\ifnum#1>必须与前面的相等性检查中的数字相同。
  • 后面的数字\numexpr#1-必须比 后面的数字大一\ifnum#1>

相关内容