Existe uma maneira de quebrar automaticamente as caixas (por exemplo, \raisebox) no final da linha?

Existe uma maneira de quebrar automaticamente as caixas (por exemplo, \raisebox) no final da linha?

Sou novo no LaTeX, então agradeço qualquer ajuda:

Sempre que você digita texto normal em LaTeX, ele passa automaticamente para a próxima linha se o final da linha for alcançado. No entanto, se você usar uma caixa (como \raisebox) no final da linha, ela forçará a caixa a entrar na mesma linha, mesmo que o final da linha seja alcançado. (Até onde eu sei, isso resulta em um aviso "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}

Existe uma maneira de quebrar automaticamente a caixa no final da linha e continuar com a caixa na próxima linha? Caso contrário, é pelo menos uma maneira de colocar automaticamente a caixa inteira na próxima linha?

Antecedentes: Sou professor e estou tentando criar tarefas de "preencher as lacunas" para meus alunos. Faço isso digitando texto normal e depois uso o seguinte comando:

\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 vem do pacote do exame)

Eu uso o fator "2,3" para que meus alunos tenham mais espaço para escrever as respostas.

Isso funciona conforme o esperado, exceto no final da linha, onde minhas respostas/hrulefill não passam para a próxima linha.

Responder1

Contorno o problema usando recursão para criar uma nova caixa para cada palavra da resposta, em vez de criar apenas uma caixa grande. Eu também tenho que fazer isso \allowbreakentre as caixas. Além disso, o uso do multiplicador 2,3 tenderá a quebrar as margens, e por isso utilizo \sloppypara evitar isso.

\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}

insira a descrição da imagem aqui

informação relacionada