在 mdframed 中将标题框和文本与水平线对齐

在 mdframed 中将标题框和文本与水平线对齐

我发现了一个整洁解决方案用来mdframed制作定理、引理和证明的框。虽然这个解决方案很出色,但我想知道是否可以将标题与框的水平线(通过中心)对齐。这可能是设计使它看起来像这样,但我忍不住想知道对齐后会是什么样子。

MWE如下:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsthm}
\usepackage[framemethod=TikZ]{mdframed}
%%%
\newcounter{theo}[section]\setcounter{theo}{0}
\renewcommand{\thetheo}{\arabic{section}.\arabic{theo}}
\newenvironment{theo}[2][]{%
\refstepcounter{theo}%
\ifstrempty{#1}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Theorem~\thetheo};}}
}%
{\mdfsetup{%
frametitle={%
\tikz[baseline=(current bounding box.east),outer sep=0pt]
\node[anchor=east,rectangle,fill=blue!20]
{\strut Theorem~\thetheo:~#1};}}%
}%
\mdfsetup{innertopmargin=10pt,linecolor=blue!20,%
linewidth=2pt,topline=true,%
frametitleaboveskip=\dimexpr-\ht\strutbox\relax
}
\begin{mdframed}[]\relax%
\label{#2}}{\end{mdframed}}
%%%

\title{FANCY MDFRAMED ALIGNMENT TEST}
\author{John Doe}
\date{January 2022}

\begin{document}

\maketitle

\section{Introduction}

\begin{theo}

TEST.

\end{theo}

\end{document}
  • 是否可以将标题文本和框与水平线对齐?换句话说,是否可以将其稍微向上移动?

我尝试在解决方案网站上提问,但它从未出现。

答案1

来自 texblog 的示例在mdframed 手册(第 21 页)。手册还包含另一个示例,其中标题框位于顶行的中央,第 27 页。您可以调整此示例以获得所需的结果。

该示例使用选项绘制标题节点singleextra。此“系列”extra键(extra、singleextra、firstextra、secondextra、middleextra)定义框架上的点(P)和,其中和的交点,即,是顶角,如手册中的示例所用。想法是以此坐标作为位置绘制标题节点,即。(O)(P)(O)(P-|O)\node at (P-|O)

然后,您需要为标题节点设置一些选项。重要的是,anchor=west这会导致框架的左侧放置在指定位置(P-|O),因为如果标题较长,默认center位置会导致节点向左扩展。此外,您可以使用xshift手册中的方法将标题放置在角落附近,而不是稍微靠内一点的地方。最后,可以使用使框更紧密一些inner sep=0.5mm。这在垂直方向上看起来不错,但水平方向上有点太紧,因此您可以\hspace在定理标题之前和之后添加一些。最后设置一些innertopmargin以将内容向下移动(因为标题与内容框重叠),就这样。

梅威瑟:

\documentclass{article}
\usepackage{amsthm}
\usepackage[framemethod=TikZ]{mdframed}
%%%
\newcounter{theo}[section]\setcounter{theo}{0}
\renewcommand{\thetheo}{\arabic{section}.\arabic{theo}}
\newenvironment{theo}[2][]{%
\refstepcounter{theo}%
\ifstrempty{#1}%
{\mdfsetup{%
singleextra={\node[anchor=west,xshift=5mm,rectangle,fill=blue!20,inner sep=0.5mm] at (P-|O) %
{\hspace*{5pt}\strut Theorem~\thetheo\hspace*{5pt}};}}%
}%
{\mdfsetup{%
innertopmargin=2cm,
singleextra={\node[anchor=west,xshift=5mm,rectangle,fill=blue!20,inner sep=0.5mm] at (P-|O) %
{\hspace*{5pt}\strut Theorem~\thetheo:~#1\hspace*{5pt}};}}%
}%
\mdfsetup{linecolor=blue!20,%
linewidth=2pt,topline=true,%
innertopmargin=1.5Em,
}
\begin{mdframed}[]\relax%
\label{#2}}{\end{mdframed}}
%%%

\title{FANCY MDFRAMED ALIGNMENT TEST}
\author{John Doe}
\date{January 2022}

\begin{document}

\maketitle

\section{Introduction}

\begin{theo}[Pythagoras]{thm:t1}
TEST.
\end{theo}

\end{document}

结果:

在此处输入图片描述


下面是一个版本(针对具有明确标题的定义),它以小写的 为中心,位于条形图的中间e,使用text heighttext depth通过反复试验找到的值。我不确定它是否更好,我认为原始版本更可取。

\mdfsetup{%
extra={\node[anchor=west,xshift=5mm,rectangle,fill=blue!20,inner sep=0.5mm,text height=7pt,text depth=2.5pt] at (P-|O) %
{\hspace*{5pt}\strut Theorem~\thetheo:~#1\hspace*{5pt}};}}%

在此处输入图片描述

相关内容