
Consideremos el ejemplo que utilicé en
Tikz: el nodo en el margen derecho de otro nodo interactúa con tcbtheorem
ese es un comando que usa TikZ para dibujar un cuadro de color alrededor de una nota marginal.
Como esta nota fue dibujada por TikZ, no se reconoce como contenido marginal y puede superponerse, por ejemplo, con notas al margen.
Por ejemplo:
\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}
rendimientos:
Para evitar este comportamiento, me gustaría "bloquear" la altura del caution
cuadro en el margen para que nada más pueda ir allí. El paquete marginfix
proporciona el \marginphantom
comando que parece estar destinado a lo que quiero. Sin embargo, agregar \marginphantom{2cm}
la caution
definición justo antes tikzpicture
(o dentro de la \tikzmark
definición) no funciona.
¿Se te ocurre otra solución para bloquear en el margen el espacio necesario para mi caution
caja, para que no se superponga con otro material de margen (estoy pensando en \marginpar
o \sidenote
)? (Además, estaría muy agradecido si alguien pudiera explicar qué hay de malo en el uso que propongo de \marginphantom
).
Editar
Una aclaración: el comando \tikzmark
se define y usa aquí porque quiero que el cuadro esté en el lugar exacto donde caution
se llama.
Además, el cuadro que necesito es más complicado que solo un cuadro rojo, por lo que necesito TikZ para trazarlo, no puedo usar algo como colorbox
.
Respuesta1
La forma más fácil de evitar superposiciones es envolver el tikzpicture
propio en un \sidenote
interior de la definición de \caution
as
\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
}
Tenga en cuenta que en este caso la opción 'superposición' debe cancelarse.
Ahora, tienes que desactivar la numeración de esas notas al margen e inhibir el incremento del 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}