如何在 \caption 和“正常” Latex 文本环境中使用 \tikz\pic

如何在 \caption 和“正常” Latex 文本环境中使用 \tikz\pic

作为进步如何在节点的文本区域{}中使用 \pic?。如何做或避免让图片“闪电”在标题和正常的乳胶文本中起作用?

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{setspace}%offers nice setstretch
\usepackage{tikz}
\usetikzlibrary{positioning,arrows,arrows.meta,calc}

%ever last package
\usepackage{hyperref}
\hypersetup{colorlinks=true}

\begin{document}

\begin{center}
\begin{figure}[h]

\tikzset{%
pics/lightning/.style n args={3}{code={%
   \draw[arrows={-Stealth[scale=#3]}] (#1) --
      ($(#1)!.4!(#2) + (.1,-.1)$) --
      ($(#1)!.4!(#2) + (-.1,.1)$) --
      (#2);
      }},
}%end tikzset

\begin{tikzpicture}%
[%
 every node/.style={%
    inner sep=0pt},%
]%
\begin{scope}[ text height=1.0em, text depth=.25em,]

   \node (advbo)                       {\textit{Adverbiale Bestimmung}};
   \node (so)    [left =.9mm of advbo] {\textit{Substantiv}};
   \node (ao)    [left =.9mm of so]    {\textit{Artikel}};
   \node (ko)    [left =.9mm of ao]    {\textit{Komparativ}};

   \node (l)     [below= of ko]        {Lieber};
   \node (e1)    [below= of ao]        {einen};
   \node (s)     [below= of so]        {Spatz};
   \node (i)     [below= of advbo]     {in der Hand,};

   \node (a)     [below=.3mm of l]     {als};
   \node (e2)    [below=.3mm of e1]    {eine};
   \node (t)     [below=.3mm of s]     {Taube};
   \node (ad)    [below=.3mm of i]     {auf dem Dach.};

   \node (ku)    [below= of a]         {\textit{Konjunktion}};
   \node (au)    [below= of e2]        {\textit{Artikel}};
   \node (su)    [below= of t]         {\textit{Substantiv}};
   \node (advbu) [below= of ad]        {\textit{Adverbiale Bestimmung}};
\end{scope}

   \pic [red] {lightning={ko}{l}{1.2}};
   \pic [red, rotate=180]{lightning={ku}{a}{1.2}};

   \draw[->,>=stealth', very thick, red, opacity=.5] (ao)    to (e1);
   \draw[->,>=stealth', very thick, red, opacity=.5] (au)    to (e2);

   \draw[->,>=stealth', very thick, red, opacity=.5] (so)    to (s);
   \draw[->,>=stealth', very thick, red, opacity=.5] (su)    to (t);

   \draw[->,>=stealth', very thick, red, opacity=.5] (advbo) to (i);
   \draw[->,>=stealth', very thick, red, opacity=.5] (advbu) to (ad);

   \draw[xshift=2.75cm,yshift=-1.8cm]
      node[right,text width=4cm,rounded corners,fill=red!10,inner sep=1em]%information text]
      {
         Parallelismus, der nicht ganz konsequent durchgestaltet ist, denn hier
         (\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
         stimmen die Wortarten nicht "uberein.
         \smallskip

         \setstretch{0.1}

         {\tiny{Der \textit{Komparativ} entstammt der Wortart \textit{Adjektiv}, der  parallele Satzteil entstammt der Wortart \textit{Konjunktion}}}.

         \setstretch{1.0}
      };

\end{tikzpicture}
\caption{Parallelismus mit einer nicht
%uncommented raises undefinde control sequence
%(\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
passenden Wortarten-Parallelisierung}\label{paraIincomplete}
\end{figure}
\end{center}

Parallelismus mit einer nicht
%DOESNT WOK TOO, same as above
%(\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
passenden Wortarten-Parallelisierung

\end{document}

答案1

另一种选择是,不\pic使用之字形箭头,使用不同的节点定位,也不使用包setspace

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows,calc,chains,positioning}
\tikzset{zigzag/.style = {%
    to path={ -- ($(\tikztostart)!.48!-7:(\tikztotarget)$) --
                 ($(\tikztostart)!.40!+7:(\tikztotarget)$) -- (\tikztotarget)
             \tikztonodes},sharp corners}
            }
   %ever last package
    \usepackage[colorlinks=true]{hyperref}

    \begin{document}    
    \begin{figure}[h]
\begin{tikzpicture}[%
     node distance = 11mm and 0mm,
       start chain = going below,
 every node/.style = {minimum height=1em, text depth=.25em, 
                      align=center, on chain},
                    ]
% first
\node (ko)  {\textit{Komparativ}};
\node (i)   {Lieber\\ als};
\node (ku)  {\textit{Konjunktion}};
% second
\node (ao)  [right= of ko]   
            {\textit{Artikel}};
\node (s)   {einen\\eine};
\node (au)  {\textit{Artikel}};
% third
\node (so)  [right= of ao]  
            {\textit{Substantiv}};
\node (e1)  {Spatz\\Taube};
\node (su)  {\textit{Substantiv}};
% fourth
\node (advbo) [right= of so] 
                {\textit{Adverbiale Bestimmung}};
\node (l)       {in der Hand,\\auf the Dach.};
\node (advbu)   {\textit{Adverbiale Bestimmung}};
% arrows
\draw[red,thick,-stealth'] 
            (ko) edge[zigzag]  (i)
            (ku)  to [zigzag]  (i);
\draw[-stealth', very thick, red, opacity=.5]
    (ao)    edge (s)    (au)    edge    (s)     
    (so)    edge (e1)   (su)    edge    (e1)
    (advbo) edge (l)    (advbu)  to     (l);
% legend
\node[rounded corners=1em, fill=red!10,
     text width=4cm, text depth={},
     inner sep=1em, font=\scriptsize, align=justify,
     right=2mm of advbu.east |- l]%information text
  { {\normalsize
     Parallelismus, der nicht ganz konsequent durchgestaltet ist, denn hier
    (\tikz[baseline=1pt,yscale=0.5]\draw[red,-stealth'] (0,4ex) to [zigzag] (0,0);)
     stimmen die Wortarten nicht "uberein.
     }\medskip

    Der \textit{Komparativ} entstammt der Wortart \textit{Adjektiv}, der  parallele Satzteil entstammt der Wortart \textit{Konjunktion}.
  };
\end{tikzpicture}
\caption[Parallelismus mit einer nicht passenden Wortarten-Parallelisierung]
        {Parallelismus mit einer nicht
        (\tikz[baseline=1pt,yscale=0.5]\draw[red,-stealth'] (0,4ex) to [zigzag] (0,0);)        passenden Wortarten-Parallelisierung}
\label{paraIincomplete}
    \end{figure}
\end{document}

在此处输入图片描述

答案2

标题中的那个不起作用,因为它也被添加到图形列表中导致了一些问题。简单的解决方法是同时为 caption 提供可选参数,这是放置在 LoF 中的替代标题:

\caption[Parallelismus mit einer nicht passenden Wortarten-Parallelisierung]{Parallelismus mit einer nicht
%uncommented raises undefinde control sequence
(\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
passenden Wortarten-Parallelisierung}

后文中的那个不起作用,因为您已在环境(形成一个组)pic内定义了它figure,并且该定义仅在该环境中为人所知。请将移至\tikzset前言。

另请注意

  • 拥有figure环境是没有意义的里面环境centerfigure是浮动环境,因此它可能会移开并在文档中留下一些不必要的垂直空间。如果您想将 中的内容居中figure,请\centering在 之后添加\begin{figure}

  • \tiny用作\tiny small text{\tiny small text\par},而不是用作\tiny{small text}——它不是像 eg 那样接受参数的宏\textit。(它仍然基本有效,但我认为周围的括号small text没有任何用处。

    此外,无论何时将其用作{\tiny text},您都需要记住在结束括号前添加一个段落分隔符,即一个空行或{\tiny text\par}。如果不这样做,baselineskip(从一行的底部到下一行的距离)将不会改变。这就是您使用 来破解宽行距的原因\setstretch。Zarko 的答案中也存在同样的问题,\normalsize文本的 baselineskip 太小,\par在结束括号前添加 并查看它的变化。

\documentclass[]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning,arrows,arrows.meta,calc}

%ever last package
\usepackage{hyperref}
\hypersetup{colorlinks=true}
\tikzset{%
pics/lightning/.style n args={3}{code={%
   \draw[arrows={-Stealth[scale=#3]}] (#1) --
      ($(#1)!.4!(#2) + (.1,-.1)$) --
      ($(#1)!.4!(#2) + (-.1,.1)$) --
      (#2);
      }},
  redarrow/.style={->,>=stealth', very thick, red, opacity=.5}}%end tikzset
\begin{document}


\begin{figure}[h]



\begin{tikzpicture}%
[%
 every node/.style={%
    inner sep=0pt},%
]%
\begin{scope}[ text height=1.0em, text depth=.25em,]

   \node (advbo)                       {\textit{Adverbiale Bestimmung}};
   \node (so)    [left =.9mm of advbo] {\textit{Substantiv}};
   \node (ao)    [left =.9mm of so]    {\textit{Artikel}};
   \node (ko)    [left =.9mm of ao]    {\textit{Komparativ}};

   \node (l)     [below= of ko]        {Lieber};
   \node (e1)    [below= of ao]        {einen};
   \node (s)     [below= of so]        {Spatz};
   \node (i)     [below= of advbo]     {in der Hand,};

   \node (a)     [below=.3mm of l]     {als};
   \node (e2)    [below=.3mm of e1]    {eine};
   \node (t)     [below=.3mm of s]     {Taube};
   \node (ad)    [below=.3mm of i]     {auf dem Dach.};

   \node (ku)    [below= of a]         {\textit{Konjunktion}};
   \node (au)    [below= of e2]        {\textit{Artikel}};
   \node (su)    [below= of t]         {\textit{Substantiv}};
   \node (advbu) [below= of ad]        {\textit{Adverbiale Bestimmung}};
\end{scope}

   \pic [red] {lightning={ko}{l}{1.2}};
   \pic [red, rotate=180]{lightning={ku}{a}{1.2}};

   \draw[redarrow] (ao)    to (e1);
   \draw[redarrow] (au)    to (e2);

   \draw[redarrow] (so)    to (s);
   \draw[redarrow] (su)    to (t);

   \draw[redarrow] (advbo) to (i);
   \draw[redarrow] (advbu) to (ad);

   \draw[xshift=2.75cm,yshift=-1.8cm]
      node[right,text width=4cm,rounded corners,fill=red!10,inner sep=1em]%information text]
      {
         Parallelismus, der nicht ganz konsequent durchgestaltet ist, denn hier
         (\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
         stimmen die Wortarten nicht "uberein.
         \smallskip


         \tiny Der \textit{Komparativ} entstammt der Wortart \textit{Adjektiv}, der  parallele Satzteil entstammt der Wortart \textit{Konjunktion}. \par % alternatively add emtpy line before };
      };

\end{tikzpicture}
\caption[Parallelismus mit einer nicht passenden Wortarten-Parallelisierung]{Parallelismus mit einer nicht
(\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
passenden Wortarten-Parallelisierung}\label{paraIincomplete}
\end{figure}


Parallelismus mit einer nicht
(\tikz[baseline=1pt]\pic [red] {lightning={0pt,9pt}{0pt,-2pt}{.7}};)
passenden Wortarten-Parallelisierung
\end{document}

在此处输入图片描述

相关内容