## 编译环境
操作系统
* [X] Windows 7/8/10
* [ ] macOS
* [ ] Linux
`若需勾选,请把[ ]改成[x]`
Tex发行版
* [X] TexLive `年...
## 编译环境
操作系统
* [X] Windows 7/8/10
* [ ] macOS
* [ ] Linux
`若需勾选,请把[ ]改成[x]`
Tex发行版
* [X] TexLive `年份`
* [ ] MikTeX `版本号`
* [ ] CTeX
`若需勾选,请把[ ]改成[x]`
Update: 感谢 muzimuzhi(知乎@慕子)大神
在 [Github](https://github.com/CTeX-org/forum/issues/178)上的回答。
----
## 一些关于`\tikz@scan@one@point`的疑问
我正在阅读`\tikz@scan@one@point`,
但是我遇到了一系列问题:
1. 如何分辨一个宏的parameter对应的参数?比如:
```tex
\def\tikz@scan@one@point#1{%
\let\tikz@to@use@whom=\tikz@to@use@last@coordinate%
\tikz@shapeborderfalse%
\pgfutil@ifnextchar+{\tikz@scan@relative#1}{\tikz@scan@absolute#1}}%
```
如果输入 `\tikz@scan@one@point\pgfutil@firstofone(A)`,
(A是一个node)
那么与定义中“`#1`”对应的 是 `\pgfutil@firstofone`,还是
`\pgfutil@firstofone(A)`呢?
2. `\tikz@scanexpand`只有一个参数(`\def\tikz@scanexpand#1{...`)
但是在`\tikz@scan@absolute`的定义中,`\tikz@scanexpand`的调用
却不带任何参数:
```tex
\def\tikz@scan@absolute#1{%
\pgfutil@ifnextchar({\tikz@scan@@absolute#1}%)
{%
\advance\tikz@expandcount by -1%
\ifnum\tikz@expandcount<0\relax%
\let\pgfutil@next=\tikz@@scangiveup%
\else%
\let\pgfutil@next=\tikz@@scanexpand%
\fi%
\pgfutil@next{#1}%
}%
}%
```
这种现象在TikZ的源码中多次出现,
有大牛可以解释一下这是为什么吗^_^
另外,有没有通读过`tikz.code.tex`的大佬
可以大概解释一下`\tikz@scan@one@point`是如何工作的?
可不可以展示一些例子?
一周热门 更多>