일부 세로 공간을 차단하여 여백이 겹치는 것을 방지합니다.

일부 세로 공간을 차단하여 여백이 겹치는 것을 방지합니다.

내가 사용한 예를 고려해 봅시다.

Tikz: 다른 노드 오른쪽 여백에 있는 노드는 tcbtheorem과 상호 작용합니다.

이는 TikZ를 사용하여 여백 메모 주위에 색상 상자를 그리는 명령입니다.

이 노트는 TikZ에 의해 작성되었으므로 한계 내용으로 인식되지 않으며, 예를 들어 보조 노트와 겹칠 수 있습니다.

예를 들어:

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

수익률:

여기에 이미지 설명을 입력하세요

caution이러한 동작을 방지하기 위해 여백에 있는 상자 높이를 "차단"하여 다른 항목이 거기에 들어갈 수 없도록 하고 싶습니다 . 패키지 패키지는 내가 원하는 것을 의미하는 것으로 보이는 명령을 marginfix제공합니다 . \marginphantom그러나 정의 바로 앞 (또는 정의 내부 ) \marginphantom{2cm}에 정의를 추가하면 작동하지 않습니다.cautiontikzpicture\tikzmark

caution내 상자에 필요한 공간을 여백에서 차단하여 다른 여백 재료와 겹치지 않도록 하는 또 다른 솔루션을 생각하십니까 ( \marginpar또는 생각 중입니다 \sidenote). (게다가 내가 제안한 의 사용에 어떤 문제가 있는지 누구든지 설명해 주시면 매우 감사하겠습니다 \marginphantom.)

편집하다

설명: 상자가 호출되는 \tikzmark정확한 위치에 있기를 원하기 때문에 명령이 여기에서 정의되고 사용됩니다 .caution

게다가 내가 필요한 상자는 빨간색 상자보다 더 복잡하기 때문에 플롯하려면 TikZ가 필요하고 colorbox.

답변1

중복을 피하는 가장 쉬운 방법은 자신을 as 의 정의 내부 tikzpicture로 감싸는 것입니다.\sidenote\caution

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

이 경우 '오버레이' 옵션을 취소해야 합니다.

이제 해당 사이드노트의 번호 매기기를 비활성화하고 카운터 증가를 금지해야 합니다 sidenote.

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

산출

완전한 코드

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

관련 정보