![背景](https://linux22.com/image/281948/%E8%83%8C%E6%99%AF.png)
背景
希望设计两种字体的缩放比例,以便文本在添加到最终文档时能够放在一行上。
例子
在下面的图片中,两种字体分别是第一个字符(例如“M”)和标题文本(“My Extraordinary Title”)。在第一张图片中,文本分为两行:
而所需的第二幅图像的字体已缩放以适合一行:
第二幅图像中的大 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
对于单行文本,一个简单的解决方案是使用\scale
仅maxwidth
指定。例如:
\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
这使