wrapfigure
我在环境中使用multicol
将文本环绕在 tikz 图形周围。然而,这会在第二列(之后\columbreak
)创建一个不需要的空白区域。我该如何防止这种情况发生?
以下 MWE
\documentclass[a4paper]{article}
\usepackage{tikz,multicol,wrapfig,lipsum}
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\begin{multicols}{2}
\begin{wrapfigure}{l}{0pt}
\tikz \graph [nodes={circle,draw}] {
subgraph C_n [n=3, counterclockwise]
};
\end{wrapfigure}
\lipsum[1-2]
\columnbreak
\lipsum[3-4]
\end{multicols}
\end{document}
我必须使用multicol
环境,因为两列之前和之后都会有文本。
打印的文件列表\listfiles
:
*File List*
article.cls 2014/09/29 v1.4h Standard LaTeX document class
size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
tikz.sty 2015/08/07 v3.0.1a (rcs-revision 1.151)
pgf.sty 2015/08/07 v3.0.1a (rcs-revision 1.15)
pgfrcs.sty 2015/08/07 v3.0.1a (rcs-revision 1.31)
everyshi.sty 2001/05/15 v3.00 EveryShipout Package (MS)
pgfrcs.code.tex
pgfcore.sty 2010/04/11 v3.0.1a (rcs-revision 1.7)
graphicx.sty 2017/06/01 v1.1a Enhanced LaTeX Graphics (DPC,SPQR)
keyval.sty 2014/10/28 v1.15 key=value parser (DPC)
graphics.sty 2017/06/25 v1.2c Standard LaTeX Graphics (DPC,SPQR)
trig.sty 2016/01/03 v1.10 sin cos tan (DPC)
graphics.cfg 2016/06/04 v1.11 sample graphics configuration
pdftex.def 2018/01/08 v1.0l Graphics/color driver for pdftex
pgfsys.sty 2014/07/09 v3.0.1a (rcs-revision 1.48)
pgfsys.code.tex
pgfsyssoftpath.code.tex 2013/09/09 (rcs-revision 1.9)
pgfsysprotocol.code.tex 2006/10/16 (rcs-revision 1.4)
xcolor.sty 2016/05/11 v2.12 LaTeX color extensions (UK)
color.cfg 2016/01/02 v1.6 sample color configuration
pgfcore.code.tex
pgfcomp-version-0-65.sty 2007/07/03 v3.0.1a (rcs-revision 1.7)
pgfcomp-version-1-18.sty 2007/07/23 v3.0.1a (rcs-revision 1.1)
pgffor.sty 2013/12/13 v3.0.1a (rcs-revision 1.25)
pgfkeys.sty
pgfkeys.code.tex
pgfmath.sty
pgfmath.code.tex
pgffor.code.tex
tikz.code.tex
multicol.sty 2018/04/20 v1.8s multicolumn formatting (FMi)
wrapfig.sty 2003/01/31 v 3.6
lipsum.sty 2018/11/24 v2.1a 150 paragraphs of Lorem Ipsum dummy text
expl3.sty 2018-11-19 L3 programming layer (loader)
expl3-code.tex 2018-11-19 L3 programming layer
l3pdfmode.def 2018-11-19 v L3 Experimental driver: PDF mode
xparse.sty 2018-10-17 L3 Experimental document command parser
supp-pdf.mkii
epstopdf-base.sty 2016/05/15 v2.6 Base part for package epstopdf
infwarerr.sty 2016/05/16 v1.4 Providing info/warning/error messages (HO)
grfext.sty 2016/05/16 v1.2 Manage graphics extensions (HO)
kvdefinekeys.sty 2016/05/16 v1.4 Define keys (HO)
ltxcmds.sty 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
kvoptions.sty 2016/05/16 v3.12 Key value format for package options (HO)
kvsetkeys.sty 2016/05/16 v1.17 Key value parser (HO)
etexcmds.sty 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
ifluatex.sty 2016/05/16 v1.4 Provides the ifluatex switch (HO)
pdftexcmds.sty 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO)
ifpdf.sty 2018/09/07 v3.3 Provides the ifpdf switch
epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
***********
Ubuntu 上的 TeX Live 2017 与 Arch 上的 2018 之间的差异文件列表:
32c32
< multicol.sty 2017/04/11 v1.8q multicolumn formatting (FMi)
---
> multicol.sty 2018/04/20 v1.8s multicolumn formatting (FMi)
34c34,38
< lipsum.sty 2014/07/27 v1.3 150 paragraphs of Lorem Ipsum dummy text
---
> lipsum.sty 2018/11/24 v2.1a 150 paragraphs of Lorem Ipsum dummy text
> expl3.sty 2018-11-19 L3 programming layer (loader)
> expl3-code.tex 2018-11-19 L3 programming layer
> l3pdfmode.def 2018-11-19 v L3 Experimental driver: PDF mode
> xparse.sty 2018-10-17 L3 Experimental document command parser
45,46c49,50
< pdftexcmds.sty 2018/01/21 v0.26 Utility functions of pdfTeX for LuaTeX (HO)
< ifpdf.sty 2017/03/15 v3.2 Provides the ifpdf switch
---
> pdftexcmds.sty 2018/09/10 v0.29 Utility functions of pdfTeX for LuaTeX (HO)
> ifpdf.sty 2018/09/07 v3.3 Provides the ifpdf switch
可能是 multicol 包中存在错误?
以下 MWE 将使用更新的包产生类似的结果:
\documentclass[a4paper]{article}
\usepackage{tikz,multicol,wrapfig,lipsum}
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\begin{multicols}{2}
\begin{wrapfigure}{l}{0pt}
\tikz \graph [nodes={circle,draw}] {
subgraph C_n [n=3, counterclockwise]
};
\end{wrapfigure}
Some Text
\columnbreak
\lipsum[3-4]
\end{multicols}
\end{document}
它还会打印 3 条Underfull \hbox
警告,所以我不知道这是否真的是一个问题,或者我只是编写了无效的代码。
然而,更改\lipsum[3-4]
为\lipsum[3] \lipsum[4]
会使警告消失并且还会删除空白矩形。
\documentclass[a4paper]{article}
\usepackage{tikz,multicol,wrapfig,lipsum}
\usetikzlibrary{graphs,graphs.standard}
\begin{document}
\begin{multicols}{2}
\begin{wrapfigure}{l}{0pt}
\tikz \graph [nodes={circle,draw}] {
subgraph C_n [n=3, counterclockwise]
};
\end{wrapfigure}
Some Text
\columnbreak
\lipsum[3]
\lipsum[4]
\end{multicols}
\end{document}
答案1
wrapfig 的作用是设置一个特殊的 parshape,理论上,该 parshape 应该在段落设置后取消。
通常,这是通过在 \everypar 中设置激活它来完成的,然后在调用时 \everypar 会自行重置。但如果该调用发生在组内,则在组结束时,旧的 \everypar 会恢复,您将获得两次操作。
如果某个部分后面直接跟着一个列表,则在标准 LaTeX 中也会发生同样的情况。该部分使用上述机制强制在其后添加 2 行文本。但由于该文本位于环境内,因此一旦列表结束,设置就会重复(您会再次看到 clubpenalty 10000)。
在您的 MWE 中可以看到,它在第三段突然再次活跃,这意味着它在 \lipsum[3-4] 处再次活跃。这让我怀疑 \lipsum[1-2] 使用了这样的组,因此在其末尾重新安装了 wrapfig 内容。
lipsum 最近重新实施,在此过程中经过多次更改/修复。使用当前设置(包含 lipsum 2.2 和 multicol 1.8v),一切运行正常。查看您的 \listfiles 输出,您显然拥有较旧的软件包版本(在几种情况下),因此您的系统绝不是“最新的”。
也许使用最新的 lipsum 就足够了,但总的来说,我的建议是更新所有设置,然后重试。
并且不...相当确定这不是多色问题。
更新(关于最近添加的额外 MWE)
实际情况是,您在“Some tex”之后直接明确要求分栏。现在这些词显然不足以围绕您的图片流动,这意味着您实际上已经要求 wrapfig 跨栏/分页符换行,如果您这样做,那么空洞或空洞的一部分可能会出现在下一页/列上(而您的图形显然没有被分割)
您可以使用双列模式和 \pagebreak 而不是 \columnbreak 获得完全相同的结果(没有多列),所以这并不奇怪。
至于最后一个例子没有显示第二列中的漏洞:这与 lipsum 的实施方式有关,如果你愿意的话,这是一个缺陷(添加最后一段额外的段落,你的漏洞就会再次出现)。wrapfig 文档提到了一些关于在列表环境附近使用的限制,这是一个类似性质的问题。