Есть ли способ автоматически разбивать блоки (например, \raisebox) в конце строки?

Есть ли способ автоматически разбивать блоки (например, \raisebox) в конце строки?

Я новичок в LaTeX, поэтому буду благодарен за любую помощь:

Всякий раз, когда вы печатаете обычный текст в LaTeX, он автоматически переходит на следующую строку, если достигнут конец строки. Однако, если вы используете рамку (такую ​​как \raisebox) ближе к концу строки, она принудительно переносит рамку на ту же строку, даже если достигнут конец строки. (Насколько мне известно, это приводит к предупреждению "Overfull \hbox".)

\documentclass{article}
\begin{document}
This is some text that automatically goes in the next line if the end of the line is reached.
\raisebox{0.1ex}{This is some text that does not automatically go in the next line if the end of the line is reached. This even goes above the edge of the paper.}
\end{document}

Есть ли способ автоматически разбить ящик в конце строки и продолжить с ящиком в следующей строке? Если нет, то есть ли способ хотя бы автоматически перенести весь ящик на следующую строку?

Предыстория: Я учитель и пытаюсь создать задания по заполнению пробелов для своих учеников. Я делаю это, печатая обычный текст, а затем использую следующую команду:

\newlength{\diebox}
\newcommand{\blank}[1]{
    \settowidth{\diebox}{#1}
    \ifprintanswers
    \raisebox{0.1ex}{\parbox{2.3\diebox}{\textbf{#1}}}
    \else
    \raisebox{-0.5ex}{\parbox{2.3\diebox}{\hrulefill}}
    \fi}

(\ifprintanswers взят из пакета экзамена)

Я использую коэффициент «2,3», чтобы у моих учеников было больше места для записи ответов.

Это работает так, как и задумано, за исключением конца строки, где мои ответы / hrulefill не переносятся на следующую строку.

решение1

Я обхожу эту проблему, используя рекурсию для создания нового блока для каждого слова в ответе, вместо того, чтобы создавать только один большой hbox. Мне также приходится делать это \allowbreakмежду блоками. Кроме того, использование множителя 2.3 будет иметь тенденцию к разрыву полей, поэтому я использую , \sloppyчтобы избежать этого.

\documentclass{exam}
\newcommand\blankit[1]{\blankitaux#1 \relax}
\def\blankitaux#1 #2\relax{%
  \blank{#1}%
  \ifx\relax#2\relax\def\next{}\else\def\next{\blankitaux#2\relax}\fi
  \next
}
\newcommand{\blank}[1]{\allowbreak
    \setbox0=\hbox{#1}%
    \ifprintanswers
    \makebox[2.3\wd0][l]{\textbf{#1}\dotfill}%
    \else
    \raisebox{-0.5ex}{\makebox[2.3\wd0]{\hrulefill}}%
    \fi
}
\begin{document}
\sloppy
This is some text that automatically goes in the next line if the end of the line is reached.
\blankit{This is some text that does not automatically go in the next line if the end of the line is reached. This even goes above and beyond the edge of the paper.}
Returning to normal text.

\printanswerstrue
This is some text that automatically goes in the next line if the end of the line is reached.
\blankit{This is some text that does not automatically go in the next line if the end of the line is reached. This even goes above and beyond the edge of the paper.}
Returning to normal text.
\end{document}

введите описание изображения здесь

Связанный контент