在此网站上,基于 Pandoc 生成的 ConTeXt 文档中的描述的文本换行解决方案之前已经表述过了。虽然对于一页最小工作示例来说已经足够了,但当时提出的解决方案仍然包含一些缺陷。
一个问题是,在分页符附近带有文本换行的图形浮动将出现错误,如下所示。
\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]
\setupexternalfigures [location=default]
% Keep old definitions
\let\oldplacefigure\placefigure
\let\oldexternalfigure\externalfigure
% For full text-width figures
\def\placefigure[#1]#2#3{%
\def\externalfigure[##1]{\oldexternalfigure[##1][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][width=4cm]}%
\oldplacefigure[left,high,none]{}{#1}%
\let\externalfigure\oldexternalfigure% Reset for in-line figures
}
\def\stopdescription{\endgraf}
\starttext
\input douglas.tex
\input linden.tex
\input linden.tex
\section{Section near page end}
\startdescription{{\externalfigure[cow]}}
\input linden.tex
\stopdescription
\input bryson.tex
Additional unit tests:
Yeah, but I produce milk! \externalfigure[cow][height=31pt]
\placefigure[here,nonumber]{Large milk cow}{\externalfigure[cow]}
\stoptext
问题
\starttext
如何在不改变和之间的任何内容的情况下解决这个问题\stoptext
?(记住,整个想法是关于从开始的全自动文档生成Pandoc MarkDown。
作为一名 ConTeXt 的绝对新手,我认为也许可以采取一些惩罚措施,或者我希望能够提供与needspace
LaTeX 包。
编辑
我也尝试了相对较新的\starthanging[left]{#1}
环境,带和不带参数[n=...]
(后者假设图像高度可以用文本行单位来测量)。使用的结果\starthanging
同样不令人满意(见下文);
- 牛图像部分位于底部边缘,
- 文本在下一页继续换行,并且
- (不显示)当换行的文本较短时,下一段不会换行而与图像重叠。
\placefigure
因此,使用前面概述的解决方案看起来更有希望。
答案1
这是一个解决方案,用于检查图形是否适合页面;如果不适合,则插入分页符。请注意,这将导致难看的分页符(但避免这种情况的唯一方法是重写文本)。在此过程中,我还删除了内置 ConTeXt 宏的覆盖,并使用可用的钩子来更改图形尺寸。
\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]
% Set inter-paragraph spacing
%\setupwhitespace[medium]% TOGGLE ON/OFF
\setupexternalfigures [location=default]
\startsetups placefigure
\setupexternalfigure
[wfactor=fit]
\stopsetups
% Floats do no have a before or a setup key
\appendtoks \setups{placefigure} \to \everyinsidefloat
\definemeasure[pageheight][\dimexpr(\pagegoal-\pagetotal-2\lineheight)]
\define[1]\startdescription
{%\everyinsidefloat\emptytoks
\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
\input linden.tex
\input linden.tex
\section{Section near page end}
\startdescription{{\externalfigure[cow]}}
\input linden.tex
\stopdescription
\input bryson.tex
Additional unit tests:
Yeah, but I produce milk! \externalfigure[cow][height=31pt]
\placefigure[here,nonumber]{Large milk cow}{\externalfigure[cow]}
\stoptext