TikZ:弯曲具有宏的文本,例如上标

TikZ:弯曲具有宏的文本,例如上标

我是 TikZ 的新用户,我开始使用该包创建 FSM。一切都很顺利,直到我遇到了命名弯曲边缘的问题。

有一个关于边缘文本的相关问题这里。但当我尝试将其应用于我的问题时,即使用它作为

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.text} 

\begin{document}

\begin{tikzpicture}

    \node (One) at (-3,0) [shape=circle,draw] {$One$};  
    \node (Two) at ( 3,0) [shape=circle,draw] {$Two$};

    \def\myshift#1{\raisebox{-2.5ex}}
    \draw [->,
           thick,
           postaction={decorate,
                       decoration={text along path,
                                   text align=center,
                                   text={|\sffamily\myshift|SUPERSCRIPT^{TEST}}
                                   }
                      }
          ] (One) to [bend right=45]  (Two);

\end{tikzpicture}

\end{document}

它不起作用。这会SUPERSCRIPT^{TEST}导致错误。我还没有找到一种方法来以这种方式使用没有上标的文本。有没有解决办法?

先感谢您。

答案1

您尝试使用 ,^这是文本模式下的数学模式命令,这就是您收到错误的原因。如果要将常规文本上标,则应使用\textsuperscript而不是。但是,在的参数^中,宏需要使用 进行保护。您还遗漏了该行。因此,以下方法有效。textdecoration{...}\end{tikzpicture}

此外,\myshift不需要原始答案中的宏;相反,您可以使用raise装饰内的键。

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.text}

\begin{document}

\begin{tikzpicture}
\node (One) at (-3,0) [shape=circle,draw] {$One$}; 
\node (Two) at (3,0) [shape=circle,draw] {$Two$};
\draw [->,thick,postaction={decorate,decoration={text along path,
       text align=center,raise=-2.5ex,
       text={|\sffamily|SUPERSCRIPT{\textsuperscript{TEST}}}}}] 
  (One) to [bend right=45]  (Two);
\end{tikzpicture}
\end{document}

代码输出

这不是一个完美的解决方案,因为您放入的材料{...}将被视为相对于路径的单个单元,如果它很长,您将得到非常不受欢迎的结果:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.text}

\begin{document}

\begin{tikzpicture}
\node (One) at (-3,0) [shape=circle,draw] {$One$}; 
\node (Two) at (3,0) [shape=circle,draw] {$Two$};
\def\myshift#1{\raisebox{-2.5ex}}
\draw [->,thick,postaction={decorate,decoration={text along path,
       text align=center,raise=-2.5ex,
       text={|\sffamily|SUPERSCRIPT{\textsuperscript{REALLY LONG TEST}}}}}] 
   (One) to [bend right=45]  (Two);
\end{tikzpicture}
\end{document}

第二个代码的输出

答案2

定义但未使用的宏\myshift给了我一个想法,即改变\textsuperscript给定文本中间的字体大小和“提升”量。我必须承认,我猜到了差异,所以这可能不是最好的答案:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{decorations.text}

\begin{document}

\begin{tikzpicture}
\node (One) at (-3,0) [shape=circle,draw] {$One$};
\node (Two) at (3,0) [shape=circle,draw] {$Two$};
\def\myshift#1{\raisebox{-2.5ex}}
\draw [->,thick,postaction={decorate,decoration={text along path,
       text align=center,raise=-2.5ex,
       text={|\sffamily|SUPERSCRIPT{\textsuperscript{REALLY LONG TEST}}}}}]
   (One) to [bend right=45]  (Two);
\end{tikzpicture}

Alternative:
\bigskip

\begin{tikzpicture}
\node (One) at (-3,0) [shape=circle,draw] {$One$};
\node (Two) at (3,0) [shape=circle,draw] {$Two$};
\def\myshift#1{\raisebox{1.5ex}}
\draw [->,thick,postaction={decorate,decoration={text along path,
       text align=center,raise=-2.5ex,
       text={|\sffamily|SUPERSCRIPT\ |\sffamily\tiny\myshift|REALLY LONG TEST}}}]
   (One) to [bend right=45]  (Two);
\end{tikzpicture}

\end{document} 

在此处输入图片描述

相关内容