0

標準の 8.5 インチ x 11 インチのページに目次を書いています。向き (横向きか縦向きか) は変数です。ページに x インチのマージンが適用されている場合 (x は可変)、TOC を内側の領域に書き込むことができます。

生データは、Topic と Page の 2 つの列を持つテーブルです (つまり、{ "Animals" , 1 } , { "Big Plants" , 2 } , { "Small Plants" , 2 } )。これはネストされた TOC ではありません。「サブトピック」はありません。すべてのトピックの重要度は同じで、すべてのテキストのフォント サイズは固定されています。

ページごとに 1 列以上の目次を許可したいのですが、必要に応じて複数ページの目次を許可しています。レイアウトはトピック列のテキストに完全に依存します。トピックが短い場合は、縦方向に 2 列、横方向に 3 列を配置することを想像できます。トピック名が長い場合は、1 列しか収まらない可能性があります (非常に長い場合は、1 つのトピックに複数の行を使用してもかまいません)。トピックが多い場合は、複数のページにまたがる可能性があります。目標は、各ページにできるだけ多くの目次情報を掲載することです。

これは難しい問題だと認識しています。まだ調べていない詳細がいくつかあります (つまり、すべてのページの列数は同じでなければなりませんか?)。私はちょうどスタートを探しています...仕事をする1、2時間で実装するのに十分簡単なもの。ページに配置する行数を決定するために、文字数を含む 1 列の TOC を強制するよりも、ある程度インテリジェントな方法の方が優れています。

4

2 に答える 2

2

まず、いくつかの変数が必要です:

  • Line_hight (TOC 行あたりのインチ)
  • Max_TOC_width (最長の目次名のインチ)
  • 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 エントリの (印刷された) 幅を見つけるテーブルを 1 回通過します。
  2. ページ幅から余白を差し引いた値を割り出し、床に収まる列数を計算します。
  3. ページの高さから余白を引いた値を行の高さで割り、床をとって、1 列あたりの行数を計算します。
  4. 他のページの向き (横向きなど) で手順 2 と 3 を繰り返します。
  5. 最も多くのスロット (行 x 列) を与えるものを選択します。

列間の「ガター」を考慮する必要があるため、計算は少し複雑になります。これは、最も広い値をパディングすることで簡単に実現できます。

于 2011-12-15T19:03:54.440 に答える