背景

背景

背景

幅が異なる列を持つカスタムの複数列レイアウトを作成します。

問題

この質問の問題は、以前の質問では言及されているが、対処されていない。答え:

設定により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複数のページが含まれています。ゴーストスクリプトは、1 ページおきにページを削除するように機能し (たとえば、 を使用gs -sPageList=even)、目的の結果が生成されます。

出力例

ただし、余分な空白ページによって連鎖的な問題が発生します。つまり、追加の画像処理ステップ、PDF ページの並べ替えの必要性、2 回のパスが必要なためにコンパイル時間が長くなるなどです。

質問

文書から空白ページを削除するには、何を変更する必要がありますか?

アイデア

page=yesに追加してから\definecolumnset削除すると、空白ページの問題は解決されますが、最初のページの列セットが左側に押しつぶされます。私は次の方法でこの問題に対処しようとしました。page=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実際には 8 つの列があり、左ページに 4 つ、右ページに 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

ここに画像の説明を入力してください

関連情報