隐藏部分文字,留下空白

隐藏部分文字,留下空白

我对 LaTeX 还很陌生,所以我的问题可能很简单,但到目前为止我还没有找到一个好的解决方案。

我正在准备一些讲义,我想有两个不同的版本:一个给我自己,包含我在讲课期间需要的所有信息;另一个给学生,其中的一些文本和/或图形和/或方程式被删除(一些空白占据页面上的相同空间,以便学生可以填补空白)。我知道\phantom,但它似乎效率不高,因为我必须准备同一份文档的两个版本。我也看过这个censor包,但它似乎不能很好地处理方程式。还有其他关于如何干净高效地做到这一点的建议吗?

答案1

我经常做同样的事情;在美国的教育界,这被称为骨架大纲。

我为自己准备了笔记,包括所有图表、解决方案、评论等。我还添加了额外的垂直间距,因为我的学生无法像 LaTeX 那样写得那么小或那么整齐。(如果他们能做到,我的工作肯定会更简单!)

最后,为了准备学生版本,我回到我想对学生隐藏的部分,并用

\color{white}{ here's the hidden text }

虽然技术含量不高,但只要我在原始的完整文件中进行任何编辑,创建学生版本只需要一两分钟。

答案2

在这个答案中,下划线软件包列表 - 优点和缺点,我修改了censor下划线,文本仍然完整,允许换行,甚至为降序字母打破下划线(但它不处理连字符)。最重要的是,我添加了数学下划线/审查功能。

所以我采用了这个解决方案,删除了放置文本的内容,只留下下划线。然后通过设置\censorruleheight=0ex,下划线被设置为零粗细,因此它消失了。所以你有\censor一行上的一串单词,\blackout多行上的一组单词,以及\mblackout数学表达式。

这种方法确实允许空白不仅跨越多行,甚至跨越分页符!

\documentclass{article}
\usepackage{censor}
\usepackage{stackengine}
\usepackage{scalerel}
\censorruleheight=0ex
\makeatletter
\long\def\blackout#1{%
  \def~{-}%
  \protected@edef\save@arg{#1}%
  \expandafter\censor@Block\save@arg\stringend\let~\sv@tilde}
\let\sv@cenword\@cenword
\newcommand\m@cenword[1]{\ThisStyle{%
  \stackengine{\mcensorruledepth}{$\SavedStyle\phantom{#1}$}%
    {\rule{\widthof{$\SavedStyle#1$}}{\the\censorruleheight}}{U}{c}{F}{T}{L}}}
\newcommand\mblackout[2][\dp\strutbox]{%
  \let\@cenword\m@cenword%
  \def\mcensorruledepth{#1}%
  \blackout{{#2}}%
  \let\@cenword\sv@cenword%
}
\makeatother
\parskip 1em
\begin{document}
The \verb|\censor| command can blackout \censor{this text} which appears on a single line.

The  \verb|\blackout| command allows the censoring of text even if it crosses a line/page boundary.
To test this macro, let's see \blackout{if this block of text is truly blacked out} across a line boundary.

For total blanking, there should be no need for \verb|\xblackout|.

But here is math versions, not black out, then blacked out:
\[ y = A x^2 + Bx + C + D\]
\[ y = \mblackout{A x^2} + Bx + \mblackout{C} + D\]

\[ y = \frac{a^3 + b^2 + c}{d_3}  + \frac{a^3 + b^2 + c}{d_3}\]
\[ y = \mblackout{\frac{a^3 + b^2 + c}{d_3}}  + \frac{a^3 + b^2 + c}{d_3}\]
\end{document}

在此处输入图片描述

答案3

使用这个答案作为起点...

将需要隐藏的代码放入环境里面\begin{master}...\end{master}

当你想要学生版本时,取消注释该行

%\studenttrue

完成 MWE

\documentclass{report}
\usepackage{xcolor,lipsum}

\newif\ifstudent

%\studenttrue

\makeatletter
\newenvironment{master}{%
  \ifstudent\def\@eqnnum{{\normalfont \color{white} (\theequation)}}\color{white}%
  \else\def\@eqnnum{{\normalfont \normalcolor (\theequation)}}\normalcolor%
  \fi}{}
\makeatother

\begin{document}
\lipsum[1]

\begin{master}
  \lipsum[1]
  \begin{equation}
    \omega
  \end{equation}
  \lipsum[1]
\end{master}

\lipsum[1]
\begin{equation}
  \omega
\end{equation}
\lipsum[1]
\end{document} 

当然答案是充满局限性的……

答案4

这是我采用的解决方案:

\ExplSyntaxOn
        \box_new:N \l_mypkg_box
        \int_new:N \l_mypkg_cleanup_int
        \DeclareDocumentCommand{\hideit}{O{1}+m}
              {
                \tex_setbox:D \l_mypkg_box \tex_vbox:D
                  {
                    #2\par
                    \dim_zero:N \tex_baselineskip:D
                    \dim_zero:N \tex_lineskip:D
                    \dim_zero:N \tex_lineskiplimit:D
                    \int_set:Nn \l_mypkg_cleanup_int {#1}
                    \mypkg_dismantle_loop:
                  }
                \tex_unvbox:D \l_mypkg_box
              }
            \cs_new_protected:Npn \mypkg_dismantle_loop:
              {
                \prg_replicate:nn { \l_mypkg_cleanup_int }
                  {
                    \skip_if_eq:nnT { \tex_lastskip:D } { \c_zero_skip } { \tex_unskip:D }
                    \dim_compare:nT { \tex_lastkern:D = \c_zero_dim } { \tex_unkern:D }
                    \int_compare:nT { \tex_lastpenalty:D = \c_zero } { \tex_unpenalty:D }
                  }
                \skip_if_eq:nnTF { \tex_lastskip:D } { \c_zero_skip }
                  {
                    \dim_compare:nTF { \tex_lastkern:D = \c_zero_dim }
                      {
                        \int_compare:nTF { \tex_lastpenalty:D = \c_zero }
                          {
                            \box_set_to_last:N \l_mypkg_box
                            \box_if_empty:NF \l_mypkg_box
                              { \mypkg_dismantle_box: }
                          }
                          { \mypkg_dismantle_penalty: }
                      }
                      { \mypkg_dismantle_kern: }
                  }
                  { \mypkg_dismantle_skip: }
              }
            \cs_new_protected:Npn \mypkg_dismantle_skip:
              { \mypkg_dismantle_aux:nN { \tex_vskip:D \skip_use:N \tex_lastskip:D } \tex_unskip:D }
            \cs_new_protected:Npn \mypkg_dismantle_kern:
              { \mypkg_dismantle_aux:nN { \tex_kern:D \dim_use:N \tex_lastkern:D } \tex_unkern:D }
            \cs_new_protected:Npn \mypkg_dismantle_penalty:
              { \mypkg_dismantle_aux:nN { \tex_penalty:D \int_use:N \tex_lastpenalty:D } \tex_unpenalty:D }
            \cs_new_protected:Npn \mypkg_dismantle_box:
              { \mypkg_dismantle_aux:nN { \tex_vbox:D to \dim_eval:n { \box_ht:N \l_mypkg_box + \box_dp:N \l_mypkg_box } { } } \scan_stop: }
            \cs_new_protected:Npn \mypkg_dismantle_aux:nN #1#2
              {
                \use:x
                  {
                    #2
                    \mypkg_dismantle_loop:
                    #1 \scan_stop:
                  }
}
\ExplSyntaxOff

%conditional compilation for students version of document
\newif\ifstudents
%\studentstrue % comment out to hide text and equations


\begin{document}
Some text.
   \ifstudents \hideit[2]{ \fi
   \begin{equation*}
        \Delta H_{\mathrm{r},T_{2}} = \Delta H_{\mathrm{r},T_{1}} +\int\limits_{T_{1}}^{T_{2}} \Delta C_{p}\diff T 
   \end{equation*}
   \ifstudents } \fi
\end{document}

如图所示这里

相关内容