Ajuste automático de la separación de elementos para lograr un espacio igual

Ajuste automático de la separación de elementos para lograr un espacio igual

Actualmente estoy usando enumitem y creé un entorno para mis listas en un documento. Es el siguiente:

\newenvironment{alternativas}[1][0]
{
    \begin{enumerate}[label={\Alph*)}, itemsep=#1cm, topsep = 0.5cm, wide=0pt,labelwidth=.5cm,leftmargin=!]
}
{
    \end{enumerate}
}

(aunque no creo que importe mucho para la pregunta)

y he estado buscando una manera de ajustar automáticamente los elementos para tener el mismo espacio entre todos los elementos. Esto es lo que yonoquiero que suceda:

Debido a que la fracción usa más altura, el espacio entre ABC es diferente del espacio entre CDE y me parece extraño. Mi solución actual es usar el parámetro opcional en el entorno para ajustar manualmente el parámetro itemsep y hacer que se vea así:

Sin embargo, el ajuste manual es lento y necesito que algunas personas con menos experiencia utilicen este entorno. ¿Hay alguna manera de que itemsep se establezca automáticamente en la mayor separación entre elementos? Busqué mucho y no pude encontrarlo (tal vez mi mal inglés no ayudó). ¡Gracias!

Respuesta1

La solución que propongo es medir la altura y la profundidad de cada elemento, para obtener la altura y profundidad máximas. Si es necesario, el salto de línea base se establece en la altura máxima más la profundidad máxima más 2 puntos.

\documentclass{article}
\usepackage{xparse,enumitem,amsmath}

\ExplSyntaxOn

\NewDocumentCommand{\alternatives}{m}
 {
  \blaz_alternativas:n { #1 }
 }

\seq_new:N \l__blaz_alternativas_seq
\box_new:N \l__blaz_alternativas_item_box
\dim_new:N \l__blaz_alternativas_height_dim
\dim_new:N \l__blaz_alternativas_depth_dim

\cs_new_protected:Nn \blaz_alternativas:n
 {
  % first populate the sequence of items
  \seq_set_split:Nnn \l__blaz_alternativas_seq { \\ } { #1 }
  % now measure the heights and depths
  \dim_zero:N \l__blaz_alternativas_height_dim
  \dim_zero:N \l__blaz_alternativas_depth_dim
  \seq_indexed_map_inline:Nn \l__blaz_alternativas_seq
   {
    % set the box to the current item
    \hbox_set:Nn \l__blaz_alternativas_item_box { ##2 }
    % measure the height if not the first item
    \int_compare:nT { ##1 > 1 }
     {
      \dim_set:Nn \l__blaz_alternativas_height_dim
       {
        \dim_max:nn { \l__blaz_alternativas_height_dim }
                    { \box_ht:N \l__blaz_alternativas_item_box }
       }
     }
    % measure the depth if not the last item
    \int_compare:nT { ##1 < \seq_count:N \l__blaz_alternativas_seq }
     {
      \dim_set:Nn \l__blaz_alternativas_depth_dim
       {
        \dim_max:nn { \l__blaz_alternativas_depth_dim }
                    { \box_dp:N \l__blaz_alternativas_item_box }
       }
     }
   }
   \begin{enumerate}[label={\Alph*)},wide=0pt,labelwidth=.5cm,leftmargin=!,itemsep=0pt]
   % set the baselineskip
   \skip_set:Nn \baselineskip
    {
     \dim_max:nn { \baselineskip }
                 { \l__blaz_alternativas_height_dim + \l__blaz_alternativas_depth_dim }
     + 2pt
    }
   % deliver the items
   \seq_map_inline:Nn \l__blaz_alternativas_seq { \item ##1 }
   \end{enumerate}
 }

\ExplSyntaxOff

\begin{document}

\alternatives{ $1$ \\ $2$ \\ $3$ \\ $4$ \\ $5$ }

\alternatives{
  $1$ \\
  $\dfrac{3}{2}$ \\
  $\dfrac{3}{4}$ \\
  $4$ \\
  $5$
}

\end{document}

ingrese la descripción de la imagen aquí

Aquí hay una versión que se agrega \hphantom{$-$}delante de cada elemento que no comienza con $-, siempre que al menos uno lo haga.

\documentclass{article}
\usepackage{xparse,enumitem,amsmath}

\ExplSyntaxOn

\NewDocumentCommand{\alternatives}{m}
 {
  \blaz_alternativas:n { #1 }
 }

\seq_new:N \l__blaz_alternativas_seq
\box_new:N \l__blaz_alternativas_item_box
\dim_new:N \l__blaz_alternativas_height_dim
\dim_new:N \l__blaz_alternativas_depth_dim

\cs_new_protected:Nn \blaz_alternativas:n
 {
  % first populate the sequence of items
  \seq_set_split:Nnn \l__blaz_alternativas_seq { \\ } { #1 }
  % now measure the heights and depths
  \dim_zero:N \l__blaz_alternativas_height_dim
  \dim_zero:N \l__blaz_alternativas_depth_dim
  \seq_indexed_map_inline:Nn \l__blaz_alternativas_seq
   {
    % set the box to the current item
    \hbox_set:Nn \l__blaz_alternativas_item_box { ##2 }
    % measure the height if not the first item
    \int_compare:nT { ##1 > 1 }
     {
      \dim_set:Nn \l__blaz_alternativas_height_dim
       {
        \dim_max:nn { \l__blaz_alternativas_height_dim }
                    { \box_ht:N \l__blaz_alternativas_item_box }
       }
     }
    % measure the depth if not the last item
    \int_compare:nT { ##1 < \seq_count:N \l__blaz_alternativas_seq }
     {
      \dim_set:Nn \l__blaz_alternativas_depth_dim
       {
        \dim_max:nn { \l__blaz_alternativas_depth_dim }
                    { \box_dp:N \l__blaz_alternativas_item_box }
       }
     }
   }
   \begin{enumerate}[label={\Alph*)},wide=0pt,labelwidth=.5cm,leftmargin=!,itemsep=0pt]
   % set the baselineskip
   \skip_set:Nn \baselineskip
    {
     \dim_max:nn { \baselineskip }
                 { \l__blaz_alternativas_height_dim + \l__blaz_alternativas_depth_dim }
     + 2pt
    }
   % check whether some items start with $-
   \cs_set_protected:Nn \__blaz_alternativas_minus:n {##1} % do nothing by default
   \seq_map_inline:Nn \l__blaz_alternativas_seq
    {
     \regex_match:nnT { \A \$\- } { ##1 }
      {
       \seq_map_break:n
        {
         \cs_set_eq:NN \__blaz_alternativas_minus:n \__blaz_alternativas_addminus:n
        }
      }
    }
   % deliver the items
   \seq_map_inline:Nn \l__blaz_alternativas_seq { \item \__blaz_alternativas_minus:n {##1} }
   \end{enumerate}
 }
\cs_new_protected:Nn \__blaz_alternativas_addminus:n
 {
  \regex_match:nnF { \A \$\- } { #1 } { \hphantom{$-$} } #1
 }

\ExplSyntaxOff

\begin{document}

\alternatives{ $1$ \\ $2$ \\ $3$ \\ $4$ \\ $5$ }

\alternatives{
  $-1$ \\
  $-\dfrac{3}{2}$ \\
  $\dfrac{3}{4}$ \\
  $4$ \\
  $5$
}

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Aquí hay un enfoque completamente diferente basado en una tabla. He utilizado una versión ligeramente adaptada delnumeración automática de filas de la tabla en combinación con el cellspacepaquete para el espaciado alrededor de las entradas. Como alineé la columna a la derecha, esto también parece resolversetu pregunta de seguimiento:

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage[column=0]{cellspace}
\setlength\cellspacetoplimit{6pt}
\setlength\cellspacebottomlimit{\cellspacetoplimit}

\usepackage{array,etoolbox}
\preto\tabular{\setcounter{magicrownumbers}{0}}
\newcounter{magicrownumbers}
\newcommand\rownumber{\stepcounter{magicrownumbers}\Alph{magicrownumbers}}
\usepackage{amsmath}

\newenvironment{myalternatives}[1][0]
{\begin{tabular}{@{\makebox[3em][r]{\rownumber)~}}  >{$}0r<{$}}}
{\end{tabular}}

\begin{document}

\begin{myalternatives}
  1 \\
  \dfrac{3}{2} \\
  \dfrac{3}{4} \\
  4 \\
  5 \\
  -6\\
\end{myalternatives}

\end{document} 

información relacionada