![ConTeXt:placefigure 的行为非常奇怪](https://linux22.com/image/338096/ConTeXt%EF%BC%9Aplacefigure%20%E7%9A%84%E8%A1%8C%E4%B8%BA%E9%9D%9E%E5%B8%B8%E5%A5%87%E6%80%AA.png)
在尝试使用 ConTeXt 排版文档时,我遇到了您可以在以下 MWE 上看到的问题。
\setuppapersize[A5][A5]
\useexternalfigure[ctanlion][http://www.ctan.org/lion/ctan_lion_350x350.png][width=4cm]
\starttext
%% Works correctly
\placefigure[right,none]{}{\externalfigure[ctanlion]}
here is a test : \input linden
\hairline
%% Wrapping doesn't work
\placefigure[right,none]{}{\externalfigure[ctanlion]}
{here is a test :} \input linden
\stoptext
我不明白为什么会发生这种情况。有没有什么解释,如果可能的话,有什么解决方法?
答案1
解决方案
图后的段落开头不能成组出现。请删除括号,或通过在前面添加 明确开始段落\dontleavehmode
。
解释
使用剪切放置方法时,ConTeXt 会进行一些记录。它会记住图形的放置位置以及它将占用多少空间。然后,接下来的段落将使用正确的方法进行调整\parshape
。要知道段落是否需要调整,ConTeXt 会检索一些信息,例如新段落开始时剪切图形的放置位置。
TeX 将新段落的开始定义为从垂直模式切换到水平模式。当 TeX 读取一个字符时就会发生这种情况。此时,的内容\everypar
将插入到 ConTeXt 存储浮点信息的位置。
这就是分组的作用所在。在你的例子中,段落开头是
{here is a test :} The warm water...
请记住,一个段落的开始时间是一个人物遇到。因为第一个字符是h
,here
所以段落开始于一个组内。这意味着 的内容\everypar
也插入到组内,TeX 将忘记组内未完成的设置\global
。不幸的是,浮动被标记为已检查在全球范围内,但是\parshape
当 TeX 退出该组时将被遗忘。
建议
除非你知道其含义,否则永远不要以一个群体来开始一个段落。