有条件地隐藏文档的一部分

有条件地隐藏文档的一部分

我正在为我的学生制作一些大文件(大约 200 页)。在课堂上,他们必须填写一些空白(这有助于让他们保持清醒)。

因此,我需要 2 个版本的文档,一个是空白的,给学生,一个是填满所有内容的,给我自己。

我有一些宏可以做这个。它们可以完成工作,但它们可能还不够干净,因为我不是 LaTeX 专家,尽管我每天都在进步。

以下是代码示例:

\documentclass[a4paper,11pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage{ifthen}
\usepackage{lipsum}

\newcounter{ReplicateCount}
\newcommand{\Replicate}[2]{ %repeats #2 as many times as #1
    \setcounter{ReplicateCount}{#1}
    \whiledo{\value{ReplicateCount}>0}
    {#2\addtocounter{ReplicateCount}{-1}}
}
\newcommand{\hide}[2]{
    \ifthenelse{\equal{\edition}{E}}{
        ~\Replicate{#2}{ 
        \pagebreak[3]\vspace*{1cm}}
    }
    {
        #1
    }
}

\begin{document}

\def\edition{P}
\hide{\lipsum}{3} %will produce \lipsum

\def\edition{E}
\hide{\lipsum}{3} %will do \hspace*{3cm}, on 2 subsequent pages if   necessary

\end{document}

它的工作方式是这样的,在我的文档的开头,我决定将哪个值设置为我的变量 \edition,并且我只需改变一个字符就可以从学生版本切换到教师版本。

但我的问题是:当然,我需要在学生版上留出比我的版本实际占用的空间更多的空白。因此,两个版本的页码不同,这很不令人满意。我希望我的版本占用的空间与学生版完全相同(即使它在每次 \hide 调用结束时都留有空白)。我猜需要一个函数来计算文本在打印版本上实际占用的空间,以适应它。此外,我希望即使隐藏的文本位于 2 个不同的页面上,宏也能正常工作。

有人知道如何实现这个吗?提前感谢你的帮助,希望我能说清楚,提前为我的英语道歉,我不是英语母语人士 ;-)

大力神

答案1

您可能尝试的不是为学生隐藏文本,而是以白色或(甚至更好,但取决于打印机支持)透明的方式打印。在这种情况下,我会以灰色或在页边空白处加一个标记的方式打印教师版本。

如果您想要比文本占用的空间更多的空间,为什么不打印两次(您将文本块作为宏的参数)?对于学生来说,两次打印都会是白色,对于老师来说,一次是灰色,另一次是白色(因此看不见)。由于您在两种情况下“打印”完全相同的文本,因此页码将相同。

\documentclass[a4paper,11pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[francais]{babel}
\usepackage{ifthen}
\usepackage{lipsum}
\usepackage{color} % to use colours

\definecolor{gray}{rgb}{0.35,0.35,0.35} % color for teacher-only material

\newcommand{\hide}[1]{
    \ifthenelse{\equal{\edition}{E}}{   
        \color{white}
        #1

        #1
        \color{black}
    }
    {
         \color{gray}
        #1

         \color{white}      
        #1
        \color{black}
      }
}

\begin{document}
\lipsum[1]
\def\edition{P}
\hide{\lipsum[3]}
\lipsum[1]
\clearpage

\lipsum[1]
\def\edition{E}
\hide{\lipsum[3]}
\lipsum[1]

\end{document}

注意:没有测试仅限教师的材料溢出到下一页的情况。

答案2

我会使用\phantom来隐藏内容,\makebox增加宽度和\rule高度。要在学生版和主版之间切换,我会使用\let控制序列\phantom(用于隐藏参数)或\relax(不执行任何操作,因此不是根据标志的值,阻止显示参数。要在版本之间切换,请注释或取消注释行\StudentEditiontrue

\documentclass{article}

\newif\ifStudentEdition

%\StudentEditiontrue


\ifStudentEdition
    \let\hiddenInStudentVersion=\phantom
\else
    \let\hiddenInStudentVersion=\relax
\fi

\newcommand{\hide}[1]{%
    \makebox[2\width][c]{%
        \rule{0pt}{2em}%
        \hiddenInStudentVersion{#1}%
    }%
}

\begin{document}
hello \hide{beautiful} world
\end{document}

请注意,这确实不是允许换行甚至分页。

相关内容