将 framed 中定义的环境移植到 mdframed 的简单方法?

将 framed 中定义的环境移植到 mdframed 的简单方法?

我一直在基于 framed 包开发环境,但想移植到 mdframed,因为它更适合脚注,功能更多,开发也更活跃。问题是我不知道 mdframed 的内部结构,也不知道如何用它创建更高级的样式。此外,我发现手册中没有关于如何创建高级样式的描述。

是否有任何关于将框架环境转换为 mdframed 环境的移植指南/参考?或者至少有关于转换此特定环境的想法?

所讨论的环境是将一条线和 6 个图标中的一个或两个放在边距上。它有单独的线版本和奇数、单页和偶数情况的图标集,还有适合页面的框架、较长框架的开始、中间框架和最终框架的单独图标集。框架可能看起来像这样:

icon | ......
     |               ( on this even page, line is placed on left
     |                 and icon on top, because it is start of frame)
     | ......
  ~ page break
       ...... |
              |      ( on this odd page, line is placed on right
              |icon    and icon in middle, because it's internal frame)
              |
       ...... |
  ~ page break
     | ......        ( and here it's on left again,
icon | ......          while ending icon is at bottom of frame)

或者根据它们在页面上的布局方式而有所不同。我让它按我想要的方式工作了。相关代码看起来有点像这样(您可以跳过 %config 块,但我将它放在代码中以使其完整和正常工作),其中线条和图标被更简单的版本替换:

\usepackage{framed}

% config
\newcommand\singletopleft{STL}
\newcommand\singletopright{STR}
\newcommand\singlebottomleft{SBL}
\newcommand\singlebottomright{SBR}
\newcommand\firstleft{FL}
\newcommand\firstright{FR}
\newcommand\middleleft{ML}
\newcommand\middleright{MR}
\newcommand\lastleft{LL}
\newcommand\lastright{LR}
\newcommand\decorleft[1]{\vrule height #1 width 0.5pt\hspace{1mm}}
\newcommand\decorright[1]{\hspace{1mm}\vrule height #1 width 0.5pt}

% \mirrorframe{left content}{right content}{minimum height}{content}
\makeatletter
\newcommand\mirrorframe[4]{%
\dimen1=#3\savebox0{#4}\dimen0=\ht0\relax
\ifdim\dimen0<\dimen1%
\dimen2=0.5\dimen1%
\advance\dimen2 by -0.5\dimen0%
\dimen0=\dimen1%
\else\dimen2=0pt\fi
\def\0{\raisebox{\dimen2}{\begin{minipage}[t]{\wd0}\usebox0\end{minipage}}}%
\def\1{\llap{\vbox to \dimen0{#1}\decorleft{\dimen0}}\0}%
\def\2{\0\rlap{\decorright{\dimen0}\vbox to \dimen0{#2}}}%
\ifodd\count0\2\else\if@twoside\1\else\2\fi\fi}
\makeatother

% \begin{mirrortest}[minimum height] ... \end{mirrortest}
\newenvironment{mirrortest}[1][2\baselineskip]{%
\def\FirstFrameCommand{\mirrorframe{\hbox{\firstleft}\vfill}{\hbox{\firstright}\vfill}{#1}}%
\def\MidFrameCommand{\mirrorframe{\vfill\hbox{\middleleft}\vfill}{\vfill\hbox{\middleright}\vfill}{#1}}%
\def\LastFrameCommand{\mirrorframe{\vfill\hbox{\lastleft}}{\vfill\hbox{\lastright}}{#1}}%
\def\FrameCommand{\mirrorframe{\hbox{\singletopleft}\vfill\hbox{\singlebottomleft}}{\hbox{\singletopright}\vfill\hbox{\singlebottomright}}{#1}}%
\MakeFramed{\advance\hsize-\width \FrameRestore}\ignorespaces}{\endMakeFramed}

我这样使用它:

\usepackage{lipsum}
\begin{document}
\begin{mirrortest}
\lipsum[1-20]
\end{mirrortest}
\end{document}

mdframed 包内部似乎要复杂得多,这就是为什么我还不知道如何进行转换。如能得到任何帮助/指导,我将不胜感激!

相关内容