如何根据内容旋转 TikZ 文本节点?

如何根据内容旋转 TikZ 文本节点?

我想将 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}

在此处输入图片描述

相关内容