Quebra automática de linha de caixas

Quebra automática de linha de caixas

Quero automatizar algumas coisas no LaTeX usando loops e saveboxes, mas as caixas não querem ir automaticamente para a próxima linha quando não há espaço para elas (são necessárias saveboxes). O código abaixo é um exemplo simples do que estou tentando alcançar (as caixas não são criadas via loop, mas estou fazendo desta forma para fins de demonstração simples). X será algum texto

\usepackage{xsavebox}
\usepackage{pgffor}
\foreach \n in {3,...,11}{\xsbox{R.1.\n}{\textbf{R.1.\n}~X\hspace{2em}}}
...
\foreach \n in {3,...,11}{\xusebox{R.1.\n}}

Este código resulta em algo assim: insira a descrição da imagem aqui

Responder1

Você precisa usar \globalbefore \setbox, porque \foreachfrom pgf faz cada loop-step em um grupo. O cenário local é esquecido quando o grupo sai. E você quer usar \penalty0para permitir um ponto de quebra, pois cada um \xsboxexecuta \leavevmodeantes de colocar a caixa, então você fica no modo horizontal.

\foreach \n in {3,...,11}
    {\global\setbox\n=\hbox{\textbf{R.1.\n}~X\hskip2em}%
     \leavevmode\copy\n\hfil\penalty0 }
...
\foreach \n in {3,...,11}{\leavevmode\box\n\hfil\penalty0 }

informação relacionada