Marmot 的回答如何在定义的 TikZ 命令中使用旋转?调用 TikZ 中 scope 的一个用法来快速而肮脏地修复。修复有效。但答案建议避免在 TikZ 命令定义中使用 scope,而改用 newcommand。
对于我这个非专家来说,这种使用范围的方式确实很奇怪。它似乎只是重申了我已经声明过的一个论点,因为 TikZ 忽略了该论点的一些(但不是全部)值,直到我重申它。但这个问题可能根本不是重点。
是否有普遍的理由尝试避免使用 scope 而倾向于使用 newcommand?
答案1
您的问题似乎基于误解,scope
并不是\newcommand
“竞争对手”,他们的目的完全不同。
土拨鼠在他的回答当他推荐 时\newcommand
,使用的是\def
。\def
和\newcommand
都用于定义新宏,但它们之间存在差异。\newcommand
通常推荐使用 ,主要是(我认为)因为它首先检查命令是否存在,而\def
会默默覆盖现有命令。 有关差异的更多信息,请参阅\def 和 \newcommand 之间有什么区别?
此外,正如 Andrew 提到的他对你另一个问题的回答,已经存在一个名为的宏\line
,事实上,如果你这样做,\newcommand\line{foo}
你会收到一条错误消息,说! LaTeX Error: Command \line already defined.
当重新定义一个现有的命令时,你需要确保它不会破坏任何东西,所以这样的错误可能表明你应该为你的宏选择一个不同的名字。
scope
另一方面,环境仅供在环境内使用,tikzpicture
其目的是能够在本地应用 TikZ 设置,例如更改默认颜色、线宽或旋转。