在“ ”的参数之间不加空格地编写代码\Edge[h local options i](Vertex i)(Vertex j)
通常会处理:
\documentclass{article}
\usepackage{tikz-network}
\thispagestyle{empty}
\begin{document}
\begin{tikzpicture}
\Vertex {A} \Vertex [x = 2] {B} \Vertex [x = 2, y = -1] {C}
\Edge[lw = 3pt](A)(B)
\Edge[lw = 5pt](A)(C)
\end {tikzpicture}
\end {document}
但是如果“ ”的参数之间存在间距(无论是什么),\Edge[h local options i](Vertex i)
如下所示:
\documentclass {article}
\usepackage {tikz-network}
\thispagestyle {empty}
\begin {document}
\begin {tikzpicture}
\Vertex {A} \Vertex [x = 2] {B} \Vertex [x = 2, y = -1] {C}
% Case 1: space between <[lw = 3pt]> and <(A) (B)>
\Edge[lw = 3pt] (A)(B)
% Case 2 (below): or even if there is a space between <(A)> and <(C)> as below
\Edge[lw = 5pt](A) (C)
\end {tikzpicture}
\end {document}
我按照上面的代码中的顺序收到以下错误,间距也是如此:
情况 1 - < [lw = 3pt]
> 和 < (A)(B)
> 之间的空格将返回以下错误:
Runaway argument?
(A)(B) \end{tikzpicture} \end{document}
! File ended while scanning use of \@edge.
<inserted text>
\pair
<*>17.tex
?
情况 2 - < [lw = 5pt](A)
> 和 < (C)
> 之间的空格将返回以下错误:
! Undefined control sequence.
\pgfonlayer @ assert @ is @ active ... fonlayer @ isactive
{0}\expandfter \pgf@ asser ...
1.8 \Edge[lw = 5pt](A) (C)
?
\Edge
注 1:在 < > 和 < >之间添加空格[h local options i] (Vertex i) (Vertex j)
不会返回任何错误。
注2:示例取自Section 2.2
第15页https://ctan.org/pkg/tikz-network。
注3:使用了命令latexmk和Zathura viewer。
lw
显然一切都与使用(\Edge
线宽大小)选项有关。
答案1
包中的定义在这里“有问题”。基本上,没有空格是预期用法,因为命令的定义如下
\newcommand*{\Edge}[1][]{\@edge[#1]}%
\def\@edge[#1](#2)(#3){%
…
(以上是第 584/585 行,的定义\Edge
)
这说明 TeX 需要后面\Edge
紧跟着[A](B)(C)
(符合[#1](#2)(#3)
规范)。提供我调用的内容A
可以省略,因为包装器\newcommand
在用户不提供值的情况下传递了一个空参数。包宏仍然需要括号中的其他两个参数,并且它们不需要任何空格。
总结一下:如果想在那里插入空格,就必须重新设计并重新实现包接口。
编辑:这实际上与包无关。您可以通过以下简单的代码示例重现完全相同的错误:
\documentclass{article}
\begin{document}
\def\blub(#1)(#2){#1#2}
\blub(A) (B)
\end{document}
这就是它的\def
工作原理。宏将按照定义查找参数规范。