Wie steuere ich die Starttextposition in einer Umgebung mit mehreren Spalten?

Wie steuere ich die Starttextposition in einer Umgebung mit mehreren Spalten?

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}

Hässliche Multicols

Antwort1

Der beschriebene Anwendungsfall multicolsoll 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 \topskippositioniert wird .multicols

\topskipist 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 \topskipwird normalerweise von der Klasse definiert, d. h. wenn Sie 12ptals Option für die Klasse angeben, beträgt die Standardschriftgröße 12 Punkte und die \topskipbeträgt ebenfalls 12 Punkte (während die \baselineskipetwa 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, multicolwürde dieser Ansatz dafür sorgen, dass es richtig herauskommt, während \topskipes 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 \topskipdurch 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, \topskipdie multicolsaktive 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:

Bildbeschreibung hier eingeben

Anstatt 70 % zu verwenden, \baselineskipkö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}

nach oben überspringen

verwandte Informationen