有没有一种“简单”的方法可以用一条线来横跨矩阵中的行?我正在尝试向我的学生演示如何在 LaTeX 中输入有关布尔函数的家庭作业。下表用于构造布尔函数的正常合取形式和析取形式。这是一个“手工”制作的示例。
答案1
你可以使用 tikz 来实现这一点。可能不是最好的答案,但对我来说是可行的:
\documentclass{article}
\usepackage{tikz}
\newcommand{\pmark}[1]{\begin{tikzpicture}[overlay,remember picture]\node(#1)at (-1em,.7ex){};\end{tikzpicture}}
\newcommand{\smark}[1]{\begin{tikzpicture}[overlay,remember picture]\draw(#1)--(0,.7ex);\end{tikzpicture}}
\begin{document}
$$\begin{array}{cccc|c}
a&b&bc&d&f\\\hline
0\pmark{a}&0&1&1&1\smark{a}\\
0&0&0&1&0\\
0&0&1&1&1\\
\end{array}$$
$f=\overline{a}\wedge\overline{b}\wedge c\wedge+\dots$
\end{document}
答案2
使用nicematrix
,您可以编写一个命令\Cross
,用于您想要跨越的每一行。您将能够在nicematrix
({NiceTabular}
、{pNiceMatrix}
等)环境中使用该命令,这些环境类似于经典环境(软件包array
和amsmath
)。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\ExplSyntaxOn
\NewDocumentCommand { \Cross } { }
{
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{ \__pantigny_cross:n { \int_use:c { c@iRow } } }
}
\cs_new_protected:Nn \__pantigny_cross:n
{
\tikz
\draw [red, shorten~> = -3pt, shorten~< = -3pt]
( #1-1-medium .west ) -- ( #1- \int_use:c { c@jCol } - medium .east ) ;
}
\ExplSyntaxOff
\begin{document}
\begin{NiceTabular}{cccc}[create-medium-nodes]
$p$ & $q$ & $r$ & $f$ \\
\hline
0 & 0 & 0 & 0 \Cross \\
0 & 0 & 1 & 1 \\
0 & 1 & 0 & 1 \\
0 & 1 & 1 & 0 \Cross \\
1 & 0 & 0 & 0 \\
1 & 1 & 0 & 0 \\
1 & 1 & 1 & 1
\end{NiceTabular}
\end{document}
节点的使用medium
确保了水平线。
我们必须编译几次(因为nicematrix
使用 PGF/Tikz 节点)。