虚线 mdfframetitlerule

虚线 mdfframetitlerule

frametitlerule我正在尝试获取下方的虚线mdframed,但设置似乎无效。我根据文档编写了此代码 (Tiz 示例 5),但这个问题也相关:带虚线边框的框

平均能量损失

\documentclass{article}

\usepackage{xparse}
\usepackage[framemethod=tikz]{mdframed}

\NewDocumentEnvironment{fitb}{ m } {
  \mdframed[%
    frametitle={#1},%
    frametitlerule=true,%
    frametitlerulewidth=1pt,%
    frametitlebackgroundcolor=blue!5,%
    apptotikzsetting={\tikzset{mdfframetitlerule/.append style={draw=blue,dashed}}}%
]}{\endmdframed}

\begin{document}
\begin{fitb}{title}
  hello, world
\end{fitb}
\end{document}

以下是我得到的结果:

输出

答案1

查看md-framed-1.mdf问题中的 mdframed 代码似乎是在定义\def\mdf@@frametitlerule线时将线绘制为矩形,而不是直线,使用:

\tikz\draw[mdfframetitlerule] (0,0)%
           rectangle (\dimen@,\mdf@frametitlerulewidth@length);

当然,添加dashed样式只会改变矩形的边框,这可能不是您想要的。我确信应该可以使用\patchcmd和朋友来更改它,但我害怕在多行命令上使用它,所以在下面的代码中,我只是剪切并粘贴了整个命令,只更改了其中的一部分,以便它绘制一条适当宽度的线而不是矩形。

这仍然不能完全解决问题,我发现我需要将命令放在外面\tikzset{...}\mdframed进行这些更改后,下面的 MWE 会产生我认为您想要的结果:

在此处输入图片描述

如果你不\mdf@@frametitlerule如上所述破解命令,而只是将命令移到命令\tikzset之外\mdframed,那么你就会得到预期的结果

在此处输入图片描述

也就是说,您获得一个带有虚线边框的填充矩形。

完整代码如下:

\documentclass{article}
\usepackage{xparse}
\usepackage[framemethod=tikz]{mdframed}

% change the mdframed definition of \mdf@@frametitlerule so that it
% draws a line rather than a rectangle.
\makeatletter
\def\mdf@@frametitlerule{%
  \ifbool{mdf@frametitlerule}{%
   \vbox{\hsize0pt
     \par\unskip\vskip\mdf@frametitlebelowskip@length
     \noindent\rlap{\hspace*{-\mdf@innerleftmargin@length}%
     \begingroup%
     \pgfmathsetlength{\dimen@}{\mdfframetitleboxwidth
                                +\mdf@innerleftmargin@length
                                +\mdf@innerrightmargin@length}%
     % the following line has been changed 
     \tikz\draw[line width=\the\mdf@frametitlerulewidth@length, mdfframetitlerule]
          (0,0) -- (\dimen@,0);
     \endgroup}
   }%
  }{%
   \vbox{\hsize0pt
     \par\unskip\vskip\mdf@frametitlebelowskip@length
     \noindent\rlap{}
   }%
  }%
  \iftoggle{mdf@notfirstframetitle}%
    {%
      \par\unskip\vskip\mdf@splittopskip@length%
    }%
    {%
      \par\unskip\vskip\mdf@innertopmargin@length%
    }%
}%
\makeatother

\NewDocumentEnvironment{fitb}{ m }
  { \tikzset{mdfframetitlerule/.append style={draw=blue,dashed}}
    \mdframed[frametitle={#1},
              frametitlerule=true,%
              frametitlerulewidth=2pt,%
              frametitlebackgroundcolor=blue!5,%
  ]}
  {\endmdframed}

\begin{document}
\begin{fitb}{title}
  hello, world
\end{fitb}
\end{document}

编辑

现在我们知道了“问题”是什么,我们可以通过将mdframed使用的矩形设计成虚线来实现所需的结果。一种方法是使用棋盘格图案。这会产生:

在此处输入图片描述

以下是更新后的代码:

\documentclass{article}
\usepackage{xparse}
\usepackage[framemethod=tikz]{mdframed}
\usetikzlibrary{patterns}

\NewDocumentEnvironment{fitb}{ m }
  { \tikzset{mdfframetitlerule/.append style={
      pattern=checkerboard, pattern color=blue}}
    \mdframed[frametitle={#1},
              frametitlerule=true,%
              frametitlerulewidth=2pt,%
              frametitlebackgroundcolor=blue!5,%
  ]}
  {\endmdframed}

\begin{document}
\begin{fitb}{title}
  hello, world
\end{fitb}
\end{document}

相关内容