
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:
Para evitar tal comportamento eu gostaria de "bloquear" a altura da caution
caixa na margem para que nada mais possa ir até lá. O marginfix
pacote package fornece o \marginphantom
comando que parece ser o que eu quero. No entanto, adicionar \marginphantom{2cm}
a caution
definição logo antes tikzpicture
(ou dentro da \tikzmark
definição) não funciona.
Você pensa em outra solução para bloquear na margem o espaço necessário para minha caution
caixa, para que ela não se sobreponha a outro material de margem (estou pensando em \marginpar
ou \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 tikzpicture
próprio \sidenote
interior na definição de \caution
como
\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 sidenote
contador:
\newcommand{\caution}{%
...
\begingroup
\let\thesidenote\relax
\let\refstepcounter\@gobble
\sidenote{%
...
}
\endgroup
}
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}