假设我有以下符号字符串列表:{a,b,+,9,3}
。
有没有办法打印此列表的每个元素,并且可能 -编辑1: 控制每个符号之间的空间和- 改变某些属性(例如旋转角度或颜色阴影)并且使用所有这些pic
,decoration
如果可能的话?
\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)Tikz内联装饰:pschulz 的回答
- (2)旋转角度的图片:克里斯托弗·弗林斯
答案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}