La posición inicial del texto varía enormemente en el entorno multicol según el tamaño de fuente. Si elige un tamaño de fuente grande, el texto toca la parte superior; pero si elige un tamaño de fuente pequeño, el texto quedará muy bajo. Esto parece muy desequilibrado. ¿Cómo lo soluciono?
\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}
Respuesta1
El caso de uso para el cual multicol
se ha escrito es imitar la creación de páginas como ocurre normalmente, excepto que en lugar de una sola columna se producen varias columnas. Eso significa que en la parte superior de cada columna \topskip
se utiliza para posicionar la primera línea del multicols
entorno.
\topskip
es un registro que normalmente no se cambia en todo el documento (incluso si el tamaño de fuente cambia en algunos lugares dentro del documento). Esto se hace para que la primera línea de una página esté "normalmente" en la misma posición. El valor de \topskip
normalmente lo define la clase, es decir, si especifica 12pt
como una opción para la clase, el tamaño de fuente predeterminado será de 12 puntos y \topskip
también será de 12 puntos (mientras que \baselineskip
será algo así como 14.4pt
).
En su caso de uso, esto puede parecer un poco extraño, pero como dije, el paquete no fue escrito para este caso de uso, por lo que todo el cuerpo del entorno tendría un tamaño de fuente diferente y, si dice que tiene una fuente pequeña en el primera línea de la primera columna pero una fuente normal en la segunda columna, entonces el multicol
enfoque haría que saliera bien, mientras que al \topskip
cambiar el tamaño de fuente esto se vería bastante desigual.
Además, el salto de página es una operación asincrónica, por lo que el \topskip
cambio mediante un comando de tamaño de fuente dentro del texto puede ocurrir en el lugar equivocado ya que TeX decide romper antes o después.
Entonces, una forma de atender su caso de uso es cambiar \topskip
el tiempo multicols
que está activo, es posible hacerlo dentro del entorno para que el antiguo valor de salto superior se restablezca una vez que el entorno cambie, por ejemplo.
\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}
Ahora la fuente y el valor de salto superior solo cambian durante el cuerpo del entorno y obtendrá el siguiente resultado:
En lugar de hacerlo el 70% del \baselineskip
uno, por supuesto podría proporcionar algún valor explícito o una fracción diferente. Menos del 60% aproximadamente no hace nada porque los personajes ya ocuparán esa cantidad.
Respuesta2
No estoy seguro de dónde viene \topskip, pero el valor predeterminado es 12 puntos independientemente del tamaño de fuente. Los valores inferiores a 0,6\baselineskip parecen no tener ningún efecto. Los valores más grandes mueven la parte superior hacia arriba.
\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}