我想用 LaTeX 制作一个表格,将表格中的一些单元格用方框框起来。我还想能够嵌套方框,这样就可以在方框中再套上一个方框。下面是一个例子来说明我的意思:
我已经搜索这个问题一段时间了,但似乎无法找到解决这个问题的方法,而且由于我对 LaTeX 还很陌生,所以我也不知道该如何解决这个问题。
答案1
可能有很多方法可以做到这一点,这取决于你想如何扩展它。我使用了一个,array
因为你的问题中的安排看起来很像tabular
:
\documentclass{article}
\begin{document}
\[\begin{array}{l|cclc|l}
\multicolumn{1}{l}{1.} & \quad & & \forall x\forall y : P(x,y) & \multicolumn{1}{c}{\quad} & \mbox{premise} \\ \cline{2-5}
2. & & u_0 & \forall y : P(u_0,y) && \forall e \\ \cline{3-4}
3. & & \multicolumn{1}{|c}{v_0} & P(u_0,v_0) & \multicolumn{1}{|c|}{} & \forall e \\ \cline{3-4}
4. & & & \forall v : P(u_0,v) && \forall i \\ \cline{2-5}
\multicolumn{1}{l}{5.} & & & \forall u\forall v : P(u,v) &\multicolumn{1}{c}{} & \forall i
\end{array}\]
\end{document}
第 2 列和第 5 列只是占位符,指定为c
输入;它们仅包含\quad
用于间距目的的条目。
tabular
对于大型结构,在 LaTeX 中创建起来很繁琐。有几个 GUI 可能会有所帮助:
-
默认包含
\bigstrut
s,这要求bigstrut
包裹。此外,您可能希望将默认tabular
输出修改为array
,并将其包装在显示数学环境中\[
...。\]
...更多信息请访问简化 LaTeX 表格生成的工具综合列表。
答案2
{NiceTabular}
这是使用 来实现这一点的方法nicematrix
。此环境类似于经典的{tabular}
( array
),但在单元格、行和列下添加了 PGF/Tikz 节点。在 中使用 Tikz 构建数组后,可以使用这些节点绘制任何您想要的内容\CodeAfter
。
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
\[\begin{NiceArray}{lcclcl}
1. & \quad & & \forall x\forall y : P(x,y) & \quad & \mbox{premise} \\
2. & & u_0 & \forall y : P(u_0,y) && \forall e \\
3. & & v_0 & P(u_0,v_0) & & \forall e \\
4. & & & \forall v : P(u_0,v) && \forall i \\
5. & & & \forall u\forall v : P(u,v) & & \forall i
\CodeAfter
\tikz \draw (2-|2) rectangle (5-|6) (3-|3) rectangle (4-|5) ;
\end{NiceArray}\]
\end{document}
您需要多次编译(因为nicematrix
在后台使用 PGF/Tikz 节点)。
事实上,对于你的情况,也可以使用内置命令,在与左上角对应的单元格中使用\Block
键。你不必明确使用 Tikz。draw
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[\begin{NiceArray}{lcclcl}
1. & \quad & & \forall x\forall y : P(x,y) & \quad & \mbox{premise} \\
2. & \Block[draw]{3-4}{} & u_0 & \forall y : P(u_0,y) && \forall e \\
3. & & \Block[draw]{1-2}{} v_0 & P(u_0,v_0) & & \forall e \\
4. & & & \forall v : P(u_0,v) && \forall i \\
5. & & & \forall u\forall v : P(u,v) & & \forall i
\end{NiceArray}\]
\end{document}
输出是一样的。