0

我正在将目录写入标准的 8.5 英寸 x 11 英寸页面。方向(横向与纵向)是一个变量。当 x 英寸边距应用于页面(其中 x 是可变的)时,我可以将我的 TOC 写入内部区域。

原始数据是一个包含两列的表格:主题和页面(即 { "Animals" , 1 } , { "Big Plants" , 2 } , { "Small Plants" , 2 } )。这不是嵌套目录 - 没有“子主题”。所有主题的重要性都相同,所有文本的字体大小都是固定的。

我想每页允许 1 列或更多列 TOC,如果需要,我允许多页 TOC。布局完全依赖于主题列中的文本。如果主题很短,您可以想象纵向放置 2 列,横向放置 3 列。如果主题名称很长,那么可能只有 1 列适合(如果很长,则可以为一个主题使用多行)。如果有很多主题,那么我可能会溢出到多个页面。目标是在每个页面上放置尽可能多的 TOC 信息。

我意识到这是一个难题。有许多细节我没有探索(即所有页面都必须有相同数量的列吗?)。我只是在寻找一个开始......一些简单到可以在一两个小时内完成的工作。任何半智能的东西都比强制使用带有字符数的 1 列 TOC 来确定要在页面上放置多少行要好。

4

2 回答 2

2

首先你需要几个变量:

  • Line_hight(每 TOC 行的英寸)
  • Max_TOC_width(最长 TOC 名称的英寸)
  • Max_pagenum_width(打印时最大页码的英寸宽度)
  • Left、Right、Top、Bottom _border(页面边框的英寸)

然后很容易计算。

Lines_Per_Page = Floor( (Page_Height - Top_Border - Bottom_Border) / Line_Height )

Columns_Per_Page = Floor( (Page_Width - Left_Border - Right_Border) / (Max_TOC_Width + Max_PageNum_Width) )

Total_TOC_Per_Page = Lines_Per_Page * Columns_Per_Page

仅供参考:Floor( ) 表示向下舍入到最接近的整数。楼层(5.9) = 5, 楼层(0.1) = 0

于 2011-12-15T19:07:09.293 回答
1

假设您希望所有列的宽度相同:

  1. 遍历表格,找出最长 TOC 条目的(打印的)宽度。
  2. 除以页宽减去边距,然后计算出可以容纳多少列。
  3. 将页面高度减去页边距除以一行的高度,然后计算出每列有多少行。
  4. 在其他页面方向(例如横向)中重复步骤 2 和 3。
  5. 选择提供最多插槽(行乘以列)的那个。

数学稍微复杂一些,因为您需要考虑列之间的“排水沟”。这很容易通过填充您的最宽值来实现。

于 2011-12-15T19:03:54.440 回答