自动调整两列布局

自动调整两列布局

在为教科书准备解决方案手册时,我经常想将一些文本和相关图形并排放置作为解决方案的一部分。我最终要么使用多列模式,要么(更常见)使用双列表格。后一种解决方案的问题在于它需要调整列宽以使整个内容看起来正确。我想要一种更自动化的方法来实现这一点。具体来说,我想要两列,一列包含文本,另一列包含图形;我希望包含图形的列的大小能够使图形刚好适合该列,而包含文本的列则左右对齐。

最近在 comp.text.tex 中有一个相关的讨论(“spring margin”,6 月 8 日),其中有人建议使用 \leftspringright 来添加回忆录类,但快速阅读后发现它似乎并没有真正达到我想要的效果。

有什么建议么?

这是一个例子。以下文本:

$\,$\newline  
\begin{tabular}{m{2.8in}m{3.2in}}  
The point on the unit circle associated with $-13\pi/3$ is  
$(1/2,-\sqrt{3}/2)$, so  
\[  
  \cot (-13\pi/3) = -1/\sqrt{3}=-\sqrt{3}/3.  
\]  
&  
\begin{center}  
\includegraphics[scale=0.75]{1_3_13.pdf}  
\end{center}  
\end{tabular}  

生成以下 pdf 片段: 替代文本 该文档有数百张这样的图像,通常根据图像的大小需要不同的间距,以免超出右边距。

我的序言如下:

\documentclass[twoside]{book} 
\usepackage[margin=1in,twoside]{geometry}
\usepackage{fancyhdr} 
\usepackage{amstext}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{array}
\usepackage{multicol}

所以我没有使用任何特别不寻常的东西。

答案1

我怀疑表格型(回忆录中也有)也许能够处理这个问题。

类似这样的内容可能是解决方案的基础:

\begin{tabularx}{\textwidth}{Xc}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Maecenas in felis sapien. 
& \fbox{\parbox[t]{2cm}{Simulated Figure}}
\end{tabularx}

\begin{tabularx}{\textwidth}{Xc}
Phasellus consectetur, sapien nec mollis euismod, 
sapien sapien posuere justo, nec elementum sapien nisl vitae metus. 
Ut nisl lacus, tincidunt eget fringilla eget, eleifend sit amet ipsum. 
& \fbox{\parbox[t]{4cm}{Simulated Figure}}
\end{tabularx}

该片段\fbox{\parbox[t]{4cm}{Simulated Figure}}代替了您的数字。

这可能会有问题,具体取决于您的图形的确切性质。如果您愿意发布示例,我们可能会更好地帮助您。

答案2

这是@rogerl 澄清后的一个新的答案。


可以测量图形,并相应地调整桌子尺寸。

这是一个(稍微有点庞大的)概念证明:

\newsavebox{\figbox}
\newlength{\myfigwid}
\newlength{\myfigheight}
\newlength{\myotherside}
\sbox{\figbox}{\includegraphics[scale=1.2]{1_3_13.pdf}}
\settowidth{\myfigwid}{\usebox{\figbox}}
\settoheight{\myfigheight}{\usebox{\figbox}}
\setlength{\myotherside}{\textwidth}
\addtolength{\myotherside}{-\myfigwid}
\addtolength{\myotherside}{-5mm} % column separator
\begin{tabular*}{\textwidth}{m{\myotherside}c}
\parbox[c]{\myotherside}{
The point on the unit circle associated with $-13\pi/3$ is  
$(1/2,-\sqrt{3}/2)$, so  
\[  
  \cot (-13\pi/3) = -1/\sqrt{3}=-\sqrt{3}/3.  
\]}
&
\parbox[c][\myfigheight][c]{\myfigwid}{\usebox{\figbox}}
\end{tabular*}

刚刚编辑了解决方案以提供更好的居中效果(我认为......)

答案3

从语义上讲,将文本和图形按正常书写方式排列(如 TH 所建议的),而不是将其放在表格环境中;您可以使用该wrapfig环境。这样也可以将图形向左或向右排列,从而改善页面的整体外观。

这是一个解决方案:

\begin{wrapfigure}[10]{r}[-1.5em]{0pt}
\includegraphics[width=2.0in]{./graphics/p93.pdf}
\end{wrapfigure}

\quad  % dummy to let wrapfig start before 
           % actual paragraph

\mathsubparagraph{Parallelogram.}%
\index{Area of parallelogram, to find}%
\index{Parallelogram, to find area of}%
---To find the area of a parallelogram,
multiply its
length, or \textit{base} as it is
called, by its height, or
\textit{altitude} as it is called, or
expressed in the simple
form of an algebraic
equation.---
\[
A = b \times  h
\]

\begin{wrapfigure}[9]{l}[-1.5em]{0pt}
\includegraphics[width=1.5in]{./graphics/p94a.pdf}
\end{wrapfigure}

\mathsubparagraph{Triangle.}%
\index{Area of triangle, to find}%
\index{Triangle, to find area of}%
---To find the area of a triangle when
the base and altitude are given,
multiply its base by its altitude
and divide by $2$, or
\[
A=\frac{bh}{2}
\]
}

您可能一开始需要进行一些实验,但如果您的文本和图形的宽度和文本数量大致相同,则所涉及的工作量就不会那么多。

上面的代码给了我这个: 替代文本

答案4

如何使用wrapfig将图形放在右侧,然后让文本围绕图形流动?例如

\usepackage{wrapfig}
\newbox\wfigbox
\newcommand*\wfig[3][]{%
        \setbox\wfigbox\hbox{\includegraphics[#1]{#2}}%
        \begin{wrapfigure}{r}{\wd\wfigbox}%
                \box\wfigbox
                \caption{#3}%
        \end{wrapfigure}%
}

然后你就像这样使用它。

\wfig[scale=2]{image-name}{Caption here}

可选参数与 的可选参数相同\includegraphics

相关内容