垂直文本对齐

垂直文本对齐

我正在创建一个 tikzposter(使用 Xelatex),我希望在其中排列多个文本节点,以便文本自动垂直定位,例如

R
i
c
h
a
r
d

我找到了许多建议,但它们导致文本旋转。

我发现最接近的方法是使用 parbox 并在每个字母之间添加空格

\draw(270mm,158mm) node {\parbox{3pt}{R i c h a r d}};

但是,由于目的是自动从名称输入文件中绘制节点,因此我宁愿避免这种情况。有人能建议更好的方法吗?

答案1

我在调整宽度。你可以使用 0pt,但结果框的宽度也是零。所以我用了 1em,并在每个字母后强制换行。我还将字母置于框的中央。

\documentclass{article}
\usepackage{tikz}

\newcommand{\splitter}[1]{\splitterparse#1\END}
\def\splitterparse#1{\ifx\END#1
    \strut\vspace{-\baselineskip}%
  \else
    \null\hfil#1\newline
    \expandafter\splitterparse
  \fi}
\def\END{\END}% do not expand!  (Any unique string will do.)

\begin{document}
\tikz{\node[draw, inner sep=0pt]{\parbox{1em}{\splitter{Richard}}}}
\end{document}

答案2

事实上,你可以定义自己的宏来在字母之间添加空格。例如,这样:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{tikz}

\newcommand{\vpar}[1]{\parbox{3pt}{\makevpar#1\relax}}
\newcommand{\makevpar}[1]{\ifstrequal{#1}{\relax}{}{#1 \makevpar}}

\begin{document}
\begin{tikzpicture}
  \draw(270mm,158mm) node {\vpar{Richard}};
  \draw(280mm,158mm) node {\vpar{Steven}};
  \draw(290mm,158mm) node {\vpar{Arnold}};
  \draw(300mm,158mm) node {\vpar{Micka{\"e}l}};
\end{tikzpicture}
\end{document}

结果是

在此处输入图片描述

答案3

每次吸收一个字母并制作表格。可​​选参数用于根据上下文进行垂直对齐。

\documentclass{article}

\makeatletter
\newcommand{\verticaltext}[2][c]{%
  \if\relax\detokenize{#2}\relax\else
    \vertical@text{#1}#2\@nil
  \fi
}
\def\vertical@text#1#2#3\@nil{%
  \toks@={#2}%
  \@tfor\next:=#3\do{%
    \toks@=\expandafter{\the\expandafter\toks@\expandafter\\\next}%
  }%
  \begin{tabular}[#1]{@{}c@{}}\the\toks@\end{tabular}%
}
\makeatother

\begin{document}

X \verticaltext{Richard} X \verticaltext[t]{Richard} X \verticaltext[b]{Richard}

\end{document}

在此处输入图片描述

请注意,重音字符应该用括号括起来:

\verticaltext{H{\'e}l{\`e}ne}

但是如果您输入,XeLaTeX 就不需要这样做Hélène

更短的实现如下expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\verticaltext}{O{c}m}
 {
  \seq_set_split:Nnn \l_tmpa_seq { } { #2 }
  \begin{tabular}[#1]{@{}c@{}}
  \seq_use:Nn \l_tmpa_seq { \\ }
  \end{tabular}
 }
\ExplSyntaxOff

\begin{document}

X \verticaltext{Richard} X \verticaltext[t]{Richard} X \verticaltext[b]{Richard}

\end{document}

相关内容