ConTeXt:换行文本在分页符处行为异常

ConTeXt:换行文本在分页符处行为异常

在此网站上,基于 Pandoc 生成的 ConTeXt 文档中的描述的文本换行解决方案之前已经表述过了。虽然对于一页最小工作示例来说已经足够了,但当时提出的解决方案仍然包含一些缺陷。

一个问题是,在分页符附近带有文本换行的图形浮动将出现错误,如下所示。

输出1

\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 的绝对新手,我认为也许可以采取一些惩罚措施,或者我希望能够提供与needspaceLaTeX 包。

编辑

我也尝试了相对较新的\starthanging[left]{#1}环境,带和不带参数[n=...](后者假设图像高度可以用文本行单位来测量)。使用的结果\starthanging同样不令人满意(见下文);

  • 牛图像部分位于底部边缘,
  • 文本在下一页继续换行,并且
  • (不显示)当换行的文本较短时,下一段不会换行而与图像重叠。

\placefigure因此,使用前面概述的解决方案看起来更有希望。

输出3

答案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

在此处输入图片描述

相关内容