
Quero deixar um espaço em branco entre os textos nas duas extremidades de uma linha. Por exemplo,
\begin{enumerate}
\item There \hrulefill\ in the room.
\end{enumerate}
Porém, o acima aparece apenas na versão do aluno, e quero fazer uma versão do professor onde a resposta também esteja impressa no espaço em branco. Eu não tenho ideia, mas
\begin{enumerate}
\item There \underline{\makebox[100pt][l]{is a chair}} in the room.
\end{enumerate}
O método não é satisfatório porque o comprimento da peça em bruto é desconhecido antecipadamente.
Meus problemas:
Como colocar texto em um
\hrulefill
?(Uma pergunta bônus) Descobri que a posição vertical da regra horizontal gerada por
\hrulefill
e\underline
é diferente. Como posso controlar a posição vertical dessas regras horizontais?
Responder1
Embora o método do cslstr seja mais robusto, uma maneira de fazer isso é substituir o \hrulefill
por um que use sublinhados usando \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}
O que produz:
Se você quiser que a resposta fique alinhada à esquerda, você pode remover o início \ulfrule{}
antes da resposta:
\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}
Mais sobre o \xleaders
que pode ser encontradonesta resposta
Responder2
Aqui está uma implementação simples:
\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}
O valor padrão para o argumento opcional é \fill
, o que significa que essencialmente \hrulefill
é executado (mas a regra é reduzida). Na verdade nós definimosdoisregras e a caixa de largura zero entre elas quando \ifteacher
definido como verdadeiro.
Responder3
Este método usa algumas redefinições da \uline
macro para ulem
imprimir apenas o sublinhado de algum texto (com o próprio texto invisível). (Veresta respostapara uma solução semelhante.)
Adicionei um pouco de espaço em cada lado do texto para que o espaço em branco fique um pouco maior do que deveria ser (para permitir a escrita à mão). Conforme ilustrado, isso também lidará com "espaços em branco" muito longos que acabam se estendendo por várias linhas.
A Versão Estudante é feita mantendo o primeiro \let\filltheblanks...
comando e comentando o segundo. A versão Teacher comenta o primeiro comando e mantém o segundo.
\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}
Versão do aluno:
Versão do professor:
Responder4
Uma variação da resposta emCrie uma versão para preencher espaços em branco de um documento com a capacidade de ativar e desativar espaços em branco
Ele fornece \answer
sublinhado contínuo (com quebras de linha) e \answerwords
sublinhado palavra por palavra. Remova o comentário \TeacherCopy
no preâmbulo e obtenha a versão do professor.
EDIT, a pedido do Manuel, deixo espaço extra para a resposta do aluno, o que faço definindo o tamanho da fonte \Huge
antes de iniciar o blecaute do sublinhado e, em seguida, redefinindo-o posteriormente (observe que isso não afeta a altura vertical alocada para a resposta, já que o texto Enorme é convertido em uma regra desafiada verticalmente da mesma largura).
REEDITADO para que a versão do professor forneça o mesmo espaçamento entre palavras da versão do aluno.
O \censorruleheight
e \censorruledepth
pode ser alterado para alterar a elevação, a espessura e o posicionamento da régua, respectivamente.
\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}
Cópia do aluno:
Cópia do professor: