我发现了一个整洁解决方案用来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 height
和text 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}};}}%