我已经很久没碰过 LaTeX 了,最近我试着回忆起所有我忘记的东西。我没有去翻阅手册,而是查找一些设计不错的书,并尝试用 LaTeX 制作一些页面。
我喜欢的一本书是 Thomas A. Moore 的《广义相对论练习册》。我尝试解决其中的一些问题,并用 LaTeX 键入它们。我问作者是否可以发送他的 LaTeX 模板,他说他愿意,但在用 LaTeX 挣扎了一整个夏天之后,他放弃了,并使用 Adobe InDesign 和 MathMagic 设计了这本书。
所以我想问如何制作如下所示的方框。特别是我不知道如何制作整个文本(包括带有图片的边距)的框架。以下是页面示例(您可以从中找到更多信息http://pages.pomona.edu/~tmoore/grw/Resources/GRWBook.pdf)
答案1
以下是使用tcolorbox
包装。 由此产生的框允许分页。
包含该图形的框的放大图像:
请注意,该框跨越整个文本宽度加上边距注释区域,但文本宽度限制为标准\textwidth
。这需要一些特殊处理,通过覆盖,取决于盒子扩大是在偶数页还是奇数页上进行,这是使用包提供的check odd page
、\strictpagecheck
和来完成的。\ifoddpage
changepage
\marginnote
可以使用from包将材料放置在边注区域。可以使用frommarginnote
提供图形标题(如示例中所示)(参见示例代码)。\captionof
caption
代码:
\documentclass{book}
\usepackage[many]{tcolorbox}
\usepackage{marginnote}
\usepackage{changepage}
\usepackage{caption}
\strictpagecheck
\usepackage{lipsum}% just for the example
\newlength\frameoverhang
\setlength\frameoverhang{\dimexpr2\marginparsep+\marginparwidth\relax}
\definecolor{BoxGray}{RGB}{196,196,198}
\newtcolorbox[auto counter,number within=chapter]{Compbox}[1]{
enhanced,
breakable,
arc=0pt,
outer arc=0pt,
boxrule=0pt,
colframe=BoxGray,
colback=white,
title={BOX~\thetcbcounter\ #1},
coltitle=black,
fonttitle=\Large\sffamily\strut,
width=\textwidth,
check odd page=true,
overlay unbroken={
\ifoddpage
\draw[line width=1mm,BoxGray]
(frame.north west)
rectangle
([xshift=\frameoverhang]frame.south east);
\fill[BoxGray]
(frame.north west)
rectangle
([xshift=\frameoverhang]frame.east|-title.south);
\else
\draw[line width=1mm,BoxGray]
([xshift=-\frameoverhang]frame.north west)
rectangle
(frame.south east);
\fill[BoxGray]
([xshift=-\frameoverhang]frame.north west)
rectangle
(frame.east|-title.south);
\fi
},
overlay first={
\ifoddpage
\draw[line width=1mm,BoxGray]
(frame.north west) --
(frame.south west);
\draw[line width=1mm,BoxGray]
([xshift=\frameoverhang]frame.north east) --
([xshift=\frameoverhang]frame.south east);
\fill[BoxGray]
(frame.north west)
rectangle
([xshift=\frameoverhang]frame.east|-title.south);
\else
\draw[line width=1mm,BoxGray]
([xshift=-\frameoverhang]frame.north west) --
([xshift=-\frameoverhang]frame.south west);
\draw[line width=1mm,BoxGray]
(frame.north east) --
(frame.south east);
\fill[BoxGray]
([xshift=-\frameoverhang]frame.north west)
rectangle
(frame.east|-title.south);
\fi
},
overlay middle={
\ifoddpage
\draw[line width=1mm,BoxGray]
(frame.north west) --
(frame.south west);
\draw[line width=1mm,BoxGray]
([xshift=\frameoverhang]frame.north east) --
([xshift=\frameoverhang]frame.south east);
\else
\draw[line width=1mm,BoxGray]
([xshift=-\frameoverhang]frame.north west) --
([xshift=-\frameoverhang]frame.south west);
\draw[line width=1mm,BoxGray]
(frame.north east) --
(frame.south east);
\fi
},
overlay last={
\ifoddpage
\draw[line width=1mm,BoxGray]
(frame.north west) --
(frame.south west) --
([xshift=\frameoverhang]frame.south east) --
([xshift=\frameoverhang]frame.north east);
\else
\draw[line width=1mm,BoxGray]
([xshift=-\frameoverhang]frame.north west) --
([xshift=-\frameoverhang]frame.south west) --
(frame.south east) --
(frame.north east);
\fi
}
}
\begin{document}
\chapter{A test chapter}
\begin{Compbox}{The Metric Transformation Law}
\marginnote{
\centering
\tikz\fill[cyan] (0,0) rectangle ++(3,2);
\captionof{figure}{this is a test casption for a figure in the marginal note area}
}%
\lipsum[2]\lipsum[2]
\end{Compbox}
\begin{Compbox}{The Metric Transformation Law}
\lipsum[2-3]
\end{Compbox}
\begin{Compbox}{The Metric Transformation Law}
\lipsum[2-3]
\end{Compbox}
\end{document}