如何构思一个绘制饼图五度圈的宏?

如何构思一个绘制饼图五度圈的宏?

我想重写下面提到的关于历史调音律的部分内容,因此我需要画一个五度圈,在书中用手绘的示意图来表示,如下:

图片来源:Asselin, Pierre-Yves。音乐和气质。乔伯特,1985 年。

这似乎是使用饼图的一个很好的理由。大约有 30 种音调,因此输入一组 11 个标签和值的宏会很有用。如您所见,每个音调的不同调音步骤都用箭头说明,径向线之间的角度根据音程大小而变化,并且大小变化用分数和其他数学表达式表示。请注意,上音符(通常是 C)应保持其垂直位置,并且圆周步进箭头应像图中一样向外移动。

如果有人能提供一个可行的示例或想法,我将不胜感激。虽然我尝试了很多困难,但我开始对 tikz/pgf 有了一些了解。不过,我离我想要的宏还差得很远,而且我没有包括任何 MWE,因为它们几乎不可理解。

附言:如今,平均律被广泛使用,这意味着音图由相等的 30 度角度组成,就像相等地减去 1/12 个谐音逗号一样。

答案1

\degrees[13]定义一个 13 度的圆。(r;phi)是极坐标:

\documentclass{article}
\usepackage{pst-node,multido}
\degrees[13]
\begin{document}

\begin{pspicture}(-5,-5)(5,5)
\multido{\iA=0+1,\rA=0.2+1.0,\rB=0.7+1.0}{13}{\ifnum\iA=7 \else
  \psline[linestyle=dashed](3;\rA)%
  \ifnum\iA=6 \else\rput(2;\rB){$\scriptscriptstyle-1/4$}\fi%
  \fi}%
\rput(3;7.2){\shortstack{\scriptsize(Loop)\\$\scriptscriptstyle+1\,3/4$}}
\psarcn[arrowscale=2]{|*->|}{4}{0.2}{-4.8}\rput*(4;-3){\circlenode{A}{III}}
\psarc[arrowscale=2]{|*->|*}{3.8}{0.2}{4.2}\rput*(3.8;1.7){\circlenode{A}{I}}
\psarc[arrowscale=2]{|*->|}{3.9}{4.2}{6.2}\rput*(3.9;5.5){\circlenode{A}{II}}
\bfseries\sffamily\small
\pgfforeach \Label [count=\sector] in{LA,RE,SOL,DO,FA,Si$\flat$,Mi$\flat$,,Sol$\sharp$,DO$\sharp$,FA$\sharp$,SI,MI} 
  {\rput(! 3.4 \sector\space 0.8 sub 360 13 div mul PtoC){\Label}}
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

这不是一个宏,而是一些需要启动的 TikZ 代码。

\documentclass[tikz,border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}
\newcommand{\myangle}{27.6923}
\foreach \nota/\text [count=\sector] in {Mib/Mi$\flat$,Sib/Si$\flat$,Fa/Fa,Do/Do,Sol/Sol,Re/Re,La/La, Mi/Mi,Si/Si,Fas/Fa$\sharp$,Dos/Do$\sharp$,Sols/Sol$\sharp$} 
    {
        \draw[dashed, shorten >=3mm] (0,0) -- ++({(4-\sector)*\myangle+90}:2cm) node[font=\sffamily] (\nota) {\text};
    }

\foreach \i [count=\xi] in {1,2,...,11}
    {
        \path (0,0) -- ++({(3.5-\xi)*\myangle+90}:15mm) node[font=\tiny\sffamily]  {-1/4};
    }
\path (0,0) -- ++({4*\myangle+90}:15mm) node[font=\tiny\sffamily]  {+1 3/4};


\draw[thick] (Mib)--++({90+3*\myangle}:9mm);
\draw[thick] (Fa)--++({90+\myangle}:9mm);
\draw[thick] (La)--++({90-3*\myangle}:9mm);
\draw[thick] (Sols)--++({90-8*\myangle}:9mm);

\draw[->,thick] ({90+\myangle}:26mm) arc [start angle={90+\myangle}, delta angle={2*\myangle}, radius=26mm]; 
\node[draw, circle, fill=white, font=\small] at (90+2*\myangle:26mm) {II};

\draw[->,thick] ({90-3*\myangle}:27mm) arc [start angle={90-3*\myangle}, delta angle={4*\myangle}, radius=27mm]; 
\node[draw, circle, fill=white, font=\small] at (90-\myangle:27mm) {I};

\draw[->,thick] ({90-3*\myangle}:26mm) arc [start angle={90-3*\myangle}, delta angle={-5*\myangle}, radius=26mm]; 
\node[draw, circle, fill=white, font=\small] at (90-5.5*\myangle:26mm) {III};
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容