有一个文本(可能很长)。并且有一个高度和宽度的容器。如何使文本(所有文本)适合容器?只能调整字符间间距(字距调整)和字间间距。我真的不在乎文本是否过于紧凑 - 我只是内心的所有内容。
为了重新解释这个问题,我需要一种有效的断线算法,其中成本是线的“包装”。
我知道在TeX中使用的Knuth-Plass算法,但它实现起来有些困难,我甚至不确定它是否可用于这种情况。我也可以使用遗传算法,但这可能是一种过度杀伤。
答案 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}}。
希望这有助于任何方式。