여러 페이지에 걸쳐 TikZ 화살표 그리기

여러 페이지에 걸쳐 TikZ 화살표 그리기

저는 여백 사이에 화살표를 넣고 싶었고 \tikzmarknode(그림 1)을 사용하여 이를 달성했습니다. 그러나 한 표시가 다른 페이지에 있으면 작동하지 않습니다(그림 2).

내가 갖고 싶은 것은 페이지 끝까지 내려가다가 다음 페이지 상단에 다시 나타나는 연속선입니다(그림 3).

여기에 이미지 설명을 입력하세요 여기에 이미지 설명을 입력하세요 여기에 이미지 설명을 입력하세요

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}

답변1

도서관 tikzmark에는 수표가 함께 제공됩니다 \iftikzmarkoncurrentpage. 이를 통해 사례를 구별할 수 있습니다.

  1. 현재 페이지에 노드가 하나도 없습니다(현재 페이지가 연결될 후속 마크가 있는 두 페이지 사이에 있을 가능성이 있음).
  2. 현재 페이지의 첫 번째 노드,
  3. 현재 페이지의 두 번째 노드,
  4. 두 노드가 같은 페이지에 있습니다.

\ConnectTikZmarknodes이러한 경우는 페이지 나누기를 통해서도 노드를 연결하는 매크로에서 구별됩니다 . eso-pic사용자가 여러 페이지에 매크로를 추가하도록 요구하지 않는 데 사용됩니다 . 함께 제공되는 멋진 검사 덕분에 노드가 실제로 정의되기 전에 tikzmark추가하는 것이 가능합니다(연결이 두 페이지 이상에 걸쳐 실행되는 경우에도 필요함) .\ConnectTikZmarknodes

\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}

여기에 이미지 설명을 입력하세요

관련 정보