2011-12-17 57 views
1

有一段文字(可能很长)。还有一个高度和宽度的容器。如何使文本(全部)适合容器?只能调整字符间距(字距)和字间间距。我真的不在乎文本是否会过于封闭 - 我只是在里面所有内容。将文本放入容器中

为了解释这个问题,我需要一个高效的换行算法,其中成本是线的“包装性”。

我知道在TeX中使用Knuth-Plass算法,但实现起来有点困难,我甚至不确定它在这种情况下是否可用。我也可以使用遗传算法,但这可能是一种矫枉过正。

+1

Knuth-Plass专为您所描述的场景开发,因此应该可以使用。在简单性方面,总是假设现有的算法是最简单的,直到你完全理解了这个问题 - 计算机程序中的大部分复杂性都是出于某种原因而引入的。 – thiton 2011-12-17 12:12:47

回答

0

这是一个想法。

首先,估计你想要文本的行数,让这个数字为n。然后,假设文本中的字符数为c,那么您应该将文本分成多行,使得没有行包含多于floor(c/n)个字符(您可以贪婪地做到这一点),我们称之为cPerLine。 (请注意,您也可以使用动态编程为较少的“粗糙”(即线段长度之间的差异)执行“文字换行”,详情请参阅http://en.wikipedia.org/wiki/Word_wrap

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

希望这有助于任何方式。