使用 tikz 和 tipa 包

使用 tikz 和 tipa 包

我在文档类中使用了包tipa和。但是,在绘制箭头时,我很难将它们组合起来。请查看下面的 MWE:tikzbeamer

\documentclass{beamer}

\usepackage{tipa}
\usepackage{tikz} % if i remove package from preamble i get error message


\begin{document}
    
    \tikzstyle{every picture}+=[remember picture]
    \tikzstyle{na} = [shape=rectangle,inner sep=0pt,text depth=0pt]
    
    \begin{frame}

        \centering
        
        Text [ t ] more text [ \textsubbridge{t} ]
        
        \vspace{2em}
        
        symbol 1 and symbol 2
    
    \end{frame}
    
    \begin{frame}

        \centering
        
        Text [ \tikz\node[na](t1){t}; ] more text [ \tikz\node[na](t2){\textsubbridge{t}}; ]
        
        \vspace{2em}
        
        \tikz\node[na](n1){symbol 1}; and \tikz\node[na](n2){symbol 2};
        
        \begin{tikzpicture}[overlay]
            \path[->,red,thick](n1) edge (t1);
            \path[->,red,thick](n2) edge (t2);
        \end{tikzpicture}
        
    \end{frame}
\end{document}

无箭头的滑动:

在此处输入图片描述

带箭头滑动:

在此处输入图片描述

如您所见,当我添加箭头时,它会遮挡符号的一部分,而这部分是符号的重要部分。我该如何降低箭头的高度,使其不遮挡第二个符号的任何部分?

PS:我知道 beamer 会自动加载tikz包。但是,对于这个 MWE,如果我不手动加载它,我就会一直收到错误。我相信这与 的定义有关tikzstyle{na},但如果我错了,请随时纠正我。

答案1

  • 该类beamer不会tikz自动加载,这解释了为什么必须加载它。

  • \tikzstyle已被弃用,取而代之的是\tikzset

  • 您的问题是由 引起的text depth=0pt。您可能这样做是为了将字符与基线对齐,但这可以使用选项来实现baseline

  • 要使文本元素成为箭头的源或目标,可以使用\tikznode所述命令这里。它大致对应于您的\tikz\node[na](去除上述问题)。

  • 为了使箭和目标之间保持一定的距离,您可以使用选项shorten <=1pt,shorten >=1pt

  • 您可能更喜欢其他箭头,例如\tikzset{>=stealth}

在此处输入图片描述

\documentclass{beamer}
\usepackage{tipa}
\usepackage{tikz}
\newcommand\tikznode[3][]%
   {\tikz[remember picture,baseline=(#2.base)]
      \node[minimum size=0pt,inner sep=0pt,#1](#2){#3};%
   }
\tikzset{%
   every picture/.append style={remember picture},
   >=stealth  
}
\begin{document}
\begin{frame}
\centering
Text [ \tikznode{t1}{t} ] more text [ \tikznode{t2}{\textsubbridge{t}} ]
\vspace{2em}
        
\tikznode{n1}{symbol 1} and \tikznode{n2}{symbol 2}
        
\begin{tikzpicture}[overlay,shorten >=1pt,shorten <=1pt]
   \path[->,red,thick](n1) edge (t1);
   \path[->,red,thick](n2) edge (t2);
\end{tikzpicture}
\end{frame}
\end{document}

答案2

需要注意的是tikzmark库有一个命令\tikzmarknode可以替换你的命令\tikz\node...;,可以自动处理不同的数学模式以及 TikZ 和 babel 包之间的冲突,仅举两个例子。

此外,尽管箭头是在 tikzpicture 中排版的,并且已overlay设置选项,但它们仍然会引入一个调整间距的 TeX 框。通过%在合理的位置引入几个 s,可以将该框放置在不会影响间距的位置(而不会使源代码无法阅读)。

\documentclass{beamer}
%\url{https://tex.stackexchange.com/q/630413/86}
\usepackage{tipa}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}
    
    \begin{frame}

        \centering
        
        Text [ t ] more text [ \textsubbridge{t} ]
        
        \vspace{2em}
        
        symbol 1 and symbol 2
    
    \end{frame}
    
    \begin{frame}

        \centering
        
        Text [ \tikzmarknode{t1}{t} ] more text [ \tikzmarknode{t2}{\textsubbridge{t}} ]
        
        \vspace{2em}
        
        \tikzmarknode{n1}{symbol 1} and \tikzmarknode{n2}{symbol 2}%
        % <- here and on previous line to avoid the arrows adding space
        \begin{tikzpicture}[remember picture, overlay]
            \path[->,red,thick](n1) edge (t1);
            \path[->,red,thick](n2) edge (t2);
        \end{tikzpicture}
        
    \end{frame}
\end{document}

相关内容