在 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}