我在 tikz 中寻找一种简单的方法,可以旋转文本,使文本中的每个字母“位于”或“堆叠”在后继字母之上。例如,“环境”一词将显示为:
E
n
v
i
r
o
n
m
e
n
t
谢谢。
答案1
通常我这样回答:“如果你不介意加载 Ti钾Z,你可以......”但这里有人可能会说:如果你不介意不使用 Ti钾您可以改用soul
Z。
\documentclass{article}
\usepackage{soul}
\makeatletter
\def\SOUL@soeverytoken{%
{\the\SOUL@token}\par\noindent}
\makeatother
\begin{document}
\noindent\so{Environment}
\end{document}
这个答案的灵感来自于这个答案。如果有人因为我引用他人的话而想(再次)给我差评,那就去吧。
钛钾Z 库decorations.text
提供了高级选项,例如
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.text}
\begin{document}
\begin{tikzpicture}[decoration={text effects along path,
text={Environment},
text effects/.cd,
path from text angle=-90,
path from text,
characters={text along path},
character widths={inner xsep=1pt},
style characters=mw with {blue,inner xsep=0.4pt},
style characters=bdfhjklt with {red,inner xsep=1.5pt},
style characters=i with {orange,inner xsep=2.2pt},
style characters=gpqy with {inner xsep=1.2pt}}]
\path [ decorate,
text effects={characters/.append={/utils/exec=\pgftransformresetnontranslations}}] (1,0); \end{tikzpicture}
\end{document}
这里\pgftransformresetnontranslations
用于“取消旋转”字符。
而且由于似乎希望使用尽可能少的软件包:所以您不需要任何软件包。
\documentclass{article}
\def\endpft{Yekitiyekitipeng}%<- something crazy
\def\rst{}
\def\pft#1#2\endpft{\ifx#2\endpft%
\else%
#1\\%
\def\rst{#2}
\pft#2\endpft%
\fi}
\newcommand{\vtext}[2][]{\begingroup\renewcommand{\arraystretch}{0.63}%
\begin{tabular}[#1]{@{}c@{}}%
\,\pft#2\endpft\rst%
\end{tabular}\endgroup}
\begin{document}
\vtext{Environment}
\end{document}
是否值得尽可能少地使用软件包是一个不同的问题。在我看来,只有当你用更少的软件包获得相同的结果时,情况才会如此。另一方面,Ti钾Z 允许您轻松地沿曲线排版文本,这是在没有软件包的情况下很难实现的。
答案2
无钛钾Z,对不起。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\stack}{O{c}m}
{
\begin{tabular}[#1]{@{}c@{}}
\tl_map_function:nN { #2 } \__tom_stack:n
\end{tabular}
}
\cs_new_protected:Nn \__tom_stack:n { #1 \\ }
\ExplSyntaxOff
\begin{document}
x\stack{Environment}\qquad x\stack[t]{Environment}\qquad x\stack[b]{Environment}
\end{document}
我们只需将参数映射到填充即可tabular
。可选参数设置参考点,就像 for 一样tabular
(x
示例中的显示参考点)。