저는 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}