\documentclass{article}
\usepackage{tikz,lipsum,lmodern}
\usepackage[most]{tcolorbox}
\usepackage[colorinlistoftodos]{todonotes}
\begin{document}
\listoftodos[Notes]
Note is here\todo{Sample note!}
\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black,title=My title]
My box with my \todo{note doesn't show}title.
\end{tcolorbox}
\end{document}
我的待办事项怎么了?当我放置 tcolorbox 时,它似乎被强制放到了背景中,但我希望待办事项从 tcolorbox 内部突出。我该怎么做才能解决这个问题?
答案1
只能\todo[inline]{...}
在其他任何对象内使用,否则您会收到“未处于外部 par 模式”错误。遗憾的是,内联版本不会创建(inNote)
用于绘制线条的坐标。
下面\todo
使用\marginpar
和几个\tikzmark
s 伪造了一个注释。tcolorbox 环境允许\tikzmark
内部(可能重新定义它)。最难的部分是将线与 相交的点居中\marginpar
。
\documentclass{article}
\usepackage{tikz,lipsum,lmodern}
\usepackage[most]{tcolorbox}
\usepackage[colorinlistoftodos]{todonotes}
\usetikzlibrary{tikzmark}
\begin{document}
\listoftodos[Notes]
Note is here\todo{Sample note!}
\marginpar{\sbox0{\todo[inline]{note doesn't show}}% measure height
\raisebox{0.5\ht0}{\tikzmark{inNote}}\usebox0}%
\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black,title=My title]
My box with my \tikzmark{inText}title.
\end{tcolorbox}
\tikz[remember picture,overlay]{\draw[orange,thick] (pic cs:inNote) -- ++(-0.5\marginparsep,0) |- (pic cs:inText);}%
\end{document}
此版本以更精简的方式(或多或少)完成了相同的工作。它分为\todo
和\todonote
,\todomark
其中\todonote
必须放在 tcolorbox 外部但可以放在内部。可选参数可用于一次\todomark
将多个放在tcolorbox 内部,并确保正确的标记和注释连接。\todomark
\documentclass{article}
\usepackage{tikz,lipsum,lmodern}
\usepackage[most]{tcolorbox}
\usepackage[colorinlistoftodos]{todonotes}
\newsavebox{\todobox}
\newcommand{\todonote}[2][inNote]% #1 = coordinate id (optional), #2 = note
{\marginpar{\savebox\todobox{\todo[inline]{#2}}% measure height
\begin{tikzpicture}[remember picture, overlay]
\coordinate (#1) at (0pt,0.5\ht\todobox);
\end{tikzpicture}\usebox\todobox}}
\newcommand{\todomark}[1][inNote]% #1 = coordinate id (optional)
{\begin{tikzpicture}[remember picture, overlay]
\draw[orange,thick] (#1) -- ++(-0.5\marginparsep,0)
|- (0pt,\lineskip-\dp\strutbox);
\end{tikzpicture}}
\begin{document}
\listoftodos[Notes]
Note is here\todo{Sample note!}
\todonote{note doesn't show}% must be outside tcolorbox
\begin{tcolorbox}[colback=blue!5!white,colframe=blue!75!black,title=My title]
My box with my \todomark title.
\end{tcolorbox}
\end{document}