我正在尝试编写一个使用条件证明 (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 中一样对元素进行分组的更通用方式。tikz
tikzpicture
(...)
{...}
因此,该命令将remember picture
键传递给\tikz
命令,从而允许稍后访问图片中定义的元素;它将图片基线与base
主命令的第二个(即第一个强制)参数命名的节点的锚点对齐。
实际的 TikZ 命令只是使用\node
命令放置一个节点。在这里,键/值再次传递给该命令,设置节点的最小大小,并删除节点内容和节点外部边界之间的任何内部空间。可选参数(如果存在)(#1
新定义的命令)也会传递,这允许您使用此参数将其他 TikZ 键/值传递给节点命令。这就是键如何red
传递给示例文档中的第三个节点。
该命令的其余部分将主命令的第一个强制参数 ( #2
) 传递为要创建的节点的名称,并将第二个参数 ( #3
) 传递为节点文本。由于整个\tikz
命令使用remember picture
,因此创建的名称可以被当前命令之外的其他命令引用\tikz
。最后;
是必需的 TikZ 结束字符。末尾的注释字符%
确保使用该命令时不会出现虚假空格。请参阅行尾的百分号 (%) 有什么用?(为什么我的宏会产生额外的空间?)有关注释字符和虚假空格的更多详细信息。