我最近读了一本书算法设计经过乔恩·克莱因伯格和伊娃·塔多斯,其写作风格非常独特。本书没有典型的 LaTeX 环境,如定理、引理和推论,CLRS 教科书.相反,所有这些重要的块按顺序编号。
例如,此图像取自 KT 教科书第 1 章第 7 页,可用的来自出版商的网站。(本页解释了 Gale-Shapley 算法稳定婚姻问题。
如您所见,编号为 (1.1) 和 (1.2) 的块可以引理在通常的教科书中,(1.3)可以定理。我喜欢他们的写作风格并且想模仿他们。
我的问题:模仿这种写作风格的最佳方法是什么?假设我想定义一个执行textblock
以下操作的环境来模仿 KT 写作风格。
- 此环境可以是阴影,也可以是非阴影。(如上图所示,(1.3)块是阴影,而(1.1)和(1.2)不是阴影。)
- 此环境的编号包括章节编号。
- 我希望这个区块跨越整个
textwidth
。
我该如何定义这样的环境?
答案1
amsthm
以下是使用和的实现tcolorbox
:
\documentclass{article}
\usepackage{lipsum} % just for the example
\usepackage{amsthm,tcolorbox}
\newtheoremstyle{block}
{\topsep}% space above
{\topsep}% space below
{\itshape}% body font
{}% indent
{\bfseries}% head font
{}% punctuation
{1em}% space between head and body
{(\thmnumber{#2})}
\theoremstyle{block}
\newtheorem{block}{}[section]
\newtheorem{block*}[block]{}
\tcolorboxenvironment{block*}{
frame empty,
colback=black!15!white,
grow to left by=6pt,
grow to right by=6pt,
left=1.6pt,
right=1.6pt,
arc=0pt
}
\begin{document}
\section{Whatever}
\lipsum[2]
\begin{block}
Some text to see what happens,
some text to see what happens,
some text to see what happens,
some text to see what happens.
\end{block}
\lipsum[2]
\begin{block*}
Other text that should be the statement of
an important theorem, so it is on a grey
background.
\end{block*}
\lipsum[2]
\end{document}
答案2
xcolor
除了阴影块之外没有任何包的一种方法:
\documentclass[a4paper]{article}
\usepackage[margin=1cm]{geometry} % little margin for MWE
\usepackage{lipsum} % dummy text for MWE
\usepackage{xcolor} % for shaded gray block
\newcounter{para}[section]\setcounter{para}{0}
\def\block#1{%
\refstepcounter{para}
\bigskip
\noindent\textbf{(\thesection.\thepara)}\quad{\em #1}
\par\bigskip}
\def\blockg#1{ %
\refstepcounter{para}
\bigskip
\fboxsep1em
\noindent\fcolorbox{gray!40}{gray!20}{
\begin{minipage}{\dimexpr\linewidth-2em}
\noindent\textbf{(\thesection.\thepara)}\quad\em#1
\end{minipage}}
\par\bigskip}
\begin{document}
\section{Lore ipsum}
\lipsum[11] % normal text
\block{\lipsum[2]} % block 1.1
\lipsum[3] % normal text
\blockg{\lipsum[4]} % block 1.2
\lipsum[5] % normal text
\section{Dolor sit amet}
\lipsum[12] % normal text
\block{\lipsum[13]} % block 2.1
\end{document}