创建类似于 \vrule 的命令

创建类似于 \vrule 的命令

尝试创建类似于命令的新边框时\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}

相关内容