frametitlerule
我正在尝试获取下方的虚线mdframed
,但设置似乎无效。我根据文档编写了此代码 (Ti钾z 示例 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}