如何控制 multicols 環境中的起始文字位置?

如何控制 multicols 環境中的起始文字位置?

在 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 body 期間發生變化,您將得到以下輸出:

在此輸入影像描述

當然,除了提供 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}

頂跳過

相關內容