如何在使用文本修饰时将字母稍微展开一点?

如何在使用文本修饰时将字母稍微展开一点?

默认的文字装饰字母看起来有点挤在一起:

在此处输入图片描述

gather我可以通过改变来手动制作它们

g{\kern1pt a}{\kern1pt t}{\kern1pt h}{\kern1pt e}{\kern1pt r}{}

但这很乏味和烦人。(对于较长的装饰来说更是如此)

是否有一种自动的方法可以把所有字母分开?

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows, decorations.text}
\tikzset{>=latex}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\draw[->, cyan!50!white, line width=1.5mm ] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\draw[decoration={text along path, text={|\sffamily|gather},text align={center},raise=0.2cm},decorate] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{scope}
\begin{scope}[yshift=-3cm]
\draw[->, cyan!50!white, line width=1.5mm ] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\draw[decoration={text along path, text={|\sffamily|g{\kern1pt a}{\kern1pt t}{\kern1pt h}{\kern1pt e}{\kern1pt r}{}},text align={center},raise=0.2cm},decorate] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{scope}
\end{tikzpicture}
\end{document}

答案1

text effects along path这是使用库选项的解决方案decorations.text。我增加了间隙,您可以通过更改选项来管理它character widths={inner xsep=1pt}

截屏

\documentclass[border=2mm,tikz]{standalone}

\usetikzlibrary{arrows, decorations.text}
\tikzset{>=latex}
\begin{document}
\begin{tikzpicture}[decoration={
                text effects along path,
                text={gather},
                text align=center,
                raise=0.2cm,
                text effects/.cd,
                characters={ text along path,font=\bf\sffamily},
                character widths={inner xsep=1pt}}]
\draw[->,cyan!50!white,text=black,line width=1.5mm,
preaction={decorate} ]
 (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{tikzpicture}
\end{document}

答案2

您要实现的功能称为字母间距,一种可能性是使用包microtype:它提供命令\textls[<letterspacing amount>]{<text>}\lsstyle。由于如果装饰出现在参数中,似乎无法在装饰中排版文本(或者至少我不知道如何排版),因此这里只能使用后者:

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows, decorations.text}
\tikzset{>=latex}
\usepackage{microtype}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\draw[->, cyan!50!white, line width=1.5mm ] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\draw[decoration={text along path, text={|\sffamily\lsstyle|gather},text align={center},raise=0.2cm},decorate] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{scope}
\begin{scope}[yshift=-3cm]
\draw[->, cyan!50!white, line width=1.5mm ] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\draw[decoration={text along path, text={|\sffamily|g{\kern1pt a}{\kern1pt t}{\kern1pt h}{\kern1pt e}{\kern1pt r}{}},text align={center},raise=0.2cm},decorate] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{scope}
\end{tikzpicture}
\end{document}

给出

在此处输入图片描述

可以使用包选项来修改字母间距量letterspace

\usepackage[letterspace=150]{microtype}

其中数字表示千分之一em,因此在本例中为 0.15em(默认值为 0.1em)。要本地更改字母间距量,可以定义一个新命令:

\newcommand\ltsp[1]{\expandafter\def\csname MT@letterspace@\endcsname{#1}\lsstyle}

并像这样使用它:text={|\sffamily\ltsp{400}|gather}

(请注意,字母间距microtype适用于 pdflatex 或 lualatex,但不适用于 xelatex。)

答案3

这里我创建了一个tokcycle包宏\spaceouttext{gap}{text},当调用它时,它会在名为 的包的令牌寄存器中创建所需的令牌\cytoks。因此,在 之前执行调用\draw并将其\the\cytoks作为文本参数传递。

\documentclass[border=2mm]{standalone}
\usepackage{tikz,tokcycle}
\newcommand\spaceouttext[2]{%
  \tokcycle{\addcytoks{##1{\kern#1}}}%
  {\processtoks{##1}}%
  {\addcytoks{##1}}%
  {\addcytoks{##1{\kern#1}}}{#2}}
\usetikzlibrary{arrows, decorations.text}
\tikzset{>=latex}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\spaceouttext{4pt}{gather}
\draw[->, cyan!50!white, line width=1.5mm ] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\draw[decoration={text along path, text={|\sffamily|\the\cytoks},text align={center},raise=0.2cm},decorate] (6.8cm,-1.7) -- (9.5cm,-1.7) arc (-90:0:1.5) -- (11cm,1.5);
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容