24

For a list of bullet-separated items, I want the separator to be swallowed if it is the first or last element of the line. That is, I want something like

\renewcommand{\and}{%
  \ifnolinebreak%    <=== HERE'S THE PROBLEM
    {\hfill\textbullet\hfill\xspace}%
  \else{}\fi
}
Aa Bb \and Cc Dd \and veryveryverylongE \and Ff Gg \and H

to end up like

Aa Bb   *   Cc Dd
veryveryverylongE
Ff Gg     *     H

I know that \discretionary can be exploited in the following way:

\renewcommand{\and}{\discretionary{}{}{\mbox{~~{\textbullet}~~}}}

This does the job, but unfortunately I can't find a way to insert a stretchable skip in the discretionary definition. Thus, it looks awkward in justified mode:

Aa   Bb * Cc   Dd
veryveryverylongE
Ff         Gg * H

Any ideas how to implement the \ifnolinebreak? If it matters, for this project I use LuaLaTeX...

20

Borrowing code by Marcin Woliński published as the TeX pearl "How to make a box disappear at a line break" one can do

\documentclass{article}
\newcommand{\AND}{\unskip
  \hskip 2pt plus 1pt minus 1pt
  \cleaders\copy\ANDbox\hskip\wd\ANDbox
  \hskip 2pt plus 1pt minus 1pt
  \ignorespaces}
\newsavebox\ANDbox
\sbox\ANDbox{\textbullet}

\begin{document}
\settowidth{\dimen0}{someveryverylongword}
\parbox{\dimen0}{
some text \AND some text \AND
someveryverylongword \AND
text \AND text}
\end{document}

enter image description here

1
  • I am wowed by the cleverness of how you demonstrated that the code actually works. I will have to keep this in mind as it is a lot easier than what I have used in the past: \usepackage[paperwidth=4.0cm]{geometry} and then tweak the value until it is correct. Feb 18 '12 at 16:52

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.