Evite a sobreposição nas margens bloqueando algum espaço vertical

Evite a sobreposição nas margens bloqueando algum espaço vertical

Vamos considerar o exemplo que usei em

Tikz: o nó na margem direita de outro nó interage com o teorema tcb

esse é um comando que usa TikZ para desenhar uma caixa colorida ao redor de uma nota marginal.

Como esta nota foi desenhada pelo TikZ, ela não é reconhecida como conteúdo marginal e pode se sobrepor, por exemplo, a notas laterais.

Por exemplo:

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

rendimentos:

insira a descrição da imagem aqui

Para evitar tal comportamento eu gostaria de "bloquear" a altura da cautioncaixa na margem para que nada mais possa ir até lá. O marginfixpacote package fornece o \marginphantomcomando que parece ser o que eu quero. No entanto, adicionar \marginphantom{2cm}a cautiondefinição logo antes tikzpicture(ou dentro da \tikzmarkdefinição) não funciona.

Você pensa em outra solução para bloquear na margem o espaço necessário para minha cautioncaixa, para que ela não se sobreponha a outro material de margem (estou pensando em \marginparou \sidenote). (Além disso, ficaria muito grato se alguém pudesse explicar o que há de errado com a minha proposta de uso de \marginphantom).

Editar

Um esclarecimento: o comando \tikzmarké definido e utilizado aqui porque quero que a caixa esteja no local exato onde cautioné chamada.

Além disso, a caixa que preciso é mais complicada do que apenas uma caixa vermelha, então preciso do TikZ para plotá-la, não posso usar algo como colorbox.

Responder1

A maneira mais fácil de evitar sobreposições é envolver o tikzpicturepróprio \sidenoteinterior na definição de \cautioncomo

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

Observe que a opção 'sobreposição' deve ser cancelada neste caso.

Agora, você tem que desabilitar a numeração dessas notas laterais e inibir o incremento do sidenotecontador:

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

saída

Código completo

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

informação relacionada