ConTeXt:根据 Pandoc 生成的文档的宽度缩放图形并换行

ConTeXt:根据 Pandoc 生成的文档的宽度缩放图形并换行

考虑以下潘多克-生成语境文档:

\setuppapersize [A4][A4]
\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,
                 height=middle, topspace=0.75in, bottomspace=0.75in]

\setuppagenumbering[location={footer,center}]

\setupexternalfigures[
  order={svg,pdf,png,jpg},
  location=global,
  wfactor=fit,
  ]

\definedescription
  [description]
  [headstyle=bold, style=normal, location=hanging, width=4cm]

\starttext
\placefigure[here,nonumber]{Little kitten}{\externalfigure[http://placekitten.com/g/480/300][method=jpg]}

\startdescription{{\externalfigure[http://placekitten.com/g/640/400][method=jpg]}}
  \input bryson
\stopdescription
\stoptext

电流输出

问题

小猫应该长到\textwidth。另一只小猫应该能穿过 4 厘米宽的文字环绕其四周。它的图片应该与环绕文字顶部齐平。

小猫不能被触碰;只能改变之前的设置\starttext。此外,为了尽可能普遍地解决这个问题,序言中不应出现对图像 URL 的引用。

我尝试了一些方法\setupexternalfigureswfactor=fit但似乎不起作用。

答案1

解决方案

使用version: 2012.05.30 11:26ConTeXt,则\setupexternalfigures[wfactor=fit]没有效果。因此,以下解决方案也保持行内数字完整。

这一切都非常好,因为LaTeX2e 尚未能实现类似的功能。与 ConTeXt 相比,LaTeX2e 中浮动清除不是自动的;相反,人们需要对距离测量进行一番摸索。

\setuppapersize [A4][A4]
\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,
                 height=middle, topspace=0.75in, bottomspace=0.75in]

\setuppagenumbering[location={footer,center}]

\setuptolerance[horizontal, tolerant, stretch]

% Keep old definitions
\let\oldplacefigure\placefigure
\let\oldexternalfigure\externalfigure

% For full text-width figures
\def\placefigure[#1]#2#3{%
  \def\externalfigure[##1]{\oldexternalfigure[##1][method=jpg, wfactor=fit]}%
  \oldplacefigure[#1]{#2}{#3}%
  \let\externalfigure\oldexternalfigure% Reset for in-line figures
  }

% For figures with wrapped text
\definedescription[description][
  headstyle=bold,
  style=normal,
  location=hanging,
  width=4cm
  ]

\def\startdescription#1{%
  \def\externalfigure[##1]{\oldexternalfigure[##1][method=jpg, width=4cm]}%
  \oldplacefigure[none,left,high]{}{#1}%
  \let\externalfigure\oldexternalfigure% Reset for in-line figures
  }
\def\stopdescription{\endgraf}

\starttext
  \placefigure[here,nonumber]{Little kitten}{\externalfigure[http://placekitten.com/g/480/300]}

  \startdescription{{\externalfigure[http://placekitten.com/g/640/400]}}
    \input bryson
  \stopdescription
\stoptext

输出

警告

不过,猫有一个警告;当带有描述的图形出现在页面末尾时,其换行文本将像以下示例一样从页面上掉下来。我从中提炼出了一个最小工作示例,并将其链接为后续问题

警告

较新的 ConTeXt 版本

最终我发现如何在 Debian 下安装 ConTeXt Standalone。我可以确认\setupexternalfigures[wfactor=fit]现在在 ConTeXt 中可以使用version: 2013.09.09 19:45。当像上面的例子一样不使用内联图像时,这可以显著减少代码。但是,在更一般的情况下,当存在内联图像时,[wfactor=fit]不能使用,因为它也会对这些图像起作用。[wfactor=fit]对内联图像起作用可以被视为 ConTeXt 错误。因此,上述解决方案也适用于较旧的 ConTeXt 版本,仍然是更通用的解决方案。

答案2

确实,您使用了错误的 (ConTeXt) 标记来实现效果。不过,我会提供一个解决方案来回答您的问题(但不回答您的问题 :)

该要求指出:

仅可改变 \starttext 之前的设置。

因此,情况如下:

\setuppapersize [A4][A4]
\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,
                 height=middle, topspace=0.75in, bottomspace=0.75in]

\setuppagenumbering[location={footer,center}]

\setupexternalfigures
  [
    order={svg,pdf,png,jpg},
    location=global,
    wfactor=fit,
  ]

\definedescription
  [description]
  [headstyle=bold, style=normal, alternative=hanging, width=4cm]

\definefloat[hangingfigure]
            [hangingfigures]
            [figures]

\setupfloat [hangingfigure]
            [
              default={left,none},
            ]

\def\startdescription{\placehangingfigure\empty}
\def\stopdescription{\endgraf}

\useexternalfigure[http://placekitten.com/g/640/400]
                  [http://placekitten.com/g/640/400]
                  [method=jpg,width=4cm]

\starttext
    \placefigure[here,nonumber]{Little kitten}{\externalfigure[http://placekitten.com/g/480/300][method=jpg]}

  \startdescription{{\externalfigure[http://placekitten.com/g/640/400][method=jpg]}}
    \input bryson
  \stopdescription
\stoptext

这使

在此处输入图片描述

更严重的是,markdown 提供的标记选项太少,无法实现复杂的元素。我自己的解决方案是使用预处理器来增强它,但 YMMW。

相关内容