Gibt es eine Möglichkeit, Boxen am Zeilenende automatisch zu trennen (z. B. \raisebox)?

Gibt es eine Möglichkeit, Boxen am Zeilenende automatisch zu trennen (z. B. \raisebox)?

Ich bin neu bei LaTeX und daher für jede Hilfe dankbar:

Wenn Sie in LaTeX normalen Text eingeben, wird automatisch in die nächste Zeile umgebrochen, wenn das Zeilenende erreicht ist. Wenn Sie jedoch gegen Ende der Zeile ein Feld (wie \raisebox) verwenden, wird das Feld in dieselbe Zeile verschoben, auch wenn das Zeilenende erreicht ist. (Soweit ich weiß, führt dies zu einer Warnung „\hbox ist übervoll“.)

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

Gibt es eine Möglichkeit, das Feld am Ende der Zeile automatisch abzubrechen und mit dem Feld in der nächsten Zeile fortzufahren? Wenn nicht, gibt es wenigstens eine Möglichkeit, das ganze Feld automatisch in die nächste Zeile zu setzen?

Hintergrund: Ich bin Lehrer und versuche, Lückentext-Aufgaben für meine Schüler zu erstellen. Dazu tippe ich normalen Text ein und verwende dann den folgenden Befehl:

\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 kommt aus dem Prüfungspaket)

Ich verwende den Faktor „2,3“, damit meine Schüler mehr Platz zum Schreiben ihrer Antworten haben.

Dies funktioniert wie vorgesehen, außer am Ende der Zeile, wo meine Antworten/das hrulefill nicht in die nächste Zeile umbricht.

Antwort1

Ich umgehe das Problem, indem ich Rekursion verwende, um für jedes Wort in der Antwort eine neue Box zu erstellen, anstatt nur eine große Hbox zu erstellen. Ich muss auch \allowbreakzwischen den Boxen Platzhalter verwenden. Darüber hinaus neigt die Verwendung des 2,3-Multiplikators dazu, Ränder zu unterbrechen, und deshalb verwende ich, \sloppyum dies zu vermeiden.

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

Bildbeschreibung hier eingeben

verwandte Informationen