¿Cómo controlo la posición inicial del texto dentro de un entorno multicols?

¿Cómo controlo la posición inicial del texto dentro de un entorno multicols?

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}

multicolos feos

Respuesta1

El caso de uso para el cual multicolse 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 \topskipse utiliza para posicionar la primera línea del multicolsentorno.

\topskipes 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 \topskipnormalmente lo define la clase, es decir, si especifica 12ptcomo una opción para la clase, el tamaño de fuente predeterminado será de 12 puntos y \topskiptambién será de 12 puntos (mientras que \baselineskipserá 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 multicolenfoque haría que saliera bien, mientras que al \topskipcambiar 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 \topskipcambio 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 \topskipel tiempo multicolsque 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:

ingrese la descripción de la imagen aquí

En lugar de hacerlo el 70% del \baselineskipuno, 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}

saltar arriba

información relacionada