如何使用 Tikz 绘制带有旋转的内联符号列表?

如何使用 Tikz 绘制带有旋转的内联符号列表?

假设我有以下符号字符串列表:{a,b,+,9,3}

有没有办法打印此列表的每个元素,并且可能 -编辑1: 控制每个符号之间的空间和- 改变某些属性(例如旋转角度或颜色阴影)并且使用所有这些picdecoration如果可能的话?

因此,使用这种代码(12):

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,positioning}

\tikzset{%
symbols/.pic={% https://tex.stackexchange.com/a/350347/262081
    \node{a,b,+,9,3};% Not working !!!!!!!!!!!!!!!!!!!
},%
    inlinesymbols/.style={%
        decoration={%
            markings,%
            mark =%
                between positions 0 and 1 step 5mm % adjust step size here
                with {{\pgfmathsetmacro{\myangle}{360*rnd}%
                      \pic[rotate=\myangle] {symbols};}% https://tex.stackexchange.com/a/576704/262081
                    }%
        },%
        postaction={decorate}%
    },%
}%

\begin{document}
\begin{tikzpicture} 
\path[inlinesymbols] (0,0) -- (2,0);%
\end{tikzpicture}
\end{document}

我想获得这样的东西:

在此处输入图片描述

例如,将每个符号之间的水平间距设置为decoration mark step(在上面的例子中设置为 5mm)或其他值。

如果无法使用 Tikzdecoration甚至pic我还知道其他方法,但如果可能的话,可以更改一些参数(如旋转角度)。

编辑2:我为什么想要这个?

我希望能够内联(水平)绘制一个符号列表,而不管此列表中元素的数量是多少,并能够控制每个符号之间的空间和为所有符号设置的某些属性(例如旋转、阴影、颜色)(即,该属性全局应用于所有符号)。

因此,Tikz 的使用pics不是decoration强制性的,但我喜欢使用它们。

编辑4:最终工作尝试

Sandy G 的回答如下可以在 a 中使用,Pic因此在 a 中decoration

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}

\newcommand{\hsp}{.5}

\tikzset{symbols/.pic={%
    \foreach \s[count=\n from 0] in {a,b,c,f}{%
    \pgfmathsetmacro{\myangle}{360*rnd}%
    \node[anchor=base, inner sep=0pt, outer sep=0pt, rotate=\myangle] at (\hsp*\n,0){\s};%
}},%
    inlinesymbols/.style={%
        decoration={%
            markings,%
            mark =%
                between positions 0 and 1 step 30mm % adjust step size here
                with {\pic[red] {symbols};}%
        },%
        postaction={decorate}%
    },%
}%

\begin{document}
\begin{tikzpicture}%[baseline]
\pic[red] {symbols};%
\path[inlinesymbols] (0,-1) -- (4,-1);%
\end{tikzpicture}
\end{document}

在此处输入图片描述

这允许重复该模式,并且 - 就像 Sandy G 的方法一样 - 将属性单独设置为一个符号(如上例中的旋转角度)和全局设置(例如中的红色)。

编辑 3:第一次尝试

我尝试使用listoftitems包来将逗号分隔的列表和循环滑到列表元素下(与上面的 M(Non)WE 相比,新的代码行封装在标签:% < Begin NEW >和 之间% < End NEW >)。

\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.markings,positioning}
\usepackage{listofitems}

\def\mysymbollist{a,b,+,9,3}

\tikzset{%
% < Begin NEW >
\setsepchar{,}%
\readlist\mylist\mysymbollist
\foreachitem\x\in\mylist{%
\def\mymacroname{symbols\xcnt}%
\mymacroname/.pic={%
    \node{\x};%
},}%
% < End NEW >
    inlinesymbols/.style={%
        decoration={%
            markings,%
            mark =%
                between positions 0 and 1 step 20mm % adjust step size here
                with {% < Begin NEW >
                     {\foreachitem\x\in\mylist{%
                     \def\mypicname{symbols\xcnt}%
                     \pgfmathsetmacro{\myangle}{360*rnd}%
                      \pic[rotate=\myangle] {\mypicname};}%
                      }%
                      % < End NEW >
                    }%
        },%
        postaction={decorate}%
    },%
}%

\begin{document}
\begin{tikzpicture} 
\path[inlinesymbols] (0,0) -- (2,0);%
\end{tikzpicture}
\end{document}

但我收到一个错误:

不完整 \iffalse;第 32 行后的所有文本都被忽略。

并且两个符号打印之间的间距不受控制。

有什么想法可以修复错误并控制符号打印之间的空间?

M(Non)WE 灵感来源:

答案1

不确定这是否正是您所寻找的,但这是一个简单的解决方案。

在此处输入图片描述

呼叫是\symlist[<options>]{a,b,+,9,3}

<options>可以是 tikz 节点识别的任何属性。间距通过设置\hsp(单位 = cm)进行全局控制。

以下是代码:

\documentclass{article}

\usepackage{tikz}

\newcommand{\hsp}{.5}

\newcommand{\symlist}[2][]{\begin{tikzpicture}[baseline]
\foreach \s[count=\n] in {#2}{\node[anchor=base, inner sep=0pt, outer sep=0pt, #1] at (\hsp*\n,0){\s};
}\end{tikzpicture}}

\begin{document}

Here is a symbol list \symlist{a,b,+,9,3} inline.

Here is a symbol list \symlist[red, rotate=30]{a,b,+,9,3} inline.

Here is a symbol list \symlist[blue, xscale=-.7]{a,b,+,9,3} inline.

\end{document}

答案2

我不确定我是否理解了这个问题...

    \documentclass{article}
    \usepackage{tikz}
    \begin{document}
    \begin{tikzpicture}[text height=2ex, text depth=0.5ex]
        \node at (0,0) [rotate=0]{a};
        \node at (0.5,0)[red,rotate=30]{b};
        \node at (1,0)[rotate=0]{$+$};
        \node at (1.5,0)[blue,rotate=-30]{$9$};
        \node at (2,0)[green,rotate=45]{$3$};
    \end{tikzpicture}
    \end{document}

在此处输入图片描述

相关内容