将文本放入容器中

时间:2011-12-17 10:29:35

标签: algorithm optimization line-breaks tex

有一个文本(可能很长)。并且有一个高度和宽度的容器。如何使文本(所有文本)适合容器?只能调整字符间间距(字距调整)和字间间距。我真的不在乎文本是否过于紧凑 - 我只是内心的所有内容。

为了重新解释这个问题,我需要一种有效的断线算法,其中成本是线的“包装”。

我知道在TeX中使用的Knuth-Plass算法,但它实现起来有些困难,我甚至不确定它是否可用于这种情况。我也可以使用遗传算法,但这可能是一种过度杀伤。

1 个答案:

答案 0 :(得分:0)

这是一个想法。

首先,估计您希望文本的行数,让该数字为n。然后,假设文本中的字符数为c,那么您应该将文本分成几行,使得任何行都不包含floor(c / n)个字符(您可以贪婪地执行此操作),让我们调用{ {1}}。 (请注意,您还可以使用动态编程来执行“自动换行”以减少“粗糙度”(即行长度之间的差异),有关详细信息,请参阅http://en.wikipedia.org/wiki/Word_wrap

假设每个字符的平均宽度(取决于您使用的大小,并且您可能希望使用等宽字体,如 Courier New )为cPerLine像素。如果容器的宽度为w,则可以轻松计算字符间距:x。您还需要考虑行间距,因此如果每个字符的平均高度为floor(x / cPerline) - w,并且容器的高度为h,则类似地,行间距应为{{ 1}}。

希望这有助于任何方式。