如何用一条线穿过矩阵中的一行?

如何用一条线穿过矩阵中的一行?

有没有一种“简单”的方法可以用一条线来横跨矩阵中的行?我正在尝试向我的学生演示如何在 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}等)环境中使用该命令,这些环境类似于经典环境(软件包arrayamsmath)。

\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 节点)。

上述代码的输出

相关内容