Pregunta rápida: copié este código:
\documentclass{article}
\usepackage{amsmath,amssymb,calc}
\def\horizlist#1#2#3{%
\setcounter{enumi}{0}%
#3%
\flushleft
\newlength\stringlength
\setlength\stringlength{#2}
\advance\stringlength by #1 \relax
\def\item{\hfil\egroup\penalty50 \hfill
\refstepcounter{enumi}%
\leavevmode\hbox to \stringlength \bgroup\space(\theenumi)\space}
\leavevmode\bgroup\hskip 0pt plus -1fill }
\def\endhorizlist{\hfil\egroup\endflushleft}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{2cm}{\widthof{null}}{\renewcommand\theenumi{\alph{enumi}}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\end{horizlist}
\end{enumerate}
\end{document}
Hace lo que debe hacer, el único problema es que el último elemento aparece a la derecha, no junto a su predecesor a la izquierda. ¿Cómo puedo arreglar esto? Para iluminar el problema:
La salida es así:
Quiero esto:
¿Alguna ayuda?
Respuesta1
Deberá realizar un seguimiento de la columna actual. Me resulta más fácil (y también más flexible) hacer todo definiendo el horizlist
entorno como un archivo tabular
. De esta manera no solo puede usar \item
en lugar de &
/ \\
, sino también especificar la alineación deseada (el segundo argumento del horizlist
env).
\documentclass{article}
\usepackage{calc}
\newcount\horizlistcount
\newenvironment{horizlist}[2]{%
\setcounter{enumi}{0}%
\renewcommand\theenumi{\alph{enumi}}%
\def\nextsep{}%
\global\horizlistcount=#1
\def\item{%
\nextsep
\refstepcounter{enumi}(\theenumi)
\ifnum\horizlistcount=0 \global\horizlistcount=#1 \fi
\global\advance\horizlistcount-1
\ifnum\horizlistcount=0 \def\nextsep{\\}\else\def\nextsep{&}\fi
}%
\begin{tabular}[t]{*{#1}{#2}}
}{%
\end{tabular}
}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{4}{p{\widthof{null}+2cm}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\end{horizlist}
\end{enumerate}
\end{document}
(Para ingresar a una nueva línea antes de la tabla incrustada, simplemente diga \\
delante de ella o inclúyala en la definición).
Respuesta2
No está completamente automatizado, pero hace lo que necesita. Introducimos un comando \noitem
que inserta "elemento fantasma". Lo no automatizado es que no sabemos de antemano cuántos \noitems
deberían haber.
\documentclass{article}
\usepackage{amsmath,amssymb,calc}
\def\horizlist#1#2#3{%
\setcounter{enumi}{0}%
#3%
\flushleft
\newlength\stringlength
\setlength\stringlength{#2}
\advance\stringlength by #1 \relax
\def\item{\hfil\egroup\penalty50 \hfill
\refstepcounter{enumi}%
\leavevmode\hbox to \stringlength \bgroup\space(\theenumi)\space}
\def\noitem{\hfil\egroup\penalty50 \hfill
\leavevmode\hbox to \stringlength \bgroup}
\leavevmode\bgroup\hskip 0pt plus -1fill }
\def\endhorizlist{\hfil\egroup\endflushleft}
\begin{document}
\begin{enumerate}
\item blah
\begin{horizlist}{2cm}{\widthof{null}}{\renewcommand\theenumi{\alph{enumi}}}
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\item null
\noitem\noitem
\end{horizlist}
\end{enumerate}
\end{document}