我试图用一条线在某个点处划分圆节点,但我想出的方法仍然会在圆外留下少量的线,如下所示。我尝试使用clip
,但无法从节点中提取可用的路径。
提前致谢!
\documentclass[crop,tikz]{standalone}
\usetikzlibrary{calc,positioning,fit,shapes}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\node[baseline] (f1p) {\({f_{1}'}(x)\)};
\node[baseline, right =3mm of f1p] (f1) {\(f_1\)};
\node[circle,draw,fit={(f1p)(f1)}] (f1c) {};
\coordinate (f1m) at ($(f1p.east)!0.5!(f1.west)$);
\draw (f1c.north-|f1m) -- (f1c.south-|f1m);
\end{scope}
\end{tikzpicture}
\end{document}
编辑:由于原始问题中不清楚,我正在寻找一种方法来使这种类型的圆圈划分能够适用于两侧任意长度的文本。
答案1
您可以使用库来执行此操作。对于垂直线,不要使用 ,intersections
而是使用。对于圆和线,使用,然后从到 的线。\draw
\path
name path=
\draw
intersection-1
intersection-2
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,positioning,fit,intersections}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\node[baseline] (f1p) {\(f_1'(x)\)};
\node[baseline, right =3mm of f1p] (f1) {\(f_1\)};
\node[name path=cir,circle,draw,fit={(f1p)(f1)}] (f1c) {};
\coordinate (f1m) at ($(f1p.east)!0.5!(f1.west)$);
\path[name path=ver] (f1c.north-|f1m) -- (f1c.south-|f1m);
\draw [name intersections={of=cir and ver}] (intersection-1)--(intersection-2);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
我建议使用一个path picture
可以自动根据路径进行剪切的(这里只是circle
节点)。
这有几个缺点:
填充圆形变得复杂(但由于节点是在文本之后绘制的,因此无论如何都需要采用不同的方法)。
文本节点不应该旋转。
这两种情况都有解决办法,但都比较复杂。(而且在某个时候,我只需要开发一种单独的形状。)
我删除了这些baseline
选项,它们在这里不起作用。如果您希望整个 TikZ 图片在其节点底部垂直对齐,请将 添加anchor=base
到节点并baseline
添加到tikzpicture
。
我使用零inner sep
作为文本节点,以便circle vsplit distance
在文本之间取值,而圆圈节点使用默认值inner sep
(.3333em),这意味着圆圈的拟合度就好像它里面真的有文本一样。
(您这样做意味着文本之间的距离实际上是 2 * .3333em + 3mm,并且圆形节点在实际文本周围基本上有一个 .6666em 的内部间隔。)
我添加了第二个示例来创建原始代码的对齐。
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}[
circle vsplit distance/.initial=3mm,
circle vsplit fit/.style={circle, draw},
circle vsplit/.style={
inner sep=+0pt,
label={[anchor=base west,inner sep=+0pt,name=\tikzlastnode-r,
xshift=\pgfkeysvalueof{/tikz/circle vsplit distance}]base east:{#1}},
append after command={
node[fit=(\tikzlastnode)(\tikzlastnode-r),name=\tikzlastnode-c,
circle vsplit fit, path picture={
\draw ([xshift={(\pgfkeysvalueof{/tikz/circle vsplit distance})/2}]%
\tikzlastnode.east) {coordinate (@)} % {} for \tikzlastnode
(\tikzlastnode-c.north-|@) -- (\tikzlastnode-c.south-|@);}]{}}}
]
\node[circle vsplit=$f_1$] (f1) {$f'_1(x)$};
\path[circle vsplit distance=3mm+.6666em,
circle vsplit fit/.append style={inner sep=.6666em}]
node[circle vsplit=$f_2$] (f2) at (2,0) {$f'_2(x)$};
\end{tikzpicture}
\end{document}