Hintergrund
Erstellen eines benutzerdefinierten mehrspaltigen Layouts mit Spalten unterschiedlicher Breite.
Problem
Das Problem dieser Frage wurde bereits in einer früherenAntwort:
Das Setzen
page=yes
hat einen unangenehmen Nebeneffekt: Das Buch ist zwischen den Kapiteln mit leeren Seiten durchsetzt. Diese können mit Ghostscript nachträglich entfernt werden...
Mit anderen Worten: Ohne diese page=yes
Option kann ConTeXt den Text nicht wie gewünscht formatieren. Mit dieser page=yes
Option formatiert ConTeXt wie erwartet, exportiert aber eine unerwünschte leere Seite zwischen den Hauptabschnitten.
Code
Minimales funktionierendes Beispiel, das das Problem veranschaulicht:
\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
Tatsächliche Ausgabe
Die Seite vor jedem Abschnitt ist leer:
Ausgabe ohne Seite
Wenn die page=yes
Option entfernt wird, treten in der Ausgabe Probleme auf:
Der \column
Befehl scheint die Spaltenbreiten nicht mehr zu berücksichtigen und der Text staut sich am unteren Ende der ersten Spalte.
Erwartete Ausgabe
Die gewünschte Ausgabe würde keine leere Seite zwischen den Hauptabschnitten aufweisen:
Problemumgehung
Derresultierendes PDFenthält mehrere Seiten. MitGhostscriptfunktioniert, indem jede zweite Seite gelöscht wird (z. B. mit gs -sPageList=even
), was zum gewünschten Ergebnis führt:
- Inflationstheorie vonRoen Kelly
- Sterne vonJames Josephides
Die zusätzliche leere Seite führt jedoch zu Folgeproblemen: zusätzliche Bildverarbeitungsschritte, Neuanordnung der PDF-Seiten und längere Kompilierungszeit aufgrund der Notwendigkeit von zwei Durchgängen.
Frage
Was muss sich ändern, damit die leeren Seiten aus dem Dokument verschwinden?
Ideen
page=yes
Das Hinzufügen zu \definecolumnset
und Entfernen page=yes
von aus setuphead
löst das Problem der leeren Seiten; allerdings wird der Spaltensatz der ersten Seite nach links gequetscht. Ich habe versucht, das Problem folgendermaßen zu lösen:
\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},
]
Dies führt jedoch nicht zum gewünschten Ergebnis.
Antwort1
Spaltensätze sind spread-basiert, d. h. wenn n=4
Sie tatsächlich acht Spalten haben, nämlich vier auf der linken Seite und vier auf der rechten Seite. Ein Dokument wird immer mit einer rechten Seite geöffnet, die Sie nicht eingerichtet haben, und deshalb ist das Hinzufügen \page[yes]
hilfreich, da es den Inhalt auf die eingerichtete linke Seite verschiebt.
Das Problem lässt sich also einfach durch das Hinzufügen der Spalten 5–8 für die rechte Seite beheben.
\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