因为有人指出,重新定义\item
可能会很危险`mdframed` 和 `\item` 之间奇怪的交互,我想知道这个解决方案是否会出现问题。
我的目标是替换:
\begin{enumerate}[label={(\alph*)}]
\MyItem \TextA
\MyItem \TextB
\end{enumerate}
(即,只有环境名称被改变):
\begin{MyEnumerate}[label={(\alph*)}]
\MyItem \TextA
\MyItem \TextB
\end{MyEnumerate}
获得mdframe
每个项目的周围:
下面的解决方法似乎可行,至少对于这个测试用例来说是这样。那么,这种使用\MyItem
而不是 的方式是否\item
存在隐藏的危险,而这些危险在这个测试用例中并不明显。
笔记:
- 这看起来很像在 itemize 环境中将一些项目放在框内,但不同之处在于我希望这个框架围绕每个项目,并且确实需要使用
mdframed
而不是仅仅使用tikz
矩形。
代码:
\documentclass{article}
\usepackage{etoolbox}% for toggles
\usepackage{enumitem}
\usepackage{mdframed}
\newcommand{\TextA}{%
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Sed accumsan hendrerit velit, vitae ultrices sapien porta nec.
}%
\newcommand{\TextB}{%
Duis blandit tempus placerat.
Nulla vitae erat ante. Nulla facilisi.
Aliquam tristique interdum suscipit.
Duis posuere orci vel velit suscipit in porttitor purus eleifend.
}%
\newcommand{\MyItem}{\item}
\newtoggle{FirstItem}%
\toggletrue{FirstItem}%
\newenvironment{MyEnumerate}[1][]{%
\renewcommand{\MyItem}{%
\iftoggle{FirstItem}{%
\global\togglefalse{FirstItem}
%--------- start new frame
\begin{mdframed}[skipbelow=2pt]%
\begin{enumerate}[#1,series=MySeries]%
}{%
\end{enumerate}%
\end{mdframed}%
%--------- end previous frame and start new one
\begin{mdframed}[skipbelow=2pt]%
\begin{enumerate}[#1,resume*=MySeries]%
}%
\item%
}%
}{%
\end{enumerate}%
\end{mdframed}% --------- end last frame
\global\toggletrue{FirstItem}%
}%
\begin{document}\noindent
\textbf{enumerate:}
\begin{enumerate}[label={(\alph*)}]
\MyItem \TextA
\MyItem \TextB
\end{enumerate}
%
\medskip
\textbf{MyEnumerate:}
\begin{MyEnumerate}[label={(\alph*)}]
\MyItem \TextA
\MyItem \TextB
\end{MyEnumerate}
\end{document}
答案1
这个 cw 是为了减少未解答的问题
在我看来,你的代码运行良好。