在接下来的代码中,我想使用三个或四个参数。我试过了
[add/.style args={#1 and #2 with #3}{to path={% ($(\tikztostart)!-#1!(\tikztotarget)$)--($(\tikztotarget)!-#2!(\tikztostart)$)% \tikztonodes coordinate[pos=-.25](#3)}}]
但我希望该with #3
部分是可选的。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[add/.style args={#1 and #2}{to path={%
($(\tikztostart)!-#1!(\tikztotarget)$)--($(\tikztotarget)!-#2!(\tikztostart)$)%
\tikztonodes coordinate[pos=-.25](x)}}]
\coordinate (A) at (0,0);
\coordinate (B) at (3,2);
\draw[add=.5 and .5](A) to (B);
\foreach \point in {A,B,x}
\fill [red,opacity=.5] (\point) circle (2pt);
\end{tikzpicture}
\end{document}
答案1
您可能想尝试一种略有不同的方法。只需使用一个参数,但它是键的列表。这样,即使您稍后决定添加一些选项/键,语法也将始终相同。这些键可以具有默认/初始值,可以随意更改。您可以将这些键存储在目录中(我Alain
在这里选择,但您当然会更改它),这样您就永远不会用尽名称空间。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{tikzpicture}[
add/.style={
Alains settings={#1},
to path={%
($(\tikztostart)!-\pv{first}!(\tikztotarget)$)--($(\tikztotarget)!-\pv{second}!(\tikztostart)$)%
\tikztonodes coordinate[pos=\pv{pos}](\pv{coord})%
}
},
Alains settings/.code={
\tikzset{Alain/.cd,#1}
\def\pv##1{\pgfkeysvalueof{/tikz/Alain/##1}}
},
Alain/.cd,
first/.initial=0.5,
second/.initial=0.5,
coord/.initial=x,
pos/.initial=-0.25
]
\coordinate (A) at (0,0);
\coordinate (B) at (3,2);
\draw[add](A) to (B);
\foreach \point in {A,B,x}
{\fill [red,opacity=.5] (\point) circle[radius=2pt] node[above]{\point};}
\begin{scope}[xshift=5cm]
\coordinate (A) at (0,0);
\coordinate (B) at (3,2);
\draw[add={first=0.3,second=0.8,coord=y,pos=-0.4}](A) to (B);
\foreach \point in {A,B,y}
{\fill [red,opacity=.5] (\point) circle[radius=2pt] node[above]{\point};}
\end{scope}
\end{tikzpicture}
\end{document}
在左侧部分,键采用其初始/默认值,但在右侧部分,它们会发生改变。
我个人发现用法也更容易记住。