【问题标题】:Fit text into container使文本适合容器
【发布时间】:2011-12-17 10:29:35
【问题描述】:

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

为了重新表述这个问题,我需要一个有效的换行算法,其中成本是行的“打包”。

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

【问题讨论】:

  • Knuth-Plass 正是为您描述的场景而开发的,所以它应该是可用的。就简单性而言,在您完全理解问题之前,始终假设现有算法是最简单的 - 计算机程序中的大多数复杂性都是出于某种原因而引入的。
  • 你想用 TeX 还是其他语言来做这个?
  • 其他一些语言 - 我真的不在乎哪一种,只要它至少有点常见。

标签: algorithm optimization line-breaks tex


【解决方案1】:

这是一个想法。

首先,估计你希望文本有多少行,让这个数字是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

希望这对您有所帮助。

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2021-07-26
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 2021-06-13
    • 2012-02-17
    相关资源
    最近更新 更多