Die Anfangsposition des Textes variiert in der Multicols-Umgebung je nach Schriftgröße stark. Wenn Sie eine große Schriftgröße wählen, berührt der Text den oberen Rand; wenn Sie jedoch eine kleine Schriftgröße wählen, sitzt der Text sehr tief. Das sieht sehr schief aus. Wie kann ich das beheben?
\documentclass[12pt]{article}
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
\newcommand{\m}{\begin{multicols}{2}
\noindent
this is a test\\
this is a test\\
this is a test\\
this is a test
\end{multicols}}
\begin{document}
\Huge\m
\normalsize\m
\tiny\m
\end{document}
Antwort1
Der beschriebene Anwendungsfall multicol
soll die Seitenerstellung so nachahmen, wie sie normalerweise abläuft, mit der Ausnahme, dass anstelle einer einzelnen Spalte mehrere Spalten erstellt werden. Das bedeutet, dass am oberen Rand jeder Spalte die erste Zeile der Umgebung \topskip
positioniert wird .multicols
\topskip
ist ein Register, das normalerweise im gesamten Dokument nicht geändert wird (selbst wenn sich die Schriftgröße an einigen Stellen im Dokument ändert). Dies geschieht, damit die erste Zeile auf einer Seite „normalerweise“ an derselben Position steht. Der Wert für \topskip
wird normalerweise von der Klasse definiert, d. h. wenn Sie 12pt
als Option für die Klasse angeben, beträgt die Standardschriftgröße 12 Punkte und die \topskip
beträgt ebenfalls 12 Punkte (während die \baselineskip
etwa wie folgt lautet 14.4pt
).
In Ihrem Anwendungsfall sieht dies möglicherweise etwas seltsam aus, aber wie ich bereits sagte, wurde das Paket nicht für diesen Anwendungsfall geschrieben, sodass der gesamte Hauptteil der Umgebung eine andere Schriftgröße aufweist. Wenn Sie beispielsweise in der ersten Zeile der ersten Spalte eine winzige Schriftart, in der zweiten Spalte jedoch eine normale Schriftart haben, multicol
würde dieser Ansatz dafür sorgen, dass es richtig herauskommt, während \topskip
es bei einer Änderung der Schriftgröße ziemlich ungleichmäßig aussehen würde.
Außerdem handelt es sich beim Seitenumbruch um einen asynchronen Vorgang, sodass die \topskip
durch einen Befehl zur Schriftgröße geänderte Schrift im Text möglicherweise an der falschen Stelle erfolgt, da TeX beschließt, den Umbruch früher oder später vorzunehmen.
Eine Möglichkeit, Ihren Anwendungsfall zu berücksichtigen, besteht darin, \topskip
die multicols
aktive Zeit zu ändern. Dies ist innerhalb der Umgebung möglich, sodass der alte Topskip-Wert wiederhergestellt wird, sobald sich die Umgebung ändert, z. B.
\documentclass[12pt]{article}
\usepackage{multicol}
\setlength{\columnseprule}{0.4pt}
\newcommand{\m}[1]{\begin{multicols}{2}
#1\setlength\topskip{.7\baselineskip}% set font and \topskip
\noindent
this is a test\\
this is a test\\
this is a test\\
this is a test
\end{multicols}}
\begin{document}
\m{\Huge}
\m{\normalsize}
\m{\tiny}
\end{document}
Jetzt werden die Schriftart und der Topskip-Wert nur während des Umgebungstexts geändert und Sie erhalten die folgende Ausgabe:
Anstatt 70 % zu verwenden, \baselineskip
könnte man natürlich auch einen expliziten Wert oder einen anderen Bruchteil angeben. Weniger als 60 % oder so bringt nichts, weil die Zeichen diesen Anteil bereits belegen.
Antwort2
Ich bin nicht sicher, woher \topskip kommt, aber der Standardwert ist 12pt, unabhängig von der Schriftgröße. Werte kleiner als .6\baselineskip scheinen keine Wirkung zu haben. Größere Werte verschieben den oberen Rand höher.
\documentclass[12pt]{article}
\usepackage{multicol}
\setlength{\columnseprule}{.4pt}%
\newcommand{\m}{\topskip=.6\baselineskip
\begin{multicols}{2}
\noindent
this is a test\\
this is a test\\
this is a test\\
this is a test
\end{multicols}}
\begin{document}
\noindent
\Huge\m
\normalsize\m
\tiny\m
\end{document}