背景

背景

背景

建立具有不同寬度的列的自訂多列佈局。

問題

這個問題的問題在之前的文章中提到但沒有解決回答:

設定page=yes會導致一個不幸的副作用:這本書的章節之間交織著空白頁。這些可以使用 Ghostscript 進行後處理來消除...

換句話說,如果沒有該page=yes選項,ConTeXt 無法根據需要設定文字格式。使用該page=yes選項,ConTeXt 按預期格式化,但在主要部分之間匯出不需要的空白頁。

程式碼

說明問題的最小工作範例:

\definepapersize[BookPaperSize][width=24in, height=12in,]
\setuppapersize[BookPaperSize]

\definelayout[BookTextLayout][
  topspace=.5in,
  backspace=.5in,
  header=\zeropoint,
  footer=\zeropoint,
  grid=yes,
]
\setuplayout[BookTextLayout]

\definecolumnset[BookColumns][n=4,distance=.25in]
\setupcolumnset[BookColumns:1][width=11.75in]
\setupcolumnset[BookColumns:2][width=3.46in]
\setupcolumnset[BookColumns:3][width=3.46in]
\setupcolumnset[BookColumns:4][width=3.46in]

\setuphead[section][
  page=yes,
  beforesection={\startcolumnset[BookColumns]},
  aftersection={\stopcolumnset},
]

\setuphead[subsection][
  after={\column},
]

\setuphead[subsubsection][
  after={\blank[small]},
]

\starttext
\startsection[title={Section Title}]
\startsubsection[title={Subtitle}]
\dorecurse{2}{\input knuth}

\dorecurse{2}{%
  \startsubsubsection[title={Subsubtitle}]
    \dorecurse{1}{\input ward}
    \dorecurse{2}{\input lorem}
    \dorecurse{1}{\input bryson}
  \stopsubsubsection
}

\stopsubsection
\stopsection
\stoptext

實際產量

每個部分之前的頁面都是空白的:

實際產量

無頁輸出

刪除該選項後page=yes,輸出會出現問題:

無頁面指令

\column命令似乎不再考慮列寬,並且文字在第一列的底部聚集。

預期輸出

所需的輸出在主要部分之間不會有空白頁:

預期輸出

解決方法

產生的 PDF包含多個頁面。使用鬼腳本可以刪除所有其他頁面(例如,使用gs -sPageList=even),這會產生所需的結果:

範例輸出

然而,額外的空白頁面會導致連鎖問題:額外的影像處理步驟、PDF 頁面需要重新排序,以及由於需要兩次傳遞而增加編譯時間。

問題

需要進行哪些變更才能從文件中消除空白頁?

想法

新增和刪除page=yes解決空白頁問題;但是,第一頁列集被壓縮到左側。我嘗試使用以下方法解決該問題:\definecolumnsetpage=yessetuphead

\definecounter[BookPageNumber][
  way=bychapter,
  prefix=no,
]

\definecolumnset[BookColumns][n=4,distance=.25in,page={\doifelse{\rawcountervalue[BookPageNumber]}{1}{}{yes}}]
\setupcolumnset[BookColumns:1][width=11.75in]
\setupcolumnset[BookColumns:2][width=3.46in]
\setupcolumnset[BookColumns:3][width=3.46in]
\setupcolumnset[BookColumns:4][width=3.46in]

\setuphead[section][
  before={%
    \doif{\rawcountervalue[BookPageNumber]}{1}{\page}
    \incrementcounter[BookPageNumber]
  },
  beforesection={\startcolumnset[BookColumns]},
  aftersection={\stopcolumnset},
]

但是,這不會產生所需的輸出。

答案1

列集是基於展開的,即當n=4您實際上有八列時,即左頁上四列,右頁上四列。文件總是打開一個您尚未設定的右頁面,這就是為什麼添加\page[yes]有幫助的原因,因為它將內容推送到已設定的左頁面。

因此,只需為右側頁面新增第 5-8 列即可解決問題。

\definepapersize[BookPaperSize][width=24in, height=12in,]
\setuppapersize[BookPaperSize]

\definelayout[BookTextLayout][
  topspace=.5in,
  backspace=.5in,
  header=\zeropoint,
  footer=\zeropoint,
  grid=yes,
]
\setuplayout[BookTextLayout]

\definecolumnset[BookColumns][n=4,distance=.25in]
\setupcolumnset[BookColumns:1][width=11.75in]
\setupcolumnset[BookColumns:2][width=3.46in]
\setupcolumnset[BookColumns:3][width=3.46in]
\setupcolumnset[BookColumns:4][width=3.46in]
\setupcolumnset[BookColumns:5][width=11.75in]
\setupcolumnset[BookColumns:6][width=3.46in]
\setupcolumnset[BookColumns:7][width=3.46in]
\setupcolumnset[BookColumns:8][width=3.46in]

\setuphead[section][
  %page=yes,
  beforesection={\startcolumnset[BookColumns]},
  aftersection={\stopcolumnset},
]

\setuphead[subsection][
  after={\column},
]

\setuphead[subsubsection][
  after={\blank[small]},
]

\starttext
\startsection[title={Section Title}]
\startsubsection[title={Subtitle}]
\dorecurse{2}{\input knuth}

\dorecurse{2}{%
  \startsubsubsection[title={Subsubtitle}]
    \dorecurse{1}{\input ward}
    \dorecurse{2}{\input lorem}
    \dorecurse{1}{\input bryson}
  \stopsubsubsection
}

\stopsubsection
\stopsection
\stoptext

在此輸入影像描述

相關內容