我想使用 tikz*
和o
箭头来指示分段函数图中的包含/排除端点,例如以下示例:
然而,似乎tikz
总是将箭头的“尖端”与线的末端对齐,这样代码
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
\draw[help lines] (-.1,-.1) grid (2.1,2.1);
\draw[thick,-*] (0,1.5) -- (1,.5);
\draw[thick,o-] (1,1.5) -- (2,.5);
\end{tikzpicture}
\end{document}
生产
我希望圆圈在网格线上垂直对齐。
是否有一个参数或代码可以修改以获得所需的行为?
答案1
shorten <
和选项shorten >
分别允许您从线的起点和终点缩短箭头长度。它还接受负值,然后将箭头向前延伸:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}[shorten >=-3pt,shorten <=-3pt]
\draw[help lines] (-.1,-.1) grid[step=.5] (2.1,2.1);
\draw[thick,-*] (0,1.5) -- (1,.5);
\draw[thick,o-] (1,1.5) -- (2,.5);
\end{tikzpicture}
\end{document}
这3pt
只是一个猜测,但似乎是这个箭头的正确值。
结果:
答案2
如果您想避免猜测shorten <
键的值,您可以定义新的箭头,将圆圈精确地放置在指定的坐标处:
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgflibrary{arrows}
\makeatletter
\pgfarrowsdeclare{center*}{center*}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfarrowsrightextend{4.5\pgfutil@tempdima}
}
{
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfsetdash{}{+0pt}
\pgfpathcircle{\pgfqpoint{4.5\pgfutil@tempdima}{0bp}}{4.5\pgfutil@tempdima}
\pgfusepathqfillstroke
}
\pgfarrowsdeclare{centero}{centero}
{
\pgfarrowsleftextend{+-.5\pgflinewidth}
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfarrowsrightextend{4.5\pgfutil@tempdima}
}
{
\pgfutil@tempdima=0.4pt%
\advance\pgfutil@tempdima by.2\pgflinewidth%
\pgfsetdash{}{+0pt}
\pgfpathcircle{\pgfqpoint{4.5\pgfutil@tempdima}{0bp}}{4.5\pgfutil@tempdima}
\pgfusepathqstroke
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw[help lines] (-.1,-.1) grid (2.1,2.1);
\draw[thick,-center*] (0,1.5) -- (1,.5);
\draw[thin,centero-] (1,1.5) -- (2,.5);
\end{tikzpicture}
\end{document}
答案3
使用较新的arrows.meta
库,可以通过将设置sep
为箭头长度一半的负数来实现。由于长度的默认值箭头的 Circle
尖端是
length = +2.39365pt +3.191538
我们将使用
Circle[sep=-1.196825pt -1.595769]
代码
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
*/.tip={Circle[sep=-1.196825pt -1.595769]},
o/.tip={Circle[sep=-1.196825pt -1.595769, open]},
]
\draw[help lines] (-.1,-.1) grid (2.1,2.1);
\draw[thick, -*] (0,1.5) -- (1,.5);
\draw[thick, o-] (1,1.5) -- (2,.5);
\end{tikzpicture}
\end{document}