背景

背景

背景

希望设计两种字体的缩放比例,以便文本在添加到最终文档时能够放在一行上。

例子

在下面的图片中,两种字体分别是第一个字符(例如“M”)和标题文本(“My Extraordinary Title”)。在第一张图片中,文本分为两行:

Large Font

而所需的第二幅图像的字体已缩放以适合一行:

Rescaled Font

第二幅图像中的大 M 应该按照与其余文本相同的比例缩小,因此需要一个可以用于标题文本及其第一个字符的比例因子。

问题

我想定义一个类似于以下递归函数的宏:

Integer fitText( String text, Integer fontSize, Integer minWidth, Integer maxWidth ) {
  Integer currentWidth = scratchBox( text, fontSize );

  if( currentWidth > maxWidth && currentWidth > minWidth ) {
    return fitText( text, fontSize - 1pt, minWidth, maxWidth );
  }

  return fontSize;
}

不过,也许我的做法是错误的,我愿意尝试其他方法。

例如,给定一个,\frame是否可以缩放框架以使其适合\textwidth?即:

\framed[
  frame=off,
  width=\textwidth * 4,
]{%
  \BookStylizedChapter{\BookTitleText}
}

然后以某种方式缩小框架,如果它的内容宽度超出了\textwidth

问题

如何在 ConTeXt 中缩放一行文本(或framed元素)以使其不出现换行符,而是使字体缩小?

答案1

对于单行文本,一个简单的解决方案是使用\scalemaxwidth指定。例如:

\starttext

\startlines
\scale[maxwidth=4cm]{Hello}
\scale[maxwidth=4cm]{Hello World}
\scale[maxwidth=4cm]{Hello World! How}
\scale[maxwidth=4cm]{Hello World! How are}
\scale[maxwidth=4cm]{Hello World! How are you}
\scale[maxwidth=4cm]{Hello World! How are you doing?}
\stoplines

\stoptext

这使

enter image description here

相关内容