我想理解(并找到解决方案)以下问题。首先,MWE:
\documentclass{article}
\usepackage{mdframed}
\usepackage{fancybox}
\newsavebox{\mcBox}
\newenvironment{monItemize}{
\renewcommand{\item}%
{\end{lrbox}%
\fbox{
\usebox{\mcBox}
} \\\begin{lrbox}{\mcBox}}%
\begin{lrbox}{\mcBox}%
}
{\end{lrbox}
\fbox{%
\usebox{\mcBox}%
}%
}
\newcommand{\itemm}{}
\newenvironment{monItemizeMD}{
\renewcommand{\itemm}%
{\end{lrbox}%
\begin{mdframed}[userdefinedwidth=3cm]%
\usebox{\mcBox}
\end{mdframed}%
\begin{lrbox}{\mcBox}}%
\begin{lrbox}{\mcBox}%
}
{\end{lrbox}
\begin{mdframed}[userdefinedwidth=3cm]%
\usebox{\mcBox}
\end{mdframed}%
}
\begin{document}
\begin{monItemize}
\item aaa
\item bbb
\end{monItemize}
\begin{monItemizeMD}
\itemm ccc
\itemm ddd
\end{monItemizeMD}
\end{document}
在环境中monItemize
,我重新定义\item
,将内容放在fbox
。
在环境中,我通过命令而不是 来monItemizeMD
定义项目,并且内容位于 mdframed-Box 中而不是 中。\itemm
\item
\fbox
- 问题:如果我使用
\item
inmonItemizeMD
(当然,在定义中和环境的实例中),则编译失败。为什么? - 问题:一般来说,重新定义有多安全
\item
? - 问题:我是否仍可以使用 来解决问题 1
\item
?因为我的问题是,在许多已经存在的文档中,我有一个\item
重新定义的环境。在我的 documentclass 中,我想用\fbox
mdframed 框替换 。
答案1
1)\item
是一个垂直模式命令,它基本上开始一个新段落,但lrbox
类似于\fbox
水平\mbox
(LR)模式构造,除非您首先嵌套 parbox 或 minipage 或类似的东西,否则不允许垂直材料。
2)正如前几天提到的使用 \trivlist 和 \list 定义环境LaTeX 到处都使用列表。例如,如果你重新定义,\item
你就重新定义了center
环境。verbatim
更新特别是你也会重新定义 mdframed。
3)我不太确定您想要解决的顶级要求是什么,您想要将枚举的每个项目装箱并允许在框内打破?
答案2
重新定义\item
可能会带来危险且不可预测的结果,正如您所发现的。如果您只想\item
用 3cm 的宽度框住文本,那么
\newsavebox{\mcBox}
\newif\ifstartmonItemize
\newenvironment{monItemize}
{\startmonItemizetrue
\renewcommand{\item}{%
\ifstartmonItemize
\startmonItemizefalse
\else
\end{lrbox}
\noindent
\framebox[3cm][l]{\usebox{\mcBox}}\\
\fi
\begin{lrbox}{\mcBox}\strut}%
}
{\end{lrbox}\noindent\framebox[3cm][l]{\usebox{\mcBox}}}
会做。