ConTeXt:如何在包装的图形下放置简短的标题?

ConTeXt:如何在包装的图形下放置简短的标题?

这是先前的 ConTeXt 解决方案。该解决方案处理了语境文档生成自Pandoc Markdown

无简短标题

现在,我想扩展该解决方案,以允许在换行图形下方添加简短标题。此外,我想以不同的方式排版简短标题,例如小尺寸粗体无衬线字体。

下面是一个最小工作示例,展示了添加短标题文本时原始解决方案的布局如何变得混乱。我需要对描述定义进行哪些更改才能允许在包装图下显示短标题?

\setuptolerance[horizontal, tolerant, stretch]

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

\setuppagenumbering[location={footer,center}]

% Inter-paragraph spacing
\setupwhitespace[medium]

% Break at hyphens
\setbreakpoints[compound]

\setupexternalfigures[location=default]

% Remaining code is for descriptions with a left floating figure
% https://tex.stackexchange.com/a/133372/26348

\startsetups placefigure
  \setupexternalfigure
    [wfactor=fit]
\stopsetups

% Floats do not have "before=" nor a setup key
\appendtoks \setups{placefigure} \to \everyinsidefloat

\definemeasure[pageheight][\dimexpr(\pagegoal-\pagetotal-2\lineheight)]

\define[1]\startdescription{
   \setbox\scratchbox\vbox{\setupexternalfigure[width=4cm]#1}%
   \ifdim\ht\scratchbox>\dimexpr\measure{pageheight}\relax
      \page
   \fi
   \startplacefigure[location={left,high,none}]
     \box\scratchbox
   \stopplacefigure
   }

\define\stopdescription{\endgraf}


\starttext
\input douglas.tex

\startdescription{{\externalfigure[cow]}Short caption}
  \input linden.tex
\stopdescription

\input bryson.tex
\stoptext

附简短标题

答案1

在包装图形上放置标题的标准方法如下:

\setupexternalfigures[location={local,global,default}]
\starttext

\startplacefigure
    [
      title={A short caption}, 
      location={left, nonumber},
    ]
    \externalfigure[cow][width=2cm]
\stopplacefigure

\input knuth

\stoptext

这使:

解决方案

如果您想以 Pandoc 的方式自动使用它,一种选择是重新定义\startdescription宏,如下所示:

\define[1]\startdescription
  {\dostartdescription#1\dostopdescription}

\def\dostartdescription#1#2\dostopdescription
  {\setbox\scratchbox\vbox{\setupexternalfigure[width=4cm]#1}%
   \ifdim\ht\scratchbox>\dimexpr\measure{pageheight}\relax
      \page
   \fi
   \startplacefigure[location={left,high,nonumber}, style=\ss\bfxx\setupinterlinespace, title={#2}]
     \box\scratchbox
   \stopplacefigure
   }

\define\stopdescription{\endgraf}

它可以与问题中发布的示例正确配合。

但是,我并不认为这是解决这个问题的正确方法。就我个人而言,我发现预处理 markdown 输入更容易。参见这篇博文我的观点。

答案2

接受的答案还有待改进

换行文本的高度偏离一行,或者换句话说,图像下方的空间太大。无论是否有标题,这种情况都会发生。以下是使用相同代码制作的更具戏剧性的示例:

额外的换行符

我想我也找到了一个原因,康特克花园

段落开头的图片

\externalfigure[...]在段落开头使用会导致图像后出现换行符。这是因为\externalfigure\vbox。 > 当\vbox在段落开头(看起来是)遇到 时,将保持垂直模式。为了防止这种情况,请\dontleavehmode在 之前添加\externalfigure,如下所示:

\dontleavehmode
\externalfigure[...] ... first line ...

现在的问题是,尽管我做了许多拼命的尝试,但我还是无法将其集成\dontleavehmode到已接受答案的代码中。

编辑:改进解决方案,减少标题下的间距

下方 Aditya 评论中引用的代码正确地减少了包裹图形标题下的空白。以下是原始示例的结果:

改进的解决方案

相关内容