有没有一种简单的方法可以用 tikz 绘制不连续符号?
它是下图中 y 轴上显示的符号(取自 pgfplots 文档)。
我总是可以手动绘制,但这并不总是那么容易,尤其是当线条有角度时。我尝试用一种风格来做,但我搞不懂。
最佳情况下,我只想指定线段的起点和终点,并且符号应绘制在中心。
更新
Jake 的解决方案很不错,但填充效果不佳。有没有办法在填充继续工作的同时绘制符号?
Leo Liu 的答案适用于填充,但每次使用时都必须调整参数。
答案1
这是一个使用该decorations
库并声明新装饰的解决方案,该装饰本质上是路径第一段中间的discontinuity
一个装饰。不连续符号的长度和幅度使用标准装饰选项和来控制。zigzag
segment length
amplitude
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\begin{document}
\pgfdeclaredecoration{discontinuity}{start}{
\state{start}[width=0.5\pgfdecoratedinputsegmentremainingdistance-0.5\pgfdecorationsegmentlength,next state=up from center]
{}
\state{up from center}[width=+.5\pgfdecorationsegmentlength, next state=big down]
{
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{\pgfdecorationsegmentamplitude}}
}
\state{big down}[next state=center finish]
{
\pgfpathlineto{\pgfqpoint{.25\pgfdecorationsegmentlength}{-\pgfdecorationsegmentamplitude}}
}
\state{center finish}[width=0.5\pgfdecoratedinputsegmentremainingdistance, next state=do nothing]{
\pgfpathlineto{\pgfpointorigin}
\pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
}
\state{do nothing}[width=\pgfdecorationsegmentlength,next state=do nothing]{
\pgfpathlineto{\pgfpointdecoratedinputsegmentlast}
}
\state{final}
{
\pgfpathlineto{\pgfpointdecoratedpathlast}
}
}
\begin{tikzpicture}
\draw [fill=yellow,decoration={discontinuity,amplitude=1ex},decorate](0,0) -- (3,2) -- (5,1) -- cycle;
\end{tikzpicture}
\end{document}
答案2
pgfplots
轴上有不连续装饰。请参阅手册中的“4.8.11 轴不连续”。
手册中的示例:
% \usepackage{pgfplots}
\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=center,
tick align=outside,
axis y discontinuity=crunch,
ymin=95, enlargelimits=false
]
\addplot[blue,mark=none,
domain=-4:4,samples=20]
{x*x+x+104};
\end{axis}
\end{tikzpicture}
它是使用锯齿形装饰实现的。然后你可以自己绘制它,例如(这不是一个好的实现):
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\tikzset{discont/.style={decoration={zigzag,segment length=12pt, amplitude=4pt},decorate}}
\def\discontarrow(#1)(#2)(#3)(#4);{
\draw[discont] (#2) -- (#3);
\draw[->] (#1) -- (#2) (#3) -- (#4);
}
\begin{document}
\begin{tikzpicture}
\discontarrow(0,0)(1,0)(1.5,0)(4,0);
\end{tikzpicture}
\end{document}
答案3
\documentclass{minimal}
\usepackage{pst-coil}
\begin{document}
\begin{pspicture}(4,2)
\pszigzag[coilarm=1.5cm](0,0)(4,2)
\end{pspicture}
\end{document}