I often have a long itemised list of words that and short phrases that wastes a lot of page space. E.g.
- short
- short
- short
- short
- short
- short
- short
- short
- something a bit longer
- something a bit longer
- something a bit longer
- something a bit longer
- something a bit longer
- something a bit longer
- something a bit longer
- something a bit longer
Natural temptation is to code it like this:
\begin{multicols}{3}
\begin{itemize}[nosep,noitemsep,left=6pt] % nosep helps but still a little wasteful. We try noitemsep in vain.. has no effect
\item short
\item short
\item short
\item short
\item short
\item short
\item short
\item short
\item something a bit longer
\item something a bit longer
\item something a bit longer
\item something a bit longer
\item something a bit longer
\item something a bit longer
\item something a bit longer
\item something a bit longer
\end{itemize}
\end{multicols}
The multicols
is claimed to be “balanced” but apparently that does not mean a balance of white space. It’s hard-coded to give each column an even share of width (⅓ of \linewidth). So it produces:
- short - short - something a bi
- short - short - something a bi
- short - short - something a bi
- short - something a bit l- something a bi
- short - something a bit l- something a bi
It’s even worse than that because the right column actually overlaps the center column and the right column runs off the page. All while a lot of wasted space is on the left column.
I doubt I can expect a pkg to be smart about max item widths for each column. But in principle I should be able to manually micromanage this and say make the left col “5em” wide, or something. The parcolumns
package gives that control, but it botches itemised lists even more and would force me to break the list into 3 separate lists because it’s designed to give you control over where the column breaks happen.
The enumitem
package suggests something along the lines of:
\SetEnumitemKey{threecol}{
itemsep = 1\itemsep,
parsep = 1\parsep,
before = \raggedcolumns\begin{multicols}{3},
after
= \end{multicols}}
(in effect) but same problem.
AFAICT, I will have to use parcolumns
with norulebetween
(because the vertical line is what screws up), and also make separate lists.. which is a bit sloppy code-wise.
I would expect this to be a common problem on CVs because you need to cram a lot of info in a small space and you would be listing skills which might involve many short words (C, C++, Java, Rust, Ada, Go, ..) along with some longer words (Fortran, Haskell, Cobalt, Pascal).
This thread suggests the vwcol
package, but it’s even worse. The code:
\begin{vwcol}[widths={0.2,0.4,0.4}]
Yields a first column that uses the full width. I still have to try the flowfram
and paracol
packages.
Update
The paracol
package seems like the best compromise. The layout gives control over a \columnratio
variable. It will not decide for you where to end a column and start a new one. That can be a nuissance in some cases but welcome in others. In fact, it’s not much different than just coding a minipage for each column. Demo:
\documentclass{article} % minimal not used because the itemize environment lacks bullets
\usepackage[margin=6mm]{geometry}
\usepackage{paracol}
\usepackage{enumitem}
\usepackage{lipsum}
\usepackage{blindtext}
\begin{document}
\setlist{nosep} % nix whitespace from all lists globally (to affect the \blindlist in particular)
\columnratio{0.2,0.26}
\begin{paracol}{3}
\blindlist{itemize}[6]
\switchcolumn % start column 2
\begin{itemize}[noitemsep,left=6pt]
\item medium width item list
\item medium width item list
\item medium width item list
\item medium width item list
\end{itemize}
\switchcolumn % start column 3
\begin{itemize}[noitemsep,left=6pt]
\item \lipsum[1][1]
\item \lipsum[1][1]
\item \lipsum[1][1]
\item \lipsum[1][1]
\end{itemize}
\end{paracol}