我有一种带练习的学习文档。在这个文档中,我的文本有空白。空白目前用点填充。为此,我使用以下命令:
\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}}%