Verhindern Sie Überlappungen in den Rändern, indem Sie einen Teil des vertikalen Raums blockieren.

Verhindern Sie Überlappungen in den Rändern, indem Sie einen Teil des vertikalen Raums blockieren.

Betrachten wir das Beispiel, das ich in

Tikz: Knoten im Rand rechts neben anderem Knoten interagiert mit tcbtheorem

dabei handelt es sich um einen Befehl, der mit TikZ ein farbiges Kästchen um eine Randnotiz zeichnet.

Da diese Notiz von TikZ erstellt wird, wird sie nicht als Randinhalt erkannt und kann sich beispielsweise mit Randnotizen überschneiden.

Zum Beispiel:

\documentclass[oneside]{book}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{tikzpagenodes}
\usepackage[most]{tcolorbox}
\tcbuselibrary{theorems}
\usepackage{lipsum}
\usepackage{marginfix}
\usepackage{sidenotes}


\newcounter{mycaution}
\newcommand\tikzmark[1]{%
  \tikz[remember picture,overlay]
  \node[inner xsep=0pt,outer sep=0pt] (#1) {};
}

\newcommand{\caution}{
\stepcounter{mycaution}
\tikzmark{\themycaution}%

\begin{tikzpicture}[remember picture,overlay]
\node[draw=red,anchor=west,xshift=\marginparsep,yshift=0pt]   
  (mybox\themycaution)
  at ([yshift=3pt]current page text area.east|-\themycaution) 
  {\parbox{\marginparwidth}{Some text, even a longer text}};
\end{tikzpicture}
}


\begin{document}


Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum
ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero,
nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla
ultrices. Phasellus eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean
faucibus. Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor
semper nulla. Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend,
sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi auctor lorem
non justo. Nam\sidenote{Random sidenote with a bit long text.} lacus libero, pretium at, lobortis vitae, ultricies et, tellus. Donec aliquet,
tortor sed accumsan bibendum, erat ligula aliquet magna, vitae ornare odio metus a mi.\caution{}
Morbi ac orci et nisl hendrerit mollis. Suspendisse ut massa. Cras nec ante. Pellentesque a
nulla. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque cursus
luctus mauris.



\end{document}

ergibt:

Bildbeschreibung hier eingeben

Um ein solches Verhalten zu vermeiden, möchte ich die Höhe der cautionBox am Rand „blockieren“, damit nichts anderes dorthin gelangen kann. Das Paket marginfixpackage stellt den Befehl bereit, der für das gedacht zu sein scheint, was ich will. Das Hinzufügen der Definition direkt vor (oder innerhalb der Definition) funktioniert \marginphantomjedoch nicht.\marginphantom{2cm}cautiontikzpicture\tikzmark

Fällt Ihnen eine andere Lösung ein, um im Rand den nötigen Platz für meine cautionBox zu blockieren, sodass sie sich nicht mit anderem Randmaterial überschneidet (ich denke an \marginparoder \sidenote). (Außerdem wäre ich sehr dankbar, wenn mir jemand erklären könnte, was an meiner vorgeschlagenen Verwendung von falsch ist \marginphantom.)

Bearbeiten

Eine Klarstellung: Der Befehl \tikzmarkwird hier definiert und verwendet, weil ich möchte, dass die Box genau an der Stelle ist, wo cautionsie aufgerufen wird.

Außerdem ist die Box, die ich brauche, komplizierter als nur eine rote Box, ich brauche also TikZ, um sie zu plotten, ich kann nicht so etwas wie verwenden colorbox.

Antwort1

tikzpictureDer einfachste Weg, Überschneidungen zu vermeiden, besteht darin, das sich selbst in ein \sidenoteinnerhalb der Definition von \cautionals einzuschließen

\sidenote{%
  \tikzpicture[remember picture]
    \node[draw=red,anchor=west,xshift=\marginparsep,yshift=0pt]   
    (mybox\themycaution)
    at ([yshift=3pt]current page text area.east|-\themycaution) 
    {\parbox{\marginparwidth}{Some text, even a longer text}};
  \endtikzpicture
}

Beachten Sie, dass in diesem Fall die Option „Overlay“ deaktiviert werden muss.

Nun müssen Sie die Nummerierung dieser Randnotizen deaktivieren und die Erhöhung des sidenoteZählers unterbinden:

\newcommand{\caution}{%
  ...
  \begingroup
  \let\thesidenote\relax
  \let\refstepcounter\@gobble
  \sidenote{%
    ...
  }
  \endgroup
}

Ausgabe

Vollständiger Code

\documentclass[oneside]{book}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{tikzpagenodes}
\usepackage[most]{tcolorbox}
\tcbuselibrary{theorems}
\usepackage{lipsum}
\usepackage{sidenotes}
\usepackage{marginfix}

\newcounter{mycaution}
\newcommand\tikzmark[1]{%
  \tikz[remember picture,overlay]
  \node[inner xsep=0pt,outer sep=0pt] (#1) {};
}

\makeatletter
\newcommand{\caution}{%
  \stepcounter{mycaution}%
  \tikzmark{\themycaution}%
  \begingroup
  \let\thesidenote\relax
  \let\refstepcounter\@gobble
  \sidenote{%
    \tikzpicture[remember picture]
      \node[draw=red,anchor=west,xshift=\marginparsep,yshift=0pt]   
      (mybox\themycaution)
      at ([yshift=3pt]current page text area.east|-\themycaution) 
      {\parbox{\marginparwidth}{Some text, even a longer text}};
    \endtikzpicture
  }%
  \endgroup
}
\makeatother

\begin{document}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum
ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero,
nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Mauris ut leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna fringilla
ultrices. Phasellus eu tellus sit amet tortor gravida placerat. Integer sapien est, iaculis in,
pretium quis, viverra ac, nunc. Praesent eget sem vel leo ultrices bibendum. Aenean
faucibus.\caution Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla. Curabitur auctor
semper nulla. Donec varius orci eget risus. Duis nibh mi, congue eu, accumsan eleifend,
sagittis quis, diam. Duis eget orci sit amet orci dignissim rutrum.
Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi auctor lorem
non justo. Nam\sidenote{Random sidenote with a bit long long long long long long long long long long long long text.} lacus libero, pretium at, lobortis vitae, ultricies et, tellus. Donec aliquet,
tortor sed accumsan bibendum, erat ligula aliquet magna, vitae ornare odio metus a mi.\caution
Morbi ac orci et nisl hendrerit mollis. Suspendisse ut massa. Cras nec ante. Pellentesque a
nulla. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque cursus
luctus mauris.
\end{document}

verwandte Informationen