我有两个问题和一个附加问题。
第一个问题
图形换行效果不佳,文本顶部和图形顶部没有完全对齐,有一条多余的线。我该如何避免这种情况?
第二个问题
正如你在第二页看到的,文本中有空白,我不想要它。
加法问题
有没有办法,让乳胶识别出没有足够的空间放置图片,然后图形和文本将从页面顶部开始。
添加信息
如您所见,我正在使用scale=0.35
,因为有多个图形,并且我想在每个图形上保持相同的比例,并且每个图形都有不同的宽度和高度。
代码
\documentclass{report}
\usepackage{graphicx}
\usepackage{wrapfig}
\begin{document}
%----------------------------------------------------------------------------
\chapter{Lorem}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
\section{Lorem}
%----------------------------------------------------------------------------
\begin{wrapfigure}{l}{\wd0}
\centering
\includegraphics[scale=0.35]{example-image}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut
\begin{wrapfigure}{l}{\wd0}
\centering
\includegraphics[scale=0.35]{example-image}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
\end{document}
截屏
答案1
这显示了如何使用\needspace
。诀窍是先测量所需的高度。
实际上,除非您位于组内,否则应该使用命名的保存框而不是框 0。这应该没问题,但有时却不行。
\documentclass{report}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{needspace}
\begin{document}
%----------------------------------------------------------------------------
\chapter{Lorem}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
\section{Lorem}
%----------------------------------------------------------------------------
\sbox0{\includegraphics[scale=0.35]{example-image}}%
\needspace{\dimexpr \ht0+2\intextsep}%
\begin{wrapfigure}{l}{\wd0}
\usebox0
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut
\sbox0{\includegraphics[scale=0.35]{example-image}}%
\needspace{\dimexpr \ht0+2\intextsep}%
\begin{wrapfigure}{l}{\wd0}
\usebox0
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
\end{document}
我突然想到,可以使用\parshape
和\afterpage
在页面顶部添加一个包装图像。如果图像适合此页面,或者图像超出第一段,它甚至会使用 wrapfigure。但是,它必须在页面上只剩下一个段落时使用。
棘手的部分是从另一个环境内部进行工作\parshape
。wrapfigure
\documentclass{article}
\usepackage{wrapfig}
\usepackage{environ}
\usepackage{xparse}
\usepackage{varwidth}
\usepackage{afterpage}
\usepackage{lipsum}% MWE only
\usepackage{showframe}
\makeatletter
\newsavebox{\wp@image}
\NewDocumentEnvironment{wrappage}{O{0} m O{0} m}{\par
% #1 (optional) is the number of lines until the end of the page
% #2 is r (right) or l (left)
% #3 (optional) is the number of lines for the image.
% #4 width (or 0pt to compute).
\xdef\wp@page{#1}%
\ifnum\wp@page=0\relax
\dimen0=\dimexpr \pagegoal-\pagetotal-0.5\baselineskip\relax
\xdef\wp@page{\the\numexpr \dimen0/\baselineskip}%
\fi
\xdef\wp@side{#2}%
\xdef\wp@lines{#3}%
\xdef\wp@width{#4}%
\def\@captype{figure}%
\wp@environ}% body here
{\endwp@environ
\ifnum\wp@lines=0\relax
\dimen0=\dimexpr \ht\wp@image+\dp\wp@image+\intextsep\relax
\xdef\wp@lines{\the\numexpr \dimen0/\baselineskip}%
\fi
\ifdim \wp@page\baselineskip>\dimexpr\wp@lines\baselineskip+\intextsep\relax% put figure on this page
\AddToHookNext{para/before}{\begin{wrapfigure}[\wp@lines]{\wp@side}{\wp@width}
\box\wp@image
\end{wrapfigure}}
\else
\if r\wp@side\relax
\wp@right% put image on right side
\else
\if l\wp@side\relax
\wp@left% put image on left side
\else
\errmessage{Bad wrappage argument: \textbf{\wp@side} must be \texbf{r} or \textbf{l}.}%
\fi
\fi
\fi
}
\def\wp@right{% handle right side wrapfig
\afterpage{\xdef\wp@extra{\the\dimexpr \wp@lines\baselineskip-\ht\AP@partial-\dp\AP@partial}%
\noindent\hspace{\dimexpr \textwidth-\wp@width}%
\raisebox{\dimexpr \ht\strutbox-\height}[\ht\strutbox][0pt]{\box\wp@image}%
\vskip-\baselineskip
\unvbox\AP@partial
\ifdim\wp@extra>0pt\relax
\AddToHookNext{para/begin}{\begin{wrapfigure}{r}{\wp@width}
\vskip-\intextsep
\rule{0pt}{\wp@extra}
\vskip-\intextsep
\end{wrapfigure}\vskip-\baselineskip\indent}%
\fi}
\xdef\wp@parshape{\the\numexpr \wp@page+\wp@lines+1}%
\edef\wp@test{\the\textwidth}%
\count1=\wp@page\relax
\loop\ifnum\count1>0
\advance\count1 by -1
\xdef\wp@parshape{\wp@parshape\space 0pt \wp@test}%
\repeat
\edef\wp@test{\the\dimexpr \textwidth-\wp@width-\columnsep}%
\count1=\wp@lines\relax
\loop\ifnum\count1>0
\advance\count1 by -1
\xdef\wp@parshape{\wp@parshape\space 0pt \wp@test}%
\repeat
\xdef\wp@parshape{\wp@parshape\space 0pt \the\textwidth}%
\AddToHookNext{para/before}{\parshape=\wp@parshape}%
}
\def\wp@left{% handle right side wrapfig
\afterpage{\xdef\wp@extra{\the\dimexpr \wp@lines\baselineskip-\ht\AP@partial-\dp\AP@partial}%
\noindent\raisebox{\dimexpr \ht\strutbox-\height}[0pt][0pt]{\box\wp@image}%
\vskip-\baselineskip
\unvbox\AP@partial
\ifdim\wp@extra>0pt\relax
\AddToHookNext{para/begin}{\begin{wrapfigure}{l}{\wp@width}
\vskip-\intextsep
\rule{0pt}{\wp@extra}
\vskip-\intextsep
\end{wrapfigure}\vskip-\baselineskip\indent}%
\fi}
\xdef\wp@parshape{\the\numexpr \wp@page+\wp@lines+1}%
\edef\wp@test{\the\textwidth}%
\count1=\wp@page\relax
\loop\ifnum\count1>0
\advance\count1 by -1
\xdef\wp@parshape{\wp@parshape\space 0pt \wp@test}%
\repeat
\edef\wp@temp{\the\dimexpr \wp@width+\columnsep}%
\edef\wp@test{\the\dimexpr \textwidth-\wp@temp}%
\count1=\wp@lines\relax
\loop\ifnum\count1>0
\advance\count1 by -1
\xdef\wp@parshape{\wp@parshape\space \wp@temp \wp@test}%
\repeat
\xdef\wp@parshape{\wp@parshape\space 0pt \the\textwidth}%
\AddToHookNext{para/before}{\parshape=\wp@parshape}\par
}
\NewEnviron{wp@environ}{% put \BODY into \wp@image
\ifdim\wp@width=0pt
\savebox\wp@image{\varwidth{\textwidth}
\renewcommand{\caption}[2][\empty]{\par}% dummy caption
\BODY
\endvarwidth}%
\xdef\wp@width{\the\wd\wp@image}%
\fi
\global\setbox\wp@image=\hbox{\minipage{\wp@width}\BODY\endminipage}
}
\makeatother
\begin{document}
\noindent\rule{\textwidth}{40\baselineskip}
\begin{wrappage}{r}{0pt}
\rule{100pt}{5cm}
\caption{test}
\end{wrappage}
\lipsum[1-4]
\end{document}
答案2
\intextsep
是在浮动之前和之后添加的垂直空间。要将段落的顶行与换行的图形对齐,可以使用 将其设置为 0pt \setlength{\intextsep}{0pt}
。但是,为了仅影响换行的图形,它仅添加到环境的开头wrapfigure
。
第二个必需参数是图形的宽度。当指定宽度为零 (0pt) 时,图形的实际宽度将用作包装器宽度。
\documentclass{report}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{etoolbox}% added <<<<<<<<<<<<<<<<
\BeforeBeginEnvironment{wrapfigure}{\setlength{\intextsep}{0pt}}% only for wrapfigure-- added <<<<<<<<<<<<<<<<
\begin{document}
%----------------------------------------------------------------------------
\chapter{Lorem}
%----------------------------------------------------------------------------
%----------------------------------------------------------------------------
\section{Lorem}
%----------------------------------------------------------------------------
\begin{wrapfigure}{l}{0pt}
\includegraphics[scale=0.35]{example-image}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus.
\begin{wrapfigure}{l}{0pt}
\includegraphics[scale=0.35]{example-image}
\end{wrapfigure}
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam quam nunc, blandit vel, luctus pulvinar, hendrerit id, lorem. Maecenas nec odio et ante tincidunt tempus. Donec vitae sapien ut libero venenatis faucibus. Nullam quis ante. Etiam sit amet orci eget eros faucibus tincidunt. Duis leo. Sed fringilla mauris sit amet nibh. Donec sodales sagittis magna. Sed consequat, leo eget bibendum sodales, augue velit cursus nunc,
\end{document}