Фон

Фон

Фон

Создание пользовательского многоколоночного макета со столбцами разной ширины.

Проблема

Проблема этого вопроса упоминалась, но не рассматривалась в предыдущемотвечать:

Настройка 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больше не учитывает ширину столбцов, и текст скапливается в нижней части первого столбца.

Ожидаемый результат

В желаемом результате не будет пустой страницы между основными разделами:

Ожидаемый результат

Обойти

Theполученный PDF-файлсодержит несколько страниц. ИспользованиеGhostscriptработает для удаления каждой второй страницы (например, с помощью 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

Columnsets основаны на разбросе, то есть когда 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

введите описание изображения здесь

Связанный контент