tcolorbox 中的待办事项注释

tcolorbox 中的待办事项注释
\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和几个\tikzmarks 伪造了一个注释。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}

相关内容