用箭头包围一段文本

用箭头包围一段文本

我想知道如何绘制一个箭头来包围一些文本,这样箭头就会“框住”一些语句并指向语句的开头,这些语句也可以嵌套。它在我的逻辑课程中用于在使用“AP”之后和“IP”或“CP”之前封装未完成前提的范围。

我认为这可能可以通过对齐写入文本并使用 TikZ 绘制箭头来实现,但箭头不会随着行数动态变化。

基本上,我想在文字处理器(LaTeX)中完成下面所做的事情。

在此处输入图片描述

答案1

这是一种使用的可能性nicematrix请注意,必须编译两次。

在此处输入图片描述

\surr定义一个接受三个参数的新命令,其中一个参数是可选的:

\surr[<nest level>]{<from row>}{<to row>}

嵌套级别默认为 1。\surr应在 中使用命令\CodeAfter。通过向相关行添加内容来创建箭头的额外垂直空间[1ex]。如果需要,可以省略或更改。

要在命令中进行间距调整\surr

  • -3pt是绘制线的当前行下方的距离。
  • 2mm是嵌套垂直线之间的空间。
  • 3mm是第一层嵌套的额外空间。

如果你想自动进行行编号,TeX.SX 上有几种解决方案,例如这里

\documentclass{article}

\usepackage{nicematrix, tikz}

\newcommand{\surr}[3][1]{\tikz{
    \draw[->]([shift={(0,-3pt)}]#2-2.south east)--([shift={({#1*-2mm-3mm},-3pt)}]#2-1.south west)|-(#3-1.west);
}}

\begin{document}

\begin{NiceTabular}{ll}
  1. $A\lor B$ & AP\\
  2. $(A\supset B)\bullet(B\supset C)$ & AP\\
  3. $(A\supset C)$ & 2 Simp\\
  4. $(B\supset C)$ & 2 Simp\\
  5. $C\lor C$ & 1, 3, 4 CD\\
  6. $C$ & 5 Taut\\[1ex]
  7. $[(A\supset B)\bullet(B\supset C)]\supset C$ & 2--6 CP\\[1ex]
  8. $(A\lor B)\supset\{[(A\supset B)\bullet(B\supset C)]\supset C\}$ & 1--7 CP
\CodeAfter
  \surr{6}{2}
  \surr[2]{7}{1}
\end{NiceTabular}

\end{document}

相关内容