
讓我們考慮一下我使用的範例
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
邊緣中框的高度,以便其他任何東西都不能到達那裡。 package marginfix
package 提供的\marginphantom
指令似乎適合我想要的。但是,\marginphantom{2cm}
在caution
定義之前tikzpicture
(或\tikzmark
定義內部)新增定義不起作用。
您是否想到另一種解決方案來在邊距中阻擋我的caution
盒子的必要空間,以便它不會與其他邊距材料重疊(我正在考慮\marginpar
或\sidenote
)。 (此外,如果有人能解釋我建議的使用有什麼問題,我將非常感激\marginphantom
)。
編輯
澄清:\tikzmark
這裡定義並使用該命令是因為我希望該框位於caution
被呼叫的確切位置。
此外,我需要的盒子比紅色盒子更複雜,所以我需要 TikZ 來繪製它,我不能使用像colorbox
.
答案1
避免重疊的最簡單方法是將其tikzpicture
包裝到as\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}