\tikznode 命令的语法?

\tikznode 命令的语法?

我正在尝试编写一个使用条件证明 (CP) 箭头的正式有效性证明。我在以下网址看到了 Gernot 的代码:https://tex.stackexchange.com/a/581822/277990,下面我将他们的想法应用到了另一个例子中。我的问题是,gernottikznode命令的语法是如何工作的?换句话说,每个部分的作用是什么[3][]{%\tikz[remember picture,baseline=(#2.base)]\node[minimum size=0pt,inner sep=0pt,#1](#2){#3};%}?特别是我在 TikZ 手册中找不到有关使用主题标签的任何信息https://mirrors.concertpass.com/tex-archive/graphics/pgf/base/doc/pgfmanual.pdf。为什么有不同种类的结束符号(例如“( )”与“{ }”与“[ ]”)?

\documentclass{article}
\usepackage{amssymb, mathtools}
\usepackage{tikz}
\usetikzlibrary{calc, arrows}

\let\impl\supset
\renewcommand{\lor}{\text{ v }}

\newcommand\tikznode[3][]{%
    \tikz[remember picture,baseline=(#2.base)]
      \node[minimum size=0pt,inner sep=0pt,#1](#2){#3};%
}

\begin{document}

\(\begin{array}{rll}
                1.      &   (x) \{ (Bx \lor Wx) \impl [(Ax \lor Fx) \impl Sx]\}\mathrlap{\quad/\therefore (x)[Bx \impl (Ax \impl Sx)]}\\
\tikznode{2}  {$2.$}    &   By\\
                3.      &   Ay\\
                4.      &   (By \lor Wy) \impl [(Ay \lor Fy) \impl Sy]\qquad\qquad % This \qquad\qquad is a cheat in order to push the "evidence" column to the right somewhat.
                        &   \text{1, \textbf{UI}}\\
                5.      &   By \lor Wy
                        &   \text{2, Add.}\\
                6.      &   (Ay \lor Fy) \impl Sy
                        &   \text{4, 5, M.P.}\\
                7.      &   Ay \lor Fy
                        &   \text{3, Add.}\\
                8.      &   Sy
                        &   \text{6, 7, M.P.}\\
\tikznode{9}  {$9.$}    &   Ay \impl Sy
                        &   \text{3--8, C.P.}\\
\tikznode{10} {$10.$}   &   By \impl (Ay \impl Sy)
                        &   \text{2--9, C.P.}\\
                11.     &   (x)[Bx \impl (Ax \impl Sx)]
                        &   \text{10, \textbf{UG}}
\end{array}
\)

\begin{tikzpicture}[remember picture,overlay]
  \draw[stealth'-,shorten <=2pt] (2) -- ++(-2em,0) |- ($(9)!0.5!(10)$) -- ++(10em,0);
  % "[shorten <=<length>]" controls shaft of part of arrow right next to "2."]
  % "($(<node no. A>)!0.5!(<node no. B>)$)" specifies the coordinate halfway between node no. A and node no. B
\end{tikzpicture}

\end{document}

谢谢你!

答案1

您询问的一些语法是标准 LaTeX 语法,有些则是 TikZ 特有的。

命令如何工作

最简单的用法是,该命令接受两个参数:一个节点名称和一个节点内容,并将节点与基线对齐,以便可以与其他文本一起使用。此外,节点被命名,以便其他后续 TikZ 命令可以引用它们。这需要两次编译才能正常工作。

该命令还允许一个可选参数,让您可以将其他参数传递给创建的节点。

这是展示其功能的示例文档。

\documentclass{article}
\usepackage{tikz}
\newcommand\tikznode[3][]{%
    \tikz[remember picture,baseline=(#2.base)]
      \node[minimum size=0pt,inner sep=0pt,#1](#2){#3};%
}
\begin{document}
\tikznode{A}{$A$} some text \tikznode{B}{$B$} some text \tikznode[red]{C}{$C$}
\tikz[remember picture,overlay]{\draw[->,in=-90,out=-90] (A) to (B);}
\end{document}

代码输出

第一行创建两个节点 A 和 B,分别包含数学内容A。还会创建第三个节点,但它也会red作为可选参数传递,然后将节点涂成红色。

第二行表示我们随后可以引用创建的节点来对它们执行操作。在本例中,我在 A 和 B 之间画了一个弯曲的箭头。

正如 Andrew Stacey 在评论中指出的那样,该tikzmark软件包提供了该命令的更通用、更强大的版本,但对于许多用途来说,像这样的简单版本就足够了。

命令语法的工作原理

定义的第一部分是标准 LaTeX \newcommand

\newcommand[<number of arguments][<optional argument default>]
   {<rest of command  #1 #2 and #3>}

此处命令的代码以{...}.分隔#1#2#3分别指代第一个(在本例中为可选)、第二个和第三个参数。因此,此命令有两个强制参数(#2#3)和一个可选参数(#1)。

\newcommand 参数混淆以获得有关语法的更详细讨论。

现在来看看 TikZ 语法:

\tikz[remember picture,baseline=(#2.base)]
    \node[minimum size=0pt,inner sep=0pt,#1](#2){#3};%

命令是一种无需环境即可直接将代码\tikz注入命令的方式。TikZ 使用方括号来分隔传递给任何 TikZ 命令的键/值,使用圆括号来分隔坐标和节点内容,以及像在常规 TeX 中一样对元素进行分组的更通用方式。tikztikzpicture(...){...}

因此,该命令将remember picture键传递给\tikz命令,从而允许稍后访问图片中定义的元素;它将图片基线与base主命令的第二个(即第一个强制)参数命名的节点的锚点对齐。

实际的 TikZ 命令只是使用\node命令放置一个节点。在这里,键/值再次传递给该命令,设置节点的最小大小,并删除节点内容和节点外部边界之间的任何内部空间。可选参数(如果存在)(#1新定义的命令)也会传递,这允许您使用此参数将其他 TikZ 键/值传递给节点命令。这就是键如何red传递给示例文档中的第三个节点。

该命令的其余部分将主命令的第一个强制参数 ( #2) 传递为要创建的节点的名称,并将第二个参数 ( #3) 传递为节点文本。由于整个\tikz命令使用remember picture,因此创建的名称可以被当前命令之外的其他命令引用\tikz。最后;是必需的 TikZ 结束字符。末尾的注释字符%确保使用该命令时不会出现虚假空格。请参阅行尾的百分号 (%) 有什么用?(为什么我的宏会产生额外的空间?)有关注释字符和虚假空格的更多详细信息。

相关内容