
Я хочу сделать пробел между текстами на обоих концах строки. Например,
\begin{enumerate}
\item There \hrulefill\ in the room.
\end{enumerate}
Но, вышеприведенное появляется только в студенческой версии, и я хочу сделать версию учителя, где ответ также напечатан в пропуске. Я не имею ни малейшего представления, но
\begin{enumerate}
\item There \underline{\makebox[100pt][l]{is a chair}} in the room.
\end{enumerate}
Метод неудовлетворителен, поскольку длина заготовки заранее неизвестна.
Мои проблемы:
Как разместить текст на
\hrulefill
?(Бонусный вопрос) Я обнаружил, что вертикальное положение горизонтальной линии, сгенерированной
\hrulefill
и,\underline
отличается. Как я могу контролировать вертикальное положение этих горизонтальных линий?
решение1
Хотя метод cslstr более надежен, один из способов сделать это — заменить его \hrulefill
на тот, который использует подчеркивание с помощью \xleaders
.
\documentclass[letter,10pt]{article}
\newcommand{\ulfrule}{\xleaders\hbox{\underline{ }}\hfill\kern0pt}
\begin{document}
\begin{enumerate}
\item There \hrulefill{} in the room.
\item There \ulfrule{} in the room.
\item There \ulfrule{}\underline{is a chair}\ulfrule{} in the room.
\end{enumerate}
\end{document}
Что производит:
Если вы хотите, чтобы ответ был выровнен по левому краю, вы можете удалить начало \ulfrule{}
перед ответом:
\documentclass[letter,10pt]{article}
\newcommand{\ulfrule}{\xleaders\hbox{\underline{ }}\hfill\kern0pt}
\begin{document}
\begin{enumerate}
\item There \hrulefill{} in the room.
\item There \ulfrule{} in the room.
\item There \underline{is a chair}\ulfrule{} in the room.
\end{enumerate}
\end{document}
Подробнее о том, что \xleaders
делает, можно узнать здесьв этом ответе
решение2
Вот простая реализация:
\documentclass{article}
\newif\ifteacher % starts out false
\newcommand{\fillanswer}[2][\fill]{%
\unskip\ \lhrulefill{#1}%
\ifteacher\makebox[0pt]{#2}\fi
\lhrulefill{#1}\ \ignorespaces}
\newcommand{\lhrulefill}[1]{%
\leavevmode
\leaders\hrule height -.3ex depth \dimexpr .3ex+.4pt\relax % define the leader
\hskip\glueexpr#1/2\relax\relax % how much it should extend
\kern0pt
}
\begin{document}
\begin{enumerate}
\item There \fillanswer{is a chair} in the room.
\item There \fillanswer[5cm]{is a chair} in the room.
\teachertrue
\item There \fillanswer{is a chair} in the room.
\item There \fillanswer[5cm]{is a chair} in the room.
\end{enumerate}
\end{document}
Значение по умолчанию для необязательного аргумента равно \fill
, что означает, что по сути \hrulefill
выполняется (но правило понижено). На самом деле мы устанавливаемдваправила и поле нулевой ширины между ними, если \ifteacher
установлено значение true.
решение3
Этот метод использует некоторые переопределения макроса \uline
для ulem
печати только подчеркивания из некоторого текста (при этом сам текст невидим). (См.этот ответдля аналогичного решения.)
Я добавил немного места с каждой стороны текста, чтобы пробел был немного больше, чем нужно (чтобы можно было писать от руки). Как показано на рисунке, это также изящно справится с очень длинными «пробелами», которые в итоге растянутся на несколько строк.
Версия для студентов сделана путем сохранения первой \let\filltheblanks...
команды и комментирования второй. Версия для учителей комментирует первую команду и сохраняет вторую.
\documentclass[]{report}
\usepackage{enumerate}
\usepackage[normalem]{ulem}
\begin{document}
\LARGE % Size seemed appropriate for this type of assignment
% Fill-in-the-blank command
\newcommand{\fillintheblank}[1]{\uline{\qquad#1\qquad}}
% For Student Version
\let\filltheblanks\phantom
% For Teacher Version
\let\filltheblanks\null
% Redefined \uline
\makeatletter
\def\UL@putbox{\ifx\UL@start\@empty \else % not inner
\vrule\@width\z@ \LA@penalty\@M
{\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}%
\filltheblanks{\box\UL@box}%
\fi}
\makeatother
%%%%%%%%%%%%%%%%
\begin{enumerate}[1.]
\item There \fillintheblank{was a dog} in the room.
\item There \fillintheblank{was a very, large, wet and disgusting looking dog} outside my door.
\end{enumerate}
\end{document}
Студенческая версия:
Версия для учителя:
решение4
Вариант ответа наСоздайте версию документа с возможностью заполнения пустых полей и возможностью включения и выключения пустых полей.
Он предусматривает \answer
сплошное подчеркивание (с переносами строк) и \answerwords
пословное подчеркивание. Раскомментируйте \TeacherCopy
в преамбуле и получите версию для учителя.
ПРАВКА: по просьбе Мануэля я оставляю дополнительное место для ответа студента, что я делаю, устанавливая размер шрифта до \Huge
начала затемнения подчеркивания, а затем сбрасывая его после этого (обратите внимание, что это не влияет на вертикальную высоту, выделенную для ответа, поскольку огромный текст преобразуется в вертикально оспариваемую линейку той же ширины).
ПЕРЕИЗДАНО таким образом, чтобы в версии для учителя был такой же интервал между словами, как и в версии для студентов.
Параметры \censorruleheight
и \censorruledepth
можно изменять для изменения высоты, толщины и размещения линейки соответственно.
\documentclass{article}
\usepackage{censor}
\usepackage{xcolor}
\usepackage{readarray}
\usepackage{ifthen}
\censorruledepth=-.2ex
\censorruleheight=.1ex
\newcounter{index}
\def\mysize{\Huge}
\def\answer#1{\mysize\xblackout{#1}\normalsize}
\def\answerwords#1{\mysize\blackout{#1}\normalsize}
\def\TeacherCopy{%
\def\answer##1{%
\color{red}%
\getargsC{##1}%
\setcounter{index}{0}%
\whiledo{\theindex<\narg}{%
\stepcounter{index}%
\setbox0=\hbox{\mysize\csname arg\romannumeral\theindex\endcsname}%
\underline{$\vphantom{g}$%
\makebox[\wd0]{\csname arg\romannumeral\theindex\endcsname}}%
\mysize\ \normalsize%
}%
\unskip%
\color{black}%
}%
\let\answerwords\answer%
}
%\TeacherCopy
\parindent0pt
\begin{document}
\begin{enumerate}
\item And the answer to life, the universe, and everything, is \answer{forty two}.
\item The beginning six words of the Gettysburg Address are
\answerwords{Four score and seven years ago}.
\end{enumerate}
\end{document}
Студенческая копия:
Копия для учителя: