如何在多列环境中控制起始文本位置?

如何在多列环境中控制起始文本位置?

在多列环境中,文本的起始位置会根据字体大小而变化很大。如果您选择较大的字体大小,文本会触及顶部;但是如果您选择较小的字体大小,文本会位于非常低的位置。这看起来非常不平衡。我该如何修复它?

\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 点, 也将为\topskip12 点(而 将\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}

顶部跳过

相关内容