尝试创建类似于命令的新边框时\vrule
,我得到以下信息:
\documentclass{article}
\usepackage{xcolor,framed,lipsum}
\def\bulletfill{\vbox to 3ex{\vfil\hbox{$\bullet$}\vfil}}
\newenvironment{defn}[1][blue]{%
\def\FrameCommand##1{
{\color{#1}\vbox to \ht0{\xleaders\bulletfill\vfill}}%
\setbox0=\hbox{%
\colorbox{yellow!20}{%
##1
}%
}%
\usebox0}%
\MakeFramed {\advance\hsize -\width \FrameRestore}}%
{\endMakeFramed}
\begin{document}
\begin{defn}
\lipsum[1-2]
\end{defn}
\end{document}
不幸的是,\bullet
没有被复制,但如果更改\vbox to \ht0
为显示\vbox to \vsize
项目符号。奇怪吗?那么问题是,为什么它会以这种方式表现,以及将项目符号复制为边框的可能解决方案。
答案1
这里有一个解决方案mdframed
\documentclass{article}
\usepackage{xcolor,lipsum}
\usepackage[framemethod=TikZ]{mdframed}
\newmdenv[hidealllines=true,leftline=true,
linecolor=yellow!20,backgroundcolor=yellow!20,
tikzsetting={draw=blue,dashed,dash pattern= on 1pt off 3pt}]{defn}
\begin{document}
\begin{defn}
\lipsum[1-2]
\end{defn}
\end{document}
答案2
找到解决方案了。通过首先定义框内容,可以允许\ht0
在 中使用\vbox
。
\newenvironment{defn}[1][blue]{%
\def\FrameCommand##1{%
\setbox0=\hbox{%
\colorbox{yellow!20}{%
##1
}%
}%
{\color{#1}\vbox to \ht0{\xleaders\bulletfill\vfill}}%
\usebox0}%
\MakeFramed {\advance\hsize -\width \FrameRestore}}%
{\endMakeFramed}
David 补充说明:
更正统的 LaTeX 框命令集是
\newenvironment{defn}[1][blue]{%
\def\FrameCommand##1{%
\sbox{0}{\colorbox{yellow!20}{##1}%
}%
\parbox[b][\ht0]{0pt}{\color{#1}\xleaders\bulletfill\vfill}%
\usebox{0}}%
\MakeFramed {\advance\hsize -\width \FrameRestore}}%
{\endMakeFramed}