저는 여백 사이에 화살표를 넣고 싶었고 \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
. 이를 통해 사례를 구별할 수 있습니다.
- 현재 페이지에 노드가 하나도 없습니다(현재 페이지가 연결될 후속 마크가 있는 두 페이지 사이에 있을 가능성이 있음).
- 현재 페이지의 첫 번째 노드,
- 현재 페이지의 두 번째 노드,
- 두 노드가 같은 페이지에 있습니다.
\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}