this post was submitted on 11 Aug 2025
5 points (100.0% liked)

TeX typesetting

197 readers
1 users here now

A place to share ideas, resources, tips, and hacks for Donald Knuths typesetting software TeX. All variants and formats like OpTeX, LaTeX and ConTeXt are welcome.

founded 2 years ago
MODERATORS
 

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}
you are viewing a single comment's thread
view the rest of the comments
[–] evenwicht@lemmy.sdf.org 1 points 1 month ago* (last edited 1 month ago)

Indeed minipage would be a decent workaround in this scenario. It’s effectively very similar to what I settled on (paracol). I just updated the OP to reflect this.

With both the minipage approach and the paracol approach, we give up the ability to have text flow from one column to the other. But for the doc I am working on at the moment, it’s perhaps best to control the flow anyway.