1

@Martin Scharrer suggested me the following amazing solution to make cloze texts: https://tex.stackexchange.com/a/16004/4011

\documentclass{article}
\usepackage[normalem]{ulem}

\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}%
    \phantom{\box\UL@box}%
  \fi}
\makeatother

\begin{document}

Some text \uline{some text to complete some  text to complete
some  text to complete some  text to complete some  text to complete some    text
to complete some  text to complete} some more text.

\end{document}

Now I have some follow up questions about this approach:

  1. How can I adjust this such that I can choose all the "underline styles" offered by the ulem package \dotuline, \dashuline, \uwave and\uuline?
  2. How can I adjust the vertical space between the phantom text and the underline?
  3. Is it possible to get a normal working version of \uline at the same time? (Call it for example \Uline, \Uuline etc.).
student
  • 29,003

2 Answers2

4
  1. Just use them.

  2. \setlength{\ULdepth}{...}

  3. The following example adds the switch \ifulphantom that can be set to enable or disable the phantom version for the macros of package ulem.

Full example:

\documentclass{article}
\usepackage[normalem]{ulem}

\makeatletter
\@ifdefinable\UL@putbox@original{%
  \let\UL@putbox@original\UL@putbox
  \def\UL@putbox@phantom{%
    \ifx\UL@start\@empty
    \else % not inner
      \vrule\@width\z@
      \LA@penalty\@M
      {\UL@skip\wd\UL@box \UL@leaders \kern-\UL@skip}%
      \phantom{\box\UL@box}%
    \fi
  }%
  \newif\ifulphantom
  \renewcommand*{\UL@putbox}{%
    \ifulphantom
      \expandafter\UL@putbox@phantom
    \else
      \expandafter\UL@putbox@original
    \fi
  }%
}
\makeatother

\usepackage{parskip}

\begin{document}

\ulphantomtrue

\begingroup
  \setlength{\ULdepth}{0pt}

  Some text \uline{some text to complete some  text to complete
  some  text to complete some  text to complete some  text to complete some
  text to complete some  text to complete} some more text.

  \setlength{\ULdepth}{1ex}

  Some text \uline{some text to complete some  text to complete
  some  text to complete some  text to complete some  text to complete some
  text to complete some  text to complete} some more text.
\endgroup

Some text \uuline{some text to complete some  text to complete
some  text to complete some  text to complete some  text to complete some
text to complete some  text to complete} some more text.

Some text \uwave{some text to complete some  text to complete
some  text to complete some  text to complete some  text to complete some
text to complete some  text to complete} some more text.

\ulphantomfalse

\begingroup
  \setlength{\ULdepth}{0pt}

  Some text \uline{some text to complete some  text to complete
  some  text to complete some  text to complete some  text to complete some
  text to complete some  text to complete} some more text.

  \setlength{\ULdepth}{1ex}

  Some text \uline{some text to complete some  text to complete
  some  text to complete some  text to complete some  text to complete some
  text to complete some  text to complete} some more text.
\endgroup

Some text \uuline{some text to complete some  text to complete
some  text to complete some  text to complete some  text to complete some
text to complete some  text to complete} some more text.

Some text \uwave{some text to complete some  text to complete
some  text to complete some  text to complete some  text to complete some
text to complete some  text to complete} some more text.

\end{document}

Result

Heiko Oberdiek
  • 271,626
1

I wrote a package named “cloze” that specializes in creating cloze texts. You have to use LuaLaTeX or LuaTeX.

\documentclass{article}
\usepackage[show]{cloze}

\begin{document} Some text \cloze{some text to complete some text to complete some text to complete some text to complete some text to complete some text to complete some text to complete} some more text. \end{document}

Cloze show

Change the global options to \usepackage[hide]{cloze} or use \clozehide to hide the cloze text.

Cloze hide

  • +1 but what does "cloze text" mean? – AndréC Jul 12 '20 at 08:59
  • Should it be "cloze test"? In German Lückentext. A text with gaps. See https://en.wikipedia.org/wiki/Cloze_test – JosefFriedrich Jul 12 '20 at 09:22
  • Thank you very much. In French we say «texte à trous». – AndréC Jul 12 '20 at 09:57
  • @JosefFriedrich Your package is great, but is there an option to have a dotted line for the cloze text? It would look much better in fractions where both the nominator and the denominator are hidden. – Georgios Dec 01 '21 at 18:21
  • @Georgios unfortunately there is no option for dotted lines. Maybe the command \clozenol{} (cloze no line) will help you in fractions ... or a different cloze line color. – JosefFriedrich Dec 02 '21 at 21:03