2010-08-22 62 views
3

我已經實現了腳註佈局的基本頁面佈局算法。基本上:帶列的腳註佈局算法

  1. 排列正文文本的一行。
  2. 如果它包含腳註參考,請逐行列出腳註。
  3. 轉到1

每走一步,我檢查,看看是否總高度(正文+腳註文本+間隙)超過頁面高度。如果是這樣,我刪除最近排列的行並且頁面已完成。

我的問題是:如何處理身體文本分爲兩列的情況?

我基本上需要事先知道允許的總體文本高度,以便正確佈置列,但直到我知道腳註文本的高度後才能知道。

我也不能只取的身體文本行和劃分的累計高度由圖2,由於變化的線的高度,行間距,段落間距等

回答

1

您有3個塊 - 兩個用於列和一個用於腳註。顯然(列的高度+腳註的高度+間隙)必須低於頁面高度。

您可以使用舊算法作爲第一列。對於第二列,當添加腳註並導致第一列太長時,請將行從第一列的末尾移到第二列的開頭。如果這使第二列太長,請將行移回第一列並刪除最後一個腳註行。

+0

謝謝,這個工程。這並不像看起來那麼簡單,因爲我必須實現一種機制來跟蹤變量,這些變量取決於行是否位於列的頂部,例如段落之間的間距,但這是一個很好的開始。 – yclevine 2010-08-22 18:21:01

1

有趣的問題。 (讀:你應該得到更多upvotes。)

如何處理的情況下正文爲兩列?

我不認爲有一個簡單的答案。答案真的取決於您爲文檔設定的審美理想。

我只會稍微修改你的算法,使得:

  • 主要內容區域是固定的某個網頁
  • 腳註和朋友將不會出現在主要內容的區域。

在這種情況下,請選擇適合多列布局的文本數量。接下來,確定該部分文本中的所有腳註。對腳註重新編號(例如,如果您將幾頁紙擠入一個頁面)。現在,在指定區域的單欄中安排腳註。

問題/問題:

  • 如果腳註的總文字不能適合在腳註部分:從我所看到的,你可能需要攜帶在你的腳註文本到下一個頁面。

  • 您的腳註應該是多列的嗎?我從來沒有見過一個文檔,腳註中多列,但這取決於你。

  • 如果有一個硬性要求,所有腳註文本應該與引用它的內容位於同一頁面內:您需要計算算法(想到動態編程),您可以在考慮到頁面的約束,把其餘部分剔除出來,然後儘可能多地佈局,然後擺弄文本,這樣就不會有太多空白來打擾讀者。

+0

聽起來像一個簡單的解決方案 - 但 - 這是一個專門的學術內容的閱讀器應用程序。一些文章(和文章中的一些頁面)會有很大的腳註,有些文章沒有或幾乎沒有。 – yclevine 2010-08-22 14:31:23