
Я хочу автоматизировать некоторые вещи в LaTeX с помощью циклов и saveboxes, но блоки не хотят автоматически переходить на следующую строку, когда для них нет места (saveboxes необходимы). Код ниже — простой пример того, чего я пытаюсь добиться (блоки не создаются через цикл, но я делаю это таким образом для простой демонстрации). X будет некоторым текстом
\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}}
решение1
Вам нужно использовать \global
before \setbox
, потому что \foreach
из pgf делает каждый шаг цикла в группе. Локальная настройка забывается, когда группа покидается. И вы хотите использовать \penalty0
для того, чтобы разрешить точку останова, потому что каждый \xsbox
exectes \leavevmode
перед установкой box, поэтому вы находитесь в горизонтальном режиме.
\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 }