A posição inicial do texto varia muito no ambiente multicols, dependendo do tamanho da fonte. Se você escolher um tamanho de fonte grande, o texto tocará o topo; mas se você escolher um tamanho de fonte pequeno, o texto ficará muito baixo. Isso parece muito desequilibrado. Como faço para corrigir isso?
\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}
Responder1
O caso de uso para o qual multicol
foi escrito é imitar a criação de páginas como normalmente acontece, exceto que em vez de uma única coluna são produzidas várias colunas. Isso significa que no topo de cada coluna \topskip
é utilizada para posicionar a primeira linha do multicols
ambiente.
\topskip
é um registro que normalmente não é alterado ao longo do documento (mesmo que o tamanho da fonte esteja mudando em alguns lugares do documento). Isso é feito para que a primeira linha de uma página fique "normalmente" na mesma posição. O valor de for \topskip
normalmente é definido pela classe, ou seja, se você especificar 12pt
como uma opção para a classe o tamanho da fonte padrão será 12 pontos e o tamanho da fonte \topskip
também será 12 pontos (enquanto o valor \baselineskip
será algo como 14.4pt
).
No seu caso de uso isso pode parecer um pouco estranho, mas como eu disse, o pacote não foi escrito para este caso de uso, pois todo o corpo do ambiente estaria em um tamanho de fonte diferente e se digamos que você tem uma fonte pequena no primeira linha da primeira coluna, mas uma fonte normal na segunda coluna, então a multicol
abordagem faria com que ela saísse correta, ao passo que, com \topskip
a mudança do tamanho da fonte, isso pareceria bastante irregular.
Além disso, a quebra de página é uma operação assíncrona, portanto, a \topskip
alteração por um comando de tamanho de fonte dentro do texto pode acontecer no lugar errado, pois o TeX decide quebrar mais cedo ou mais tarde.
Portanto, uma maneira de atender ao seu caso de uso é alterar \topskip
o tempo multicols
ativo, é possível fazer isso dentro do ambiente para que o valor antigo do topskip seja restaurado assim que o ambiente mudar, por exemplo
\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}
Agora, a fonte e o valor topskip são alterados apenas durante o corpo do env e você obterá a seguinte saída:
Em vez de torná-lo 70% de \baselineskip
um, é claro que poderíamos fornecer algum valor explícito ou uma fração diferente. Menos de 60% ou mais não fazem nada porque os personagens já ocuparão essa quantia.
Responder2
Não tenho certeza de onde vem o \topskip, mas o padrão é 12pt, independentemente do tamanho da fonte. Valores menores que .6\baselineskip parecem não ter efeito. Valores maiores movem o topo para cima.
\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}