我试图使用如下图所示的图形来说明 rot13 的工作原理。如您所见,我试图绘制两个文本弧,一个外部弧显示字符列表,一个内部弧显示其 ASCII 字符编号。我的问题是让两个弧对齐。我摆弄了移位和字体大小(使用固定宽度字体),但无法得到令我满意的结果。有没有更简洁的方法来对齐这两个弧中的文本?以下是生成示例的代码:
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\usepackage{fix-cm}
\begin{document}
\begin{tikzpicture}
\path[decorate,decoration={text along path,
text={|\fontsize{53pt}{73pt}\selectfont\tt|abcdefghijklmnopqrstuvwxyz},text align=center}]
(4,0) arc [start angle=265,end angle=-85,radius=4];
\path[decorate,decoration={text along path,
text={|\fontsize{10pt}{30pt}\selectfont\tt|97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122},text align=center}]
(4,6ex) arc [start angle=265,end angle=-85,radius=4cm-6ex];
\draw[-latex,blue]
(4cm,0.8ex) arc [start angle=265,end angle=-85,radius=4cm-0.8ex];
\end{tikzpicture}
\end{document}
答案1
也许您可以使用极坐标手动定位每个字符/数字。
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{lmodern}
\begin{document}
\begin{tikzpicture}
\foreach [count=\i from 97,evaluate=\i as \Ang using 270-(\i-97)*360/26.5] \letter in {a,...,z}
{
\node [anchor=base,font=\fontsize{53pt}{60pt}\ttfamily,rotate=\Ang-90] (l\i) at (\Ang:4.5cm) {\letter};
\node [anchor=base,font=\ttfamily,rotate=\Ang-90] (n\i) at (\Ang:3.6cm) {\i};
}
\draw[-latex,blue] ([yshift=3pt]l97.base) arc [start angle=270,end angle=-75,radius=4.5cm-3pt];
\end{tikzpicture}
\end{document}