代码

代码

在此处输入图片描述

我想知道是否有可能在 Tikz 中快速创建类似的东西。特别是,我关心的是制作具有以下属性的锯齿线:

  • 每颗星星都位于清晰可辨的水平“层面”上
  • 每颗星都恰好之间顶部的两个字符(alpha 和 beta)

如果将之字形线与右侧的树对齐,那也是一种加分项!

提前致谢!

答案1

这幅图有两个问题。首先是锯齿线,其次是顶部公式有特殊的对齐要求。

以下代码为这些问题提供了解决方案。有一个简短的解释:

  1. 首先,将每个星号的每个位置定义为命名坐标,名称为n0n1n2等等,但尚未绘制任何内容。这些名称可用于稍后注释图形或添加更多辅助线。它们的位置由字符串1和指定-1,这指的是相对于前一个位置的垂直位置。

  2. 锯齿线穿过序列(n0)--(n1)--(n2)--

  3. n\i在一些/对之间画了一些辅助水平线n\j

  4. 星星。\i在 0..19 中每 处都画一颗星(n\i)

  5. 最后,这也是语法变得丑陋的地方,公式绘制在顶部。为了绘制公式,我将其分成“片段”,以便每个片段都绘制在 0.5 的倍数的坐标处。

    例如,第一个片段是\beta,它绘制在 x=0.5 处,即n0和之间的中点n1。第二个片段是左括号 ( \bigg[),它绘制在 x=1 处,即 的垂直位置n1。第三个片段是,它绘制在 x=1.5 处,即和a的中间位置,依此类推。n1n2

    这些片段是手动指定的,用逗号分隔。

这是代码:

\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);

在此处输入图片描述

相关内容