背景
建立具有不同寬度的列的自訂多列佈局。
問題
這個問題的問題在之前的文章中提到但沒有解決回答:
設定
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
解決空白頁問題;但是,第一頁列集被壓縮到左側。我嘗試使用以下方法解決該問題:\definecolumnset
page=yes
setuphead
\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