我正在尝试为编号的多页框创建一个 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 版本。