在多列环境中,文本的起始位置会根据字体大小而变化很大。如果您选择较大的字体大小,文本会触及顶部;但是如果您选择较小的字体大小,文本会位于非常低的位置。这看起来非常不平衡。我该如何修复它?
\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 值仅在环境主体期间发生变化,您将获得以下输出:
当然,除了将其设为 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}