带有间隙和白色文本的文本

带有间隙和白色文本的文本

我有一种带练习的学习文档。在这个文档中,我的文本有空白。空白目前用点填充。为此,我使用以下命令:

\newcommand{\gapunit}{.....}
\newcommand{\tinygap}{\gapunit}


% ===== EGREG VARIANT =====
\makeatletter
\newcount\my@repeat@count% initialize a new counter for the loop
\newcommand{\myrepeat}[3]{% new command with 2 arguments
    \begingroup% using a group here allows nested calls
    \my@repeat@count=1% initialize at 1, so that there are argument - 1 iterations and the last iterations doesn't have a separator following it
    \@whilenum\my@repeat@count<#1\do{#2#3\advance\my@repeat@count1}#2% as long as the iteration count is smaller than the argument, advance, meaning that the counter will be increased by 1
    \endgroup%
}
\makeatother

\newcommand{\shortgap}{%
    \myrepeat{3}{\gapunit}{\ }
}
\newcommand{\mediumgap}{%
    \myrepeat{5}{\gapunit}{\ }
}
\newcommand{\longgap}{%
    \myrepeat[10]{\gapunit}{\ }
}

现在我想将解决方案添加到我编译的 PDF 中。我想也许我可以添加白色文本,我将其写在点的顶部(希望这些点有人会用白色文本来添加解决方案。我完全同意这个想法,即有人可以突出显示白色文本以阅读它。最终,要么有人“欺骗自己”,要么有人真的学到了一些东西。

但是我怎样才能在间隙上写白色文字呢?

如果有一种不太复杂的更好方法将解决方案放入我的 PDF 中,我也愿意听取大家的意见。我只是不想丢失间隙点,也不想在我的模板中添加几页代码,以获得一些非常花哨的东西,而实际上白色文本就完全足够了 : )

好的解决方案是,以某种方式找出文档使用的背景颜色,这样它就不必一成不变地变成白色。

这是 GitHub 上的文档,以防我对差距或其他事情的描述过于模糊:回购

编辑

我以稍微修改的方式使用了 Andrew 的解决方案:

\newlength\blankblanklength
\newlength\blanktextlength
\newlength\blankcenterindentation
\newcommand\BlankText[2][]{%
    % do some length calculations for text length
    \if\relax\detokenize{#1}\relax%
        \settowidth{\blanktextlength}{#2}%
    \else%
        \setlength\blanktextlength{#1}%
    \fi% calculate width of text
    \rlap{\makebox[\blanktextlength][c]{\textcolor{white}{#2}}}% write the text without moving, centered in a box
    \raisebox{-0.5ex}{\hbox to \blanktextlength{\dotfill}}% add dots to cover text
}

\newcommand{\ShortBlankText}[1]{%
    \BlankText[2cm]{#1}
}
\newcommand{\MediumBlankText}[1]{%
    \BlankText[3.2cm]{#1}
}
\newcommand{\LongBlankText}[1]{%
    \BlankText[4.4cm]{#1}
}

答案1

編輯 II

修复在段落开头使用时的行为。该宏现在有两个可选参数:

 %usage: \BlankText(colour)[length]{text}

colour“空白文本”默认为白色,length点的默认为“空白文本”的长度。

编辑

添加一个可选参数来设置点的长度。

下面的 MWE 显示了如何使用\BlankText它的两个可选参数。它产生:

在此处输入图片描述

以下是代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}

\newlength\blanktextlength
% usage: \BlankText(colour: default=white)[length]{text}
\NewDocumentCommand\BlankText{ D(){white} o m }{%
  \IfNoValueTF{#2}{% no width specified
     \settowidth{\blanktextlength}{#3}%
     \makebox[0pt][l]{\textcolor{#1}{#3}}% write the text without moving
     }{% calculate width of text
     \setlength\blanktextlength{#2}%
     \makebox[0pt][l]{\hbox to \blanktextlength{\hfil\textcolor{#1}{#3}\hfil}}
     }%
  \raisebox{-0.5ex}{\hbox to \blanktextlength{\dotfill}}% add dots for text
}

\begin{document}

\BlankText{Start of paragraph}
Here is some white text: \BlankText{Hello}
Here is a little more: \BlankText{Can you read me through the dots?}

Same again with a declared width:
\BlankText[8cm]{Can you read me through the dots?}

\bigskip\noindent With \textcolor{blue}{blue} blank text:

\BlankText(blue){Start of paragraph}
Here is some blue text: \BlankText(blue){Hello}
Here is a little more: \BlankText(blue){Can you read me through the dots?}

Same again with a declared width:
\BlankText(blue)[8cm]{Can you read me through the dots?}

\end{document}

之前使用的问题\BlankText是由于\llap{...}无法很好地处理 LaTeX 段落而导致的。详情见\llap(或 \rlap)位于缩进段落的开头,解决方案是使用\makebox[0pt][l]{...}

请注意,如果\BlankText文本太长而无法放在一行中,文本将会超出右边距。

答案2

在此示例中,虚线间隙与排版文本的字体一样长:

\documentclass{article}
\usepackage{color}
\makeatletter
\def\gap#1{%
  \setbox\@tempboxa\hbox{{\color{white}#1}}%
  \@tempdima\wd\@tempboxa
  \rlap{\unhbox\@tempboxa}%
  \hb@xt@\@tempdima{\dotfill}%
}
\makeatother   

\begin{document}

  Bla bla bla \gap{Answer 1} Bla bla bla Bla bla bla Bla bla bla Bla bla
  bla Bla bla bla Bla bla bla Bla bla bla \gap{Answer 2 is a bit longer}
  bla blab bla. 

\end{document}

但是,如果你需要更多空间,你可以在颜色命令下面添加一些字体大小命令,例如

  \setbox\@tempboxa\hbox{{\color{white}\Large#1}}%

相关内容