我想知道是否有可能在 Tikz 中快速创建类似的东西。特别是,我关心的是制作具有以下属性的锯齿线:
- 每颗星星都位于清晰可辨的水平“层面”上
- 每颗星都恰好之间顶部的两个字符(alpha 和 beta)
如果将之字形线与右侧的树对齐,那也是一种加分项!
提前致谢!
答案1
这幅图有两个问题。首先是锯齿线,其次是顶部公式有特殊的对齐要求。
以下代码为这些问题提供了解决方案。有一个简短的解释:
首先,将每个星号的每个位置定义为命名坐标,名称为
n0
、n1
、n2
等等,但尚未绘制任何内容。这些名称可用于稍后注释图形或添加更多辅助线。它们的位置由字符串1
和指定-1
,这指的是相对于前一个位置的垂直位置。锯齿线穿过序列
(n0)--(n1)--(n2)--
等n\i
在一些/对之间画了一些辅助水平线n\j
。星星。
\i
在 0..19 中每 处都画一颗星(n\i)
。最后,这也是语法变得丑陋的地方,公式绘制在顶部。为了绘制公式,我将其分成“片段”,以便每个片段都绘制在 0.5 的倍数的坐标处。
例如,第一个片段是
\beta
,它绘制在 x=0.5 处,即n0
和之间的中点n1
。第二个片段是左括号 (\bigg[
),它绘制在 x=1 处,即 的垂直位置n1
。第三个片段是,它绘制在 x=1.5 处,即和a
的中间位置,依此类推。n1
n2
这些片段是手动指定的,用逗号分隔。
这是代码:
\documentclass{article}
\usepackage{tikz}
\usepackage{inputenc}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}
\tikzset{
star/.style = {
fill=white, circle,
inner sep=0pt,
}
}
\begin{document}
\begin{tikzpicture}[x=6mm, y=6mm]
% 1. define n0, n1, n2, ... n19
\coordinate (n0) at (0,0);
\coordinate (prev) at (n0);
\foreach [count=\i] \d in {1,-1,-1,-1,1,-1,-1,-1,1,1,-1,-1,1,1,1,1,-1,1,1} {
\coordinate (n\i) at ($(prev)+(1,\d)$);
\coordinate (prev) at (n\i);
};
% 2. Draw zig-zag
\draw[thick] (n0) \foreach \n in {1,...,19} { -- (n\n) } ;
% 3. Draw some horizontal lines
\foreach \a/\b in {2/18,3/15,6/14,7/9,11/13} {
\draw[thin, gray, dashed] (n\a) -- (n\b);
};
% 4. Draw stars
\foreach \n in {0,...,19} {
\node[star] at (n\n) {$\star$};
};
% 5. Draw formula
\def\L{(} % Parenthesis cannot be used as part of \foreach
\def\R{)} % so I had to define here a macro for them
\foreach [count=\i] \txt in {\beta,\bigg[,
a,\Big(,a,\L,a,,\beta,\R\big(,
a,\L,a,,a,,\beta,,\beta,\R\L,
a,,a,,\beta,,\beta,\R,\beta,\big),
\beta,\Big)\L,a,,\beta,\R,\beta,\bigg]
} {
\node at (0.5*\i,2) {$\txt$};
};
\end{tikzpicture}
\end{document}
结果如下:
答案2
您至少需要知道曲折的峰值坐标。
由于锯齿线的角度和层次分离度相同,因此绘制带有星星的锯齿线的一种简单方法是使用装饰。
代码
\documentclass[border=10pt,tikz]{standalone}
\usetikzlibrary{decorations.shapes,shapes}
\begin{document}
\begin{tikzpicture}[x=1cm, y=1.25cm]
\draw[thick,postaction={draw,decorate,decoration={shape backgrounds,shape=star,shape size=2mm,%
shape sep={1.6cm, between center}},fill=black, shape border rotate=20}]%
(0,0) -- (1,1) -- (4,-2) -- (5,-1) -- (8,-4) -- (10,-2) -- (12,-4) -- (16,0) -- (17,-1) -- (19.05,1.05);
\end{tikzpicture}
\end{document}
结果
请注意,星星试图跟随线的斜率,因此它们会旋转。我不知道如何不旋转星星(不知道你是否可以做到这一点),也许使用其他形状会更有用。
我认为手动绘图并不困难或烦人。;)
更新
仅供一般知识!:)
我不知道防止星星的斜坡旋转很容易,还可以改善星星的形状,并shape sloped=false
进行设置star point height
。
\draw[thick,postaction={draw,decorate,decoration={shape backgrounds,shape=star,shape size=2mm,%
shape sep={1.6cm, between center},shape sloped=false},fill=black,star point height=30mm}]%
(0,0) -- (1,1) -- (4,-2) -- (5,-1) -- (8,-4) -- (10,-2) -- (12,-4) -- (16,0) -- (17,-1) -- (19.05,1.05);