我需要制作一张桌子,其中的行由同心圆组成。也就是说,第 1 行形成最内圈;第 2 行形成第二个圈;第 3 行形成第三个圈,依此类推。因此,列将形成在圆圈中心相交的披萨片。
我试图根据下图重新创建一系列表格(值得一提的是,该表格来自 1626 年在中国出版的耶稣会作品)。同一个字母的五个实例(“a”、“e”、“i”等)都位于同一列但不同的行上。
如果可以的话,我会提供一些基本的 MWE,但我不知道从哪里开始。如果能得到任何帮助,我将不胜感激。谢谢!
答案1
我不确定这是否能回答“如何更改每行的字母列表”或者不是,但是:
这是外行与内行不同的图表。我使用循环\foreach
“同时”迭代两个变量\romanized
和\outer
。(您可以轻松地将其扩展到两个以上的变量。)代码基本上是从前两个答案中窃取的。
\documentclass[varwidth,border=1em]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.text}
\begin{document}
\begin{tikzpicture}
\node at (90:5.5) {\Large 萬國音韻話圖};
\def\ct{30}
\def\halfring{ʿ}
\foreach \romanized/\outer [count=\i] in {
% No guarantees that the Chinese characters are correct
a/丫, e/額, i/衣, o/阿, u/午, ç/則, \halfring ç/測, ch/者, \halfring ch/搐,
k/格, \halfring k/克, p/克, \halfring p/魄, t/德, \halfring t/忒, j/日, v/物,
f/弗, g/額, l/勒, m/麥, n/搦, s/色, x/石, h/黑, b/〇, d/〇, r/〇, z/〇,
} {
\pgfmathsetmacro{\angle}{90-360/\ct*\i}
\draw (\angle-360/\ct/2:1.5) -- (\angle-360/\ct/2:4.5);
\node[rotate=-90+\angle] at (\angle:4.25) {\outer};
\foreach \r in {1,...,5} {
\pgfmathsetmacro{\radius}{1.25+\r*0.5}
\node[rotate=-90+\angle,text depth=0,text height=1ex] at (\angle:\radius)
{\sffamily\itshape\romanized};
}
}
\foreach \r in {1,...,8,8.1} { \draw (0,0) circle(0.5+\r*0.5); }
\foreach \inner [count=\i] in {次淸甚,次濁甚,次上甚,次去甚,次入甚} {
\pgfmathsetmacro{\angle}{90-360/5*\i-360/\ct/2}
\draw (\angle:1) -- (\angle:1.5);
\draw[decorate, decoration={reverse path, text align=center,
text along path, text={\inner}}] (\angle:1.125) arc (\angle:\angle+360/5:1.125);
};
\end{tikzpicture}
\end{document}
答案2
初始点:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{calc}
\begin{tikzpicture}
\foreach \letter [count=\i] in {q,w,e,r,t,y,u,i,o,p,a,s,d,f,g,h,j,k,l,z,x,c,v,b, → n,m} {
\pgfmathsetmacro{\angle}{-360/26*\i}
\draw (\angle-360/26/2:1.25) -- (\angle-360/26/2:4.75);
\foreach \r in {1,...,7} {
\pgfmathsetmacro{\radius}{1+\r*0.5}
\node[rotate=-90+\angle] at (\angle:\radius) {\letter};
}
}
\foreach \r in {1,...,8} {
\draw (0,0) circle(0.75+\r*0.5);
}
\end{tikzpicture}
\end{document}
答案3
\curvedtext
另一种尝试是,通过采用 4 个参数 #1=角度、#2=半径、#3=颜色、#4=内容,将文本写入其中。此解决方案使用foreach
循环来绘制圆和射线。
\foreach \rr in {5,10,...,25}{ % radius can be adjusted for one's selection.
\draw (A) circle (\rr);
}
\foreach \aa in {1,...,\pp}{
\draw ($(A)+({\aa*360/\pp}:10)$) -- ($(A)+({\aa*360/\pp}:25)$);
}
要绘制射线,需要提供\pp
切片数。此示例有 20 个切片。因此每个切片为 18 度。有了这些信息,就可以确定要放置文本的每个插槽的位置(极坐标)。
代码
\documentclass[border=10pt]{standalone}%{article}
%\usepackage[papers=30cm,paperwidth=35cm,margin=1in,heightrounded]{geometry}
\usepackage{tikz}
\usetikzlibrary{calc,decorations.text}
\usetikzlibrary{calc}
\def\curvedtext#1#2#3#4{%
\path[decorate, decoration={text along path, text align=center, text={|\color{#3}\small|#4}}]
($(A)+(#1+20:#2)$) arc (#1+20:#1-20:#2);
} % borrowed from http://tex.stackexchange.com/a/177455/34618
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}[scale=0.2]
% center
\path (0,0) coordinate(A);
% circles
\foreach \rr in {5,10,...,25}{
\draw (A) circle (\rr);
}
\def\pp{20} % nb of slices
% rays
\foreach \aa in {1,...,\pp}{
\draw ($(A)+({\aa*360/\pp}:10)$) -- ($(A)+({\aa*360/\pp}:25)$);
}
\curvedtext{45}{22}{blue}{ABC};
\curvedtext{27}{22}{blue}{DEF};
\curvedtext{9}{22}{blue}{HIJ};
\curvedtext{25}{17}{red}{B};
\curvedtext{7}{12}{green!60!black}{C};
\path[draw,decorate, decoration={text along path, text align=center, text={A very long sentence around the circular path and...}}] (0,0) circle (8);
\end{tikzpicture}
\end{document}