Подчеркивание с текстом на обоих концах строки

Подчеркивание с текстом на обоих концах строки

Я хочу сделать пробел между текстами на обоих концах строки. Например,пробел между текстами на обоих концах строки

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

Метод неудовлетворителен, поскольку длина заготовки заранее неизвестна.

Мои проблемы:

  1. Как разместить текст на \hrulefill?

  2. (Бонусный вопрос) Я обнаружил, что вертикальное положение горизонтальной линии, сгенерированной \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}

Студенческая копия:

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

Копия для учителя:

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

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