我在这个页面上找到了解决方案:关联
如果图形不适合,则允许分页,这是有效的。
但是数字后面出现了一行多余的线条,我不知道为什么,也不知道如何解决这个问题。
代码
\documentclass{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{lipsum}
\usepackage{parskip}
\BeforeBeginEnvironment{wrapfigure}{\setlength{\intextsep}{0pt}}
\newsavebox\curwrapfig
\makeatletter
\long\def\wrapfiguresafe#1#2#3{
\sbox\curwrapfig{#3}
\par\penalty-100
\begingroup
\dimen@\pagegoal \advance\dimen@-\pagetotal
\advance\dimen@-\baselineskip
\ifdim \ht\curwrapfig>\dimen@
\break%
\fi%
\endgroup%
\begin{wrapfigure}{#1}{#2}
\usebox\curwrapfig
\end{wrapfigure}
}
\makeatother
\begin{document}
\lipsum[1-6]
\wrapfiguresafe{r}{0mm}{\centering\rule{3cm}{6cm}}
\lipsum[1-6]
\end{document}
截屏:
答案1
环境wrapfigure
有两个可选参数,而您的包装宏不支持这两个参数,而且对wrapfigure
宏的第二个强制参数的支持也不正确。以下是经过修改的实现,它应该可以正确实现一个包装器,该包装器既支持可选参数,又可以在第二个强制参数不等于时正确运行0pt
。
的第一个可选参数wrapfigure
指定图形应产生多少条短线。以下将该参数设置为 14,这在您的示例中是正确的。
\documentclass{article}
\usepackage[margin=2.5cm]{geometry}
\usepackage{graphicx}
\usepackage{wrapfig}
\usepackage{lipsum}
\usepackage{parskip}
\BeforeBeginEnvironment{wrapfigure}{\setlength{\intextsep}{0pt}}
\ExplSyntaxOn
\cs_new_protected:Npn \ForwardOarg #1#2
{
\tl_if_eq:nnTF {#1} {#2}
{ \tl_clear:N \ProcessedArgument }
{ \tl_set:Nn \ProcessedArgument {[{#2}]} }
}
\ExplSyntaxOff
\newsavebox\curwrapfig
\makeatletter
\NewDocumentCommand\wrapfiguresafe
{>{\ForwardOarg{}}O{} m >{\ForwardOarg{}}O{} m m}
{%
\ifdim#4=\z@
\sbox\curwrapfig{#5}%
\else
\sbox\curwrapfig{\parbox[b]{#4}{#5}}%
\fi
\par\penalty-100
\begingroup
\dimen@\pagegoal \advance\dimen@-\pagetotal
\advance\dimen@-\baselineskip
\ifdim \ht\curwrapfig>\dimen@
\break
\fi
\endgroup
\begin{wrapfigure}#1{#2}#3{#4}%
\usebox\curwrapfig
\end{wrapfigure}%
}
\makeatother
\begin{document}
\lipsum[1-6]
\wrapfiguresafe[14]{r}{0mm}{\centering\rule{3cm}{6cm}}
\lipsum[1-6]
\end{document}