Начальная позиция текста сильно варьируется в среде multicols в зависимости от размера шрифта. Если выбрать большой размер шрифта, текст касается верха; но если выбрать маленький размер шрифта, текст располагается очень низко. Это выглядит очень перекошенным. Как это исправить?
\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}
решение1
Вариант использования, для которого multicol
был написан, заключается в имитации создания страницы, как это обычно происходит, за исключением того, что вместо одного столбца создается несколько столбцов. Это означает, что в верхней части каждого столбца \topskip
используется для размещения первой строки среды multicols
.
\topskip
— это регистр, который обычно не изменяется по всему документу (даже если размер шрифта меняется в некоторых местах документа). Это делается для того, чтобы первая строка на странице «обычно» находилась в одной и той же позиции. Значение для \topskip
обычно определяется классом, т. е. если вы указываете 12pt
в качестве параметра для класса, то размер шрифта по умолчанию будет 12 пунктов, и \topskip
также будет 12 пунктов (в то время как \baselineskip
будет иметь вид 14.4pt
).
В вашем варианте использования это может выглядеть немного странно, но, как я уже сказал, пакет не был написан для этого варианта использования, так как все тело среды будет иметь другой размер шрифта, и если, скажем, у вас есть мелкий шрифт в первой строке первого столбца, но обычный шрифт во втором столбце, то такой multicol
подход позволит сделать так, чтобы он выглядел правильно, тогда как при \topskip
изменении размера шрифта это будет выглядеть довольно неровно.
Кроме того, разрыв страницы — асинхронная операция, поэтому \topskip
изменение размера шрифта в тексте может произойти в неправильном месте, поскольку TeX решит разорвать страницу раньше или позже.
Таким образом, один из способов удовлетворить ваш вариант использования — это изменить \topskip
время multicols
активности. Это можно сделать внутри среды, чтобы старое значение topskip было восстановлено после изменения среды, например:
\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}
Теперь шрифт и значение topskip изменяются только в теле env, и вы получите следующий вывод:
Вместо того, чтобы сделать его 70% от \baselineskip
единицы, конечно, можно было бы указать какое-то явное значение или другую дробь. Менее 60% или около того ничего не даст, потому что персонажи уже займут это количество.
решение2
Я не уверен, откуда взялся \topskip, но по умолчанию он равен 12pt независимо от размера шрифта. Значения меньше .6\baselineskip, похоже, не оказывают никакого эффекта. Большие значения перемещают верхнюю часть выше.
\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}