我正在使用 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}
特别注意右下行的颜色问题。
答案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>
。