Фон
Создание пользовательского многоколоночного макета со столбцами разной ширины.
Проблема
Проблема этого вопроса упоминалась, но не рассматривалась в предыдущемотвечать:
Настройка
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