我正在尝试创建一个打印突出显示的注释的环境,但无法正确进行垂直对齐。这是一个最简单的示例:
\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
接管。