Zeichnen Sie einen TikZ-Pfeil über mehrere Seiten

Zeichnen Sie einen TikZ-Pfeil über mehrere Seiten

Ich möchte Pfeile zwischen meinen Randnotizen haben und habe dies mit \tikzmarknode(Abbildung 1) erreicht. Es funktioniert jedoch nicht, wenn sich eine Markierung auf einer anderen Seite befindet (Abbildung 2).

Ich hätte gern eine durchgehende Linie, die bis zum Ende der Seite verläuft und dann oben auf der nächsten Seite wieder auftaucht (Abbildung 3).

Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben Bildbeschreibung hier eingeben

MWE:

\documentclass[10pt,oneside]{scrbook}
\usepackage{lipsum}
\usepackage[left=32.5mm, right=22.5mm, top=25mm, bottom=20mm, marginparsep=3mm]{geometry}
\usepackage{tikz}
    \usetikzlibrary{tikzmark}
\usepackage{marginnote}
\renewcommand*{\marginfont}{\footnotesize\itshape}

\begin{document}

\marginnote{\tikzmarknode{a}{Thermoplast}}
\lipsum[1]
\marginnote{\tikzmarknode{b}{teilkristallin}}
\lipsum[1]
\marginnote{\tikzmarknode{c}{aliphatisch}} 
\begin{tikzpicture}[remember picture, overlay, shorten >=1.5mm, shorten <=1.5mm,->]
    \draw ([xshift=10pt]a.south west) to ([xshift=10pt]b.north west);
    \draw ([xshift=10pt]b.south west) to ([xshift=10pt]c.north west);
\end{tikzpicture}
% \lipsum[1-6]    % Works fine
\lipsum[1-7]    % Doesn't work
\marginnote{\tikzmarknode{d}{aliphatisch}} 
\begin{tikzpicture}[remember picture, overlay, shorten >=1.5mm, shorten <=1.5mm,->]
    \draw ([xshift=10pt]c.south west) to ([xshift=10pt]d.north west);
\end{tikzpicture}

\end{document}

Antwort1

Die tikzmarkBibliothek wird mit einem Scheck geliefert \iftikzmarkoncurrentpage. Dies ermöglicht es uns, die Fälle zu unterscheiden

  1. keiner der Knoten auf der aktuellen Seite (wobei die aktuelle Seite möglicherweise zwischen zwei Seiten liegt, die nachfolgende Markierungen tragen, die verbunden werden sollen),
  2. erster Knoten auf der aktuellen Seite,
  3. zweiter Knoten auf der aktuellen Seite,
  4. beide Knoten auf derselben Seite.

Diese Fälle werden im Makro unterschieden \ConnectTikZmarknodes, das die Knoten auch über Seitenumbrüche hinweg verbindet. Damit wird eso-picvermieden, dass der Benutzer das Makro auf mehreren Seiten hinzufügen muss. Dank der praktischen Checks tikzmarkist es möglich (und, wenn die Verbindung über mehrere Seiten verläuft, auch notwendig), die Knoten hinzuzufügen, \ConnectTikZmarknodesbevor sie tatsächlich definiert werden.

\documentclass[10pt,oneside]{scrbook}
\usepackage{lipsum}
\usepackage[left=32.5mm, right=22.5mm, top=25mm, bottom=20mm, marginparsep=3mm]{geometry}
\usepackage{tikzpagenodes}
\usepackage{eso-pic}
\usetikzlibrary{tikzmark}
\usepackage{marginnote}
\renewcommand*{\marginfont}{\footnotesize\itshape}
\makeatletter
\newcommand\PageOfTikzmark[1]{%
\csname save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname\endcsname}
\makeatother
\newcommand{\ConnectTikZmarknodes}[3][]{\AddToShipoutPictureFG{%
\begin{tikzpicture}[remember picture, overlay, shorten >=1.5mm, 
    shorten <=1.5mm,#1]
\iftikzmark{#2}{\edef\pageA{\PageOfTikzmark{#2}}}{\edef\pageA{-1}}% 
\iftikzmark{#3}{\edef\pageB{\PageOfTikzmark{#3}}}{\edef\pageB{-1}}% 
\iftikzmarkoncurrentpage{#2}
\edef\myflag{1}%
\else
\edef\myflag{0}%
\fi 
\iftikzmarkoncurrentpage{#3}
\edef\myflag{\the\numexpr\myflag+2}%
\fi 
\ifcase\myflag
\or
 \draw[-] ([xshift=10pt]#2.south west)
     to ([xshift=10pt]#2.south west|-current page text area.south);
\or
 \draw[->] ([xshift=10pt]#3.north west|-current page text area.north) 
    to ([xshift=10pt]#3.north west);  
\or
 \draw[->] ([xshift=10pt]#2.south west)
     to ([xshift=10pt]#3.north west);
\fi
\ifnum\value{page}>\pageA
\ifnum\value{page}<\pageB
 \draw ([xshift=20pt]current page text area.north east) to
 ([xshift=20pt]current page text area.south east);
\fi
\fi
\end{tikzpicture}}}
\begin{document}

\marginnote{\tikzmarknode{a}{Thermoplast}}
\lipsum[1]
\marginnote{\tikzmarknode{b}{teilkristallin}}
\ConnectTikZmarknodes{a}{b}
\lipsum[1]
\marginnote{\tikzmarknode{c}{aliphatisch}} 
\ConnectTikZmarknodes{b}{c}
\lipsum[1-7]    % works fine
\marginnote{\tikzmarknode{d}{aliphatisch}} 
\ConnectTikZmarknodes{c}{d}
\ConnectTikZmarknodes{d}{e}
\lipsum[1-23]    
\marginnote{\tikzmarknode{e}{unproblematisch}} 
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen