这是先前的 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 评论中引用的代码正确地减少了包裹图形标题下的空白。以下是原始示例的结果: