将文本与图形垂直对齐

将文本与图形垂直对齐

起初这可能看起来像是重复的,但我找不到任何解决方案,尽管我尝试了各种(组合)vspaceminipage和框命令。

情况:我有一些图片(所有图片大小相同,约为文本宽度的 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的条件(changepageifoddpage这里与前者相同的 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}

相关内容