内部有 minipage 的 lrbox 垂直对齐

内部有 minipage 的 lrbox 垂直对齐

我正在尝试创建一个打印突出显示的注释的环境,但无法正确进行垂直对齐。这是一个最简单的示例:

\documentclass{article}

\usepackage{xcolor}
\usepackage{calc}

\definecolor{shadecolor}{rgb}{1,1,0}
\makeatletter%
\newenvironment{note}{%
  \begin{lrbox}{\@tempboxa}\begin{minipage}[t]{\linewidth-7pt}%
      \setlength{\parskip}{8pt}%
      \textbf{Note.}}%
    {\end{minipage}\end{lrbox}%
  \colorbox{shadecolor}{\usebox{\@tempboxa}}%
}%
\makeatother%

\begin{document}

\begin{enumerate}
\item
  \begin{note}
    This alignment is what I want.

    The top lines up with the number. 
  \end{note}

\item
  \begin{note}
    But if there's a list in the note, the number instead matches up
    with the first item. 

    \begin{itemize}
    \item A
    \item B
    \end{itemize}
  \end{note}
\end{enumerate}

\end{document}

这将产生以下内容:

例子

我希望突出显示的框与左侧的枚举数字对齐;第一个没问题,但第二个却使用了 itemize 的第一个项目。我做错了什么?

答案1

问题很微妙。您会发现,不仅盒子移位了,而且产品编号也移位了。

一个人永远不应该说\item \colorbox{color}{text},但总是

\item \leavevmode\colorbox{color}{text}

因为颜色设置和的有趣互动\item

\documentclass{article}

\usepackage{xcolor}
\usepackage{calc}

\definecolor{shadecolor}{rgb}{1,1,0}
\newsavebox{\notebox}
\newenvironment{note}
 {\leavevmode
  \begin{lrbox}{\notebox}
  \begin{minipage}[t]{\linewidth-2\fboxsep}%
  \setlength{\parskip}{8pt}%
  \textbf{Note.} \ignorespaces}
 {\end{minipage}
  \end{lrbox}%
  \colorbox{shadecolor}{\usebox{\notebox}}%
  }

\begin{document}

\begin{enumerate}
\item
  \begin{note}
    This alignment is what I want.

    The top lines up with the number. 
  \end{note}

\item
  \begin{note}
    But if there's a list in the note, the number instead matches up
    with the first item. 

    \begin{itemize}
    \item A
    \item B
    \end{itemize}
  \end{note}

\end{enumerate}

\end{document}

我会避免使用\@tempboxa,更喜欢新的盒子寄存器。我还做了一些调整。我也会避免设置\parskip

基本上,发生的情况是处理\item尚未完成并且内部\item接管。

在此处输入图片描述

相关内容