1

I have a page broken into two columns with \minipage, and within each \minipage I have a \begin{enumerate} environment with several \item in each. The items are labelled (1), (2), etc... and the first \item in the left \minipage relates to the first \item in the right \minipage and so on for both lists. However the entries have differing lengths in each column so they are not automatically aligned across the columns. I'd like the (1) in the left column to align with the (1) in the right, and so on, regardless of the size of the entry, i.e., have the appropriate amount of vertical space inserted between items in order to keep horizontal alignment between the list numbers.

At the moment, I'm using \vspace*{0.Xcm} or even multiple \hbox{} to manually move the \items up or down to get the alignment I want, but this is very time consuming and finicky.

I've been looking at similar questions regarding \minipage alignments here on stackexchange, but cannot find what I'm looking to do. Is there a method to align the items in the manner I want? Is minipage the correct method to attempt this or should I be using a table of some kind?

Example:

\documentclass{tufte-book}
\usepackage{enumitem}
\begin{document}
\begin{minipage}[t]{.48\linewidth}%.48\linewidth to give padding between columns
\tb{List 1}
\begin{enumerate}[noitemsep]
\item This is item 1.
\item This is item two and is quite a bit longer than item one, taking up   more than one line. This issue now is that item three in this list will not horizontally align with item 3 in the adjacent list due to the varying linewidth.
\item This is item 3.
\end{minpage}
\begin{minipage}[t]{.48\linewidth}
\tb{List 2}
\begin{enumerate}[noitemsep]
\item This is item 1.
\item This is item 2.
\item this is item 3.
\end{enumerate}
\end{minipage}
\end{document}
1

You could use \vspace{n\baselineskip} to align two lists where n is number of lines you want to skip. Note- Your example has some error in syntax. I assumed \tb to be \textbf and changed \end{minpage} to \end{minipage}.

Here is a working example-

\documentclass{tufte-book}
\usepackage{enumitem}
\begin{document}
    \begin{minipage}[t]{.48\linewidth}%.48\linewidth to give padding between columns
        \textbf{List 1}
        \begin{enumerate}[noitemsep]
            \item This is item 1.
            \item This is item two and is quite a bit longer than item one, taking up   more than one line. This issue now is that item three in this list will not horizontally align with item 3 in the adjacent list due to the varying linewidth.
            \item This is item 3.
            \end{enumerate}
        \end{minipage}
        \begin{minipage}[t]{.48\linewidth}
            \textbf{List 2}
            \begin{enumerate}[noitemsep]
                \item This is item 1.
                \item This is item 2. \vspace{7\baselineskip}
                \item this is item 3.
            \end{enumerate}
        \end{minipage}
    \end{document}

this results in - enter image description here

2

You can use a tabular-like structure to maintain the vertical alignment across elements. This is easily achievable via tabularx:

enter image description here

\documentclass{tufte-book}

\usepackage{tabularx}

\begin{document}

\noindent
\begin{tabularx}{\linewidth}{@{} r X r X @{}}
  \multicolumn{2}{@{} l}{\bfseries List 1} & \multicolumn{2}{l}{\bfseries List 2} \\[\topsep]
  1. & This is item 1. &
  1. & This is item 1. \\
  2. & This is item two and is quite a bit longer than item one, taking up 
       more than one line. This issue now is that item three in this list will 
       not horizontally align with item 3 in the adjacent list due to the varying 
       \verb|\linewidth|. &
  2. & This is item 2. \\
  3. & This is item 3. &
  3. & This is item 3.
\end{tabularx}

\end{document}

You can enter the list enumeration manually, or automate the process using a specific column type. However, for small lists, this may not be necessary.

List spacing can be managed on a case-by-case basis or set universally.

1

If you want to write whole first column and then whole second column and you don't want to use special markup for tables then your problem is typical task for usage of \valign primitive:

\newcount\colitemnum
\long\def\twocolitems#1{\hbox{\colitemnum=0
   \def\firstitem##1{\global\advance\colitemnum by1 \llap{(\the\colitemnum)\ }}%
   \def\item{&\firstitem:}%
   \def\nextcol##1{\cr\colitemnum=0 \firstitem:}%
   \hsize=.5\hsize \leftskip=2em \rightskip=1em 
   \valign{&\vtop{\noindent\strut##\unskip\strut}\vfil\cr\firstitem#1\crcr}}}

\twocolitems{
\item This is item 1.
\item This is item two and is quite a bit longer than item one, taking up   more than one line. This issue now is that item three in this list will not horizontally align with item 3 in the adjacent list due to the varying linewidth.
\item This is item 3.
\nextcol
\item This is item 1 and it is quite a bit longer, more than one line.
\item This is item 2.
\item this is item 3.
}

\bye
1

Another solution, based on tabularx and ltablex (so it can break across pages), using the series key from enumitem.

I defined a new column type, E which is an X column type starting and ending an enumerate environment. It receives an argument, the name of the series in that column. As there must be an initial enumerate which defines the series, I defined an \Ehead command which puts the column heads in such an enumerate (these column heads are not enumerated, using the optional argument of item).

\documentclass[showframe]{tufte-book}%
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ragged2e}
\usepackage{enumitem}
\usepackage{ltablex, booktabs}
\keepXColumns

 \makeatletter
 \newcommand*{\compress}{\@minipagetrue}
 \makeatother

\newcolumntype{E}[1]{>{\enumerate[#1]}X<{\endenumerate}}

\newcommand\Ehead[2]{\multicolumn{1}{@{}X}{ \begin{enumerate}[series=#1, before = \compress\vspace{-\baselineskip}]
\item[\bfseries #2]
\end{enumerate}}}

\begin{document}

\noindent
\setlist[enumerate] {wide=0pt, label=\arabic*., leftmargin=*, before=\vspace*{-\baselineskip}
  , after =\vspace{-\dimexpr\baselineskip + \partopsep}}
\begin{tabularx}{\linewidth}{@{}E{colA}E{colB}@{}}
  \Ehead{colA}{List 1}
                                                                                   &
  \Ehead{colB}{List 2} \\
  \addlinespace[-2ex]
  \hline
  \item This is item 1. &
  \item This is item 1. \\\hline
  \item This is item two and is quite a bit longer than item one, taking up
  more than one line. This issue now is that item three in this list will
  not horizontally align with item 3 in the adjacent list due to the varying
  \verb|\linewidth|.
                                                                                   &
  \item This is item 2. \\\hline
  \item This is item 3. A longer item3, not so long as item 2 in the right column. &
  \item This is item 3. \\
  \hline
\end{tabularx}

\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.