ConTeXt 图形放置

ConTeXt 图形放置

多年来,我一直使用 LaTeX 宏,它允许我以相对较少的麻烦将图形嵌入到我的文本中。我可以输入如下内容:

A typological comparison (see Figure \Fig[Caption text]{file.png}) suggests that...

输出将在原地呈现图形编号并将实际图像放置在附近的某个位置,具体取决于其大小和可用的页面空间。

我一直在尝试在 ConTeXt 中创建类似的东西,但到目前为止还没有成功。我认为我应该能够使用 \placefigure 和 \in 的某种组合来做到这一点。此命令...

\def\Fig[#1]#2{%
    %\startpostponing[+0]%
    \startplacefigure[reference=fig:#2,title=#1]%
        %\dontleavehmode%
        \externalfigure[#2]%
    \stopplacefigure%
    %\stoppostponing%
    \in{Figure}[fig:#2]%
}

...很接近,但是它强制换行,从而扰乱了段落。

我尝试使用 \dontleavehmode,按照常问问题,但这并不能解决问题。我还尝试将 placefigure 命令包装在 postpoining[+0] 标签中,如这个问题,但这会导致解析器中止并等待输入。ConTeXt 没有告诉我它为什么中止,但我猜想当图形放置被推迟时它无法解析 \in 命令。

有什么建议么?

答案1

这是一个 hackish 解决方案。由于某种原因,它无法在文档的第一页上工作(浮动被推到第二页),但除此之外,它看起来不错。

\startluacode

  template = [=====[
      \startplacefigure[title={%s}, reference=fig:%s]
        \externalfigure[%s]
      \stopplacefigure
  ]=====]

  userdata = userdata or {}

  function userdata.displayfigure(title, file)
    commands.assignbuffer("postponedblock", string.format(template, title, file, file))
    commands.registerpostponedblock("+0")
  end
\stopluacode

\unexpanded\def\Fig[#1]#2%
  {\ctxlua{userdata.displayfigure("#1", "#2")}\relax\in{Figure}[fig:#2]}



\starttext

\input tufte
typological comparison (see \Fig[Caption text]{file.png}) suggests that
\input tufte
\input tufte
\input tufte

\input tufte
\input tufte
\input tufte
\input tufte
\input tufte
\input tufte
\input tufte
\input tufte
\input tufte

\input tufte
\input tufte
\input tufte
\input tufte
typological comparison (see \Fig[Caption text]{file.png}) suggests that
\input ward 

\stoptext

需要注意的是,图片将放置在段落开始的页面上,而不是宏\Fig出现的页面上。这是因为 TeX 在分页之前会先进行换行。

相关内容