我想将 TikZ 文本节点旋转一定角度,具体角度取决于内容长度。因此,包含 20 个字符的文本节点应旋转 20*0.1 = 2 度,包含 100 个字符的文本节点应旋转 100*0.1 = 10 度。空格是否影响此操作并不重要。
是否有可能以某种方式自动完成这一操作,还是我需要手动计算字母数量?
答案1
这是一个近似值。首先,计算平均字符宽度,然后创建一个新命令来添加将旋转设置为的节点<length of node text>/<average character length> * 0.1
。
\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\pgfmathsetmacro\characterlength{width("abcdefghijklmnopqrstuwxyz")/26}
\newcommand{\rotatenode}[3][]{\node [rotate=width("{#3}")/\characterlength*0.1,#1] at (#2) {#3};}
\begin{document}
\begin{tikzpicture}
\rotatenode[draw]{0,1}{abcdefghijklmnopqsrt}
\rotatenode[draw,red]{0,2}{abcdefghijklmnopqsrtabcdefghijklmnopqsrtabcdefghijklmnopqsrtabcdefghijklmnopqsrtabcdefghijklmnopqsrt}
\end{tikzpicture}
\end{document}
答案2
有了lualatex,只需要一点lua代码就可以了。
%!TeX program = lualatex
\documentclass{ctexart}
\usepackage{tikz}
\usepackage{xparse}
\NewDocumentCommand\rnode{O{(0,0)} o m}
{
\IfNoValueTF{#2}
{\node at #1 [rotate=\directlua{tex.sprint(string.len("#3"))}] {#3};}
{\node at #1 [rotate=\directlua{tex.sprint(string.len("#3"))}, #2] {#3};}
}
\begin{tikzpicture}
\rnode{hello world!!!!!!!!!!!!!!!!}
\rnode[(5,5)][draw, fill=gray!30]{哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈}
\end{tikzpicture}
\end{document}