ConTeXt:如何强制文本适合 MetaFun 框?

ConTeXt:如何强制文本适合 MetaFun 框?

如何使文本适合具有特定宽度的 MetaFun 框?

现在我有

\startuseMPgraphic{MPBoxFrame}
  % Useful values
  numeric w, h, o, b ;
  w := 4.5cm ; h := OverlayHeight ; o := BodyFontSize ;
  b := 1pt ; % border size


  drawoptions (withpen pencircle scaled b withcolor blue) ;
  draw (0,h)--(0,0)--(w,0)--(w,h)--(0,h) ;


  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\defineoverlay[MPBoxFrame][\useMPgraphic{MPBoxFrame}]

\defineframedtext[BoxFramedText][frame=off,
                                 background=MPBoxFrame,
                                 offset=\bodyfontsize,
                                 width=\textwidth]

\definestartstop[SpecificWidthBox][alternative=empty,
                                   before=\startBoxFramedText,
                                   after=\stopBoxFramedText]

\starttext
  \startSpecificWidthBox
    This is a looooooooong text that I need to fit in the box.
  \stopSpecificWidthBox
\stoptext

生产:

答案1

\limitatetext您可以使用带有三个参数的命令来限制字符串的宽度:

  1. 您想要缩短的文本。
  2. 文本的最大长度。
  3. 当文本超出最大长度时,文本末尾会出现一个符号。

在此处输入图片描述

在下面的例子中,文本的长度限制为 9 厘米,框的宽度为 10 厘米。

\starttext

\startframed[width=10cm]
\limitatetext{This is a looooooooong text that I need to fit in the box.}{9cm}{...}
\stopframed

\stoptext

这产生了

在此处输入图片描述

答案2

根据记录,正如@Dave Jarvis 提到的,框架可以完成这项工作。

\startuseMPgraphic{MPBox}
  draw OverlayBox 
       withpen pencircle scaled OverlayLineWidth
       withcolor OverlayLineColor;

  setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic

\defineoverlay[MPBoxOverlay][\useMPgraphic{MPBox}]

\defineframedtext[MPBoxFramed]
                 [
                   frame=off,
                   background=MPBoxOverlay,
                   offset=\bodyfontsize,
                   framecolor=red,
                   rulethickness=0.5pt,
                   width=100mm,
                 ]

\starttext
\startMPBoxFramed
    \input knuth
\stopMPBoxFramed
\stoptext

结果

相关内容