起初这可能看起来像是重复的,但我找不到任何解决方案,尽管我尝试了各种(组合)vspace
、minipage
和框命令。
情况:我有一些图片(所有图片大小相同,约为文本宽度的 0.4 倍)和解释这些图片的文字。我想将文字放在wrapfigure
图片旁边和周围。(理想情况下,图片在不均匀的页面上总是左对齐,在均匀的页面上总是右对齐,但这是另一个问题。)
我尝试了小页面,但它们确实像文本一样重叠。\hfill
也没有做任何事情。
问题:有时解释的高度小于图片的高度,在这种情况下,下面的文字会位于错误的图片旁边。
\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage{blindtext}
\usepackage{wrapfig}
\begin{document}
\begin{wrapfigure}{l}{0.2\linewidth}
\rule{\linewidth}{5 cm}
\end{wrapfigure}
\blindtext
\begin{wrapfigure}{l}{0.2\linewidth}
\rule{\linewidth}{5 cm}
\end{wrapfigure}
\textbf{Text that belongs to the second box. Please align me there.}\\
\blindtext
\end{document}
问题:如何让粗体文本与第二个框对齐(自动),而无需vspace
?请记住,我的解释长度不等,不像两个盲文,所以vspace{x}
并不总是有效。
编辑:(澄清)
我不想使用标题,因为还会有其他(小得多的)图片需要环绕文本。对齐每个说明的第一行不是问题,但如果文本较短,则要防止图片重叠。我提供了一个例子。
我尝试了以下操作,但无法使小页面的最小高度等于或高于图像的高度。
\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
\usepackage{ifthen}
\usepackage{wrapfig}
\usepackage{graphicx}
\begin{document}
\begin{minipage}{\linewidth}
\begin{wrapfigure}{l}{0.4\linewidth}
\vspace{-\baselineskip}
\ifthenelse{\isodd{\thepage}}{\hspace*{-0\textwidth}}{\hspace*{1\textwidth}}
\includegraphics[width=1\linewidth]{pic.jpg}
\end{wrapfigure}
\blindtext
\end{minipage}
% \vspace{2 cm} % Now they are no longer overlapping. I don't want to have to do this. As might have to adjust the next command.
\vspace{1 cm} % This is some standard space to get the text above away from the image below.
\begin{minipage}{\linewidth}
\begin{wrapfigure}{l}{0.4\linewidth}
\vspace{-\baselineskip}
\ifthenelse{\isodd{\thepage}}{\hspace*{-0\textwidth}}{\hspace*{1\textwidth}}
\includegraphics[width=1\linewidth]{pic.jpg}
\end{wrapfigure}
\blindtext
\end{minipage}
\vspace{0.1 cm}
\end{document}
后续问题是,在小页面中,此\ifthenelse{\isodd{\thepage}}
功能似乎不起作用。我如何将信息放入小页面中?
我附上了一张我想要进一步说明的图片。我知道 LaTeX 不是为这样的事情设计的,也不是为这样的事情设计的,但 OpenOffice 在文件大小超过 100 MB 时就停止工作了,所以我必须寻找替代方案。这可能吗?
答案1
我不确定您是否真的在寻找长边标题,但除此之外,这是一种使用小页面作为主文本和adjustbox
包装以获得顶部对齐图像的方法:
\documentclass[a4paper]{article}
\usepackage[export]{adjustbox}%
\usepackage{lipsum,graphicx}
\parskip1em
\def\capR#1#2{\includegraphics[width=.3\linewidth,valign=t]{#1}%
\hfill\begin{minipage}[t]{.6\textwidth}#2\end{minipage}}
\def\capL#1#2{\begin{minipage}[t]{.6\textwidth}#2\end{minipage}
\hfill\includegraphics[width=.3\linewidth,valign=t]{#1}}
\begin{document}
\capR{example-image-9x16}{\lipsum[2]}
\capR{example-image-a}{\lipsum[3]}
\capL{example-image-a}{\lipsum[4]}
\end{document}
对于次要问题,可以使用或包\ifoddpage
的条件(changepage
ifoddpage
这里与前者相同的 MWE)。
编辑:
如果需要换行文本,另一种方法是wrapfigure
在 内放置minipage
。这种方法还可以解决使用I
位置和进行 \ifoddpage 测试时遇到的麻烦twoside
。问题是当文本太短时。然后minipage
环境的高度将小于图像的高度。但幸运的是,您可以强制设置小页面的高度。示例:
\documentclass[a4paper,twoside]{article}
\usepackage{lipsum,graphicx,calc}
\usepackage{wrapfig}
\parskip1em\parindent0pt
\intextsep0pt
\newlength\gh \newlength\gw
\def\ImgNW#1#2{
\def\mygraphic{\includegraphics[width=.25\linewidth]{#1}}
\setlength\gh{\heightof{\mygraphic}}
\setlength\gw{\widthof{\mygraphic}}
\begin{minipage}[t][\gh+1em]{\textwidth}
\begin{wrapfigure}{I}[0pt]{0.25\textwidth}
\includegraphics[width=\linewidth]{#1}
\end{wrapfigure}#2
\end{minipage}\par}
\def\ImgW#1#2{
\def\mygraphic{\includegraphics[width=.25\linewidth]{#1}}
\setlength\gh{\heightof{\mygraphic}}
\setlength\gw{\widthof{\mygraphic}}
\begin{minipage}[t]{\textwidth}
\begin{wrapfigure}{I}[0pt]{0.25\textwidth}
\includegraphics[width=\linewidth]{#1}
\end{wrapfigure}#2
\end{minipage}\par}
\begin{document}
\ImgNW{example-image-9x16}{\lipsum[2]}
\ImgW{example-image-a}{\parskip1em\lipsum[3-4]}
\ImgW{example-image-b}{\lipsum[4]}
\newpage
\ImgW{example-image-c}{\lipsum[5]}
\ImgNW{example-image-9x16}{\lipsum[6]}
\ImgW{example-image-1x1}{\lipsum[7]}
\end{document}
答案2
通常情况下,图形的位置低于文本的开头,但文档的开头显然是个例外。因此,要将图形的顶部与文本的顶部对齐,您需要通过 \baselineskip 提高图形或降低文本。
可以使用 \WFclear 强制终止环绕图形,但您仍然需要留出足够远的空间以免与图形重叠。
\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage{blindtext}
\usepackage{wrapfig}
\newlength{\oldparindent}
\begin{document}
\noindent\rule{\linewidth}{1pt}
\begin{wrapfigure}{l}{0.2\linewidth}
\vspace{-\baselineskip}%
\rule{\linewidth}{5 cm}
\end{wrapfigure}
\noindent\parbox[t][\dimexpr 5cm+\baselineskip][t]{\linewidth}%
{\parindent=15pt \blindtext}
\WFclear
\begin{wrapfigure}{l}{0.2\linewidth}
\vspace{-\baselineskip}%
\rule{\linewidth}{5 cm}
\end{wrapfigure}
\textbf{Text that belongs to the second box. Please aligne me there.}\\
\blindtext
\end{document}
实际上,如果您不打算将文本环绕在图形周围,那么最好不要使用 wrapfigure。
\documentclass[a4paper]{article}
\usepackage{a4wide}
\usepackage{blindtext}
\usepackage{wrapfig}
\newlength{\oldparindent}
\begin{document}
\noindent\rule{\linewidth}{1pt}
\noindent\raisebox{\dimexpr 0.6\baselineskip-\height}{\rule{0.2\linewidth}{5 cm}}\hfill
\begin{minipage}[t]{\dimexpr 0.8\linewidth - \columnsep}
\parindent=15pt
\blindtext
\end{minipage}
\bigskip
\begin{wrapfigure}{l}{0.2\linewidth}
\vspace{-\baselineskip}%
\rule{\linewidth}{5 cm}
\end{wrapfigure}
\textbf{Text that belongs to the second box. Please aligne me there.}\\
\blindtext
\end{document}