我对 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}
如图所示这里也