编号的 mdframed 环境,但不使用定理 hack

编号的 mdframed 环境,但不使用定理 hack

我正在尝试为编号的多页框创建一个 mdframed 环境。我遇到的问题是,我似乎无法使格式和编号按我想要的方式工作。我尝试了以下两种方法。

定理

以下代码提供了正确的标签行为,但我无法使用 mdfdefinestyle frametitle 命令来制作漂亮的阴影框,就像这个例子。更糟糕的是,它不会将框拆分到多个页面上!

%% Define box environment as a mock theorem
% Give the box style
\mdfdefinestyle{boxstyle}{%
    linewidth=2pt,%
    innertopmargin=\topskip
}

% Define the theorem style with amsthm
\newtheoremstyle{box}% <name>
{3pt}% <Space above>
{3pt}% <Space below>
{}% <Body font>
{}% <Indent amount>
{\bfseries}% <Theorem head font>
{\\}% <Punctuation after theorem head>
{.5em}% <Space after theorem headi>
{#1 #2: #3}% <Theorem head spec (can be left empty, meaning `normal')>

% Define the new environment
\theoremstyle{box}
\mdtheorem[style=boxstyle]{infobox}{Box}[chapter]


% Example usage: 
%  - xrefs works as expected
%  - formatting not ideal
%  - box won't break across multiple pages
Box~\ref{box:mybox}
\begin{infobox}[Box title]
blah blah
\end{infobox}

纽姆登夫

或者,如果我尝试定义 newmdenv,编号不起作用,我无法将标签放在正确的位置。我无法发布图像,但我基本上得到了 Box 1.0 上的计数器和 Box 1.1 上的外部参照,而“Box 1.0”部分在框架之外。

\documentclass{book}
\usepackage{xcolor}
\usepackage{mdframed}
\usepackage{blindtext}
\usepackage{color}

%% set the counter for your environment
\newcounter{infobox}[chapter]
\renewcommand{\theinfobox}{\thechapter.\arabic{infobox}}

%% define the style
\mdfdefinestyle{boxstyle}{%
    linewidth=2pt,%
    frametitlerule=true,%
    frametitlebackgroundcolor=gray!20,%
    innertopmargin=\topskip,
}

%% setup the environments
\newmdenv[%
    style=boxstyle,%
    settings={\global\refstepcounter{infobox}},%
    frametitlefont={\bfseries Box~\theinfobox\quad},%
]{infobox}

\begin{document}
\chapter{Section One}
Box~\ref{box:infobox} but compare with \theinfobox
\begin{infobox}[frametitle=Some Headlinetext]
\label{box:infobox}
    \blindtext
\end{infobox}

\end{document}

看来我应该能够使用第二个模板的某个版本来做到这一点。毕竟,框架不是定理。

答案1

这个例子对我有用:

\documentclass{article}
\usepackage{lipsum}

\newcounter{infobox}[section]

\renewcommand{\theinfobox}{\thesection.\arabic{infobox}}

\usepackage[framemethod=TikZ]{mdframed}
\newenvironment{infobox}[1][]{%
    \refstepcounter{infobox}
    \begin{mdframed}[%
        frametitle={Infobox \theinfobox\ #1},
        skipabove=\baselineskip plus 2pt minus 1pt,
        skipbelow=\baselineskip plus 2pt minus 1pt,
        linewidth=0.5pt,
        frametitlerule=true,
        frametitlebackgroundcolor=gray!30
    ]%
}{%
    \end{mdframed}
}


\begin{document}

\section{Stuff}

\lipsum[1]

\begin{infobox}[Sausage]
\lipsum[2]
\label{ibx:sausage}
\end{infobox}

Infobox \ref{ibx:sausage} says:
% 
\lipsum[2]

\begin{infobox}[Fried eggs]
\lipsum[4-5]
\label{ibx:eggs}
\end{infobox}

Infobox \ref{ibx:eggs} says:
% 
\lipsum[4]

\lipsum[5]

\end{document}

使用\refstepcounter而不是\stepcounter使得计数器的当前值infobox可供文本中引用。

请注意,我使用了当前的 github 版本mdframed来编译此示例。我没有测试它是否适用于较旧的当前 ctan 版本。

相关内容