LaTeX 复杂盒状框架设计

LaTeX 复杂盒状框架设计

我已经很久没碰过 LaTeX 了,最近我试着回忆起所有我忘记的东西。我没有去翻阅手册,而是查找一些设计不错的书,并尝试用 LaTeX 制作一些页面。

我喜欢的一本书是 Thomas A. Moore 的《广义相对论练习册》。我尝试解决其中的一些问题,并用 LaTeX 键入它们。我问作者是否可以发送他的 LaTeX 模板,他说他愿意,但在用 LaTeX 挣扎了一整个夏天之后,他放弃了,并使用 Adob​​e InDesign 和 MathMagic 设计了这本书。

所以我想问如何制作如下所示的方框。特别是我不知道如何制作整个文本(包括带有图片的边距)的框架。以下是页面示例(您可以从中找到更多信息http://pages.pomona.edu/~tmoore/grw/Resources/GRWBook.pdf

在此处输入图片描述

答案1

以下是使用tcolorbox包装。 由此产生的框允许分页。

在此处输入图片描述

包含该图形的框的放大图像:

在此处输入图片描述

请注意,该框跨越整个文本宽度加上边距注释区域,但文本宽度限制为标准\textwidth。这需要一些特殊处理,通过覆盖,取决于盒子扩大是在偶数页还是奇数页上进行,这是使用包提供的check odd page\strictpagecheck和来完成的。\ifoddpagechangepage

\marginnote可以使用from包将材料放置在边注区域。可以使用frommarginnote提供图形标题(如示例中所示)(参见示例代码)。\captionofcaption

代码:

\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}

相关内容