我认为通过一个例子就可以清楚的看出这一点。这是我的文档:
\begin{enumerate}
\item{1} The heart
\begin{enumerate]
\item{1} It pumps blood through the body.
\item{2} It has four chambers.
\item{2} The inferior and superior vena cava bring blood from the body.
\end{enumerate}
\end{enumerate}
我的想法是,我可以设置 typeset-level=1 并获取仅显示以下内容的文档:
心脏
a.它将血液泵送到全身。
或者我可以设置 typeset-level={1-2},它会排版整个内容。我不想被限制在排版大纲的某些“深度”,我希望能够为每个条目指定一个“复杂度级别”。
目标是为我的学生制作文档,这样没有背景的学生可以阅读 1 级文档,然后阅读 2 级文档等,而背景良好的学生可以直接跳到 3 级文档。我认为 1 级文档应该始终是 2 级文档的子集(2 级是 3 级的子集,等等)。
感谢您提供的任何建议!
答案1
正如我在上面的评论中所说,在 ConTeXt 中,您可以使用模式进行此类条件处理。我还喜欢使用语义标记,因此如果我要创建这样的文档,我会执行以下操作:
创建虚拟环境
notes
,details
默认情况下,它们只会吞噬其内容。在 ConTeXt 中,此类环境是使用创建的definebuffer[...]
。如果设置了模式
notes
或,则重新定义环境,以便它简单地排版其内容。在 ConTeXt 中,使用 创建这样的环境。details
notes
\definestartstop[...]
如果两种模式
details
都设置了,则重新定义details
环境,以便它简单地排版其内容。
结合这个逻辑,我们得到以下结论:
\definebuffer[notes]
\definebuffer[details]
\startmodeset
[notes,details] {\definestartstop[notes] }
[details] {\definestartstop[details]}
\stopmodeset
现在,让我们来测试一下文档。
\starttext
\startitemize[n]
\item The heart
\startnotes
\startitemize[a]
\item It pumps blood through the body
\startdetails
\item It has four chambers
\item The inferior and superior vena cava bring blood from the body.
\stopdetails
\stopitemize
\stopnotes
\stopitemize
\stoptext
当我们使用编译此文档时context filename
,我们得到
当我们使用编译此文档时context --mode=notes filename
,我们得到
当我们使用编译此文档时context --mode=details filename
,我们得到
如果您从编辑器而不是命令行编译文档,则可以添加
\enablemode[notes]
位于文件顶部,而不是将其作为命令行参数传递。
答案2
虽然我并不怀疑的ConTeXt
模式比这个答案更加强大和有趣,但对于简单的应用程序,你可以做这样的事情。
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\newif\ifTLone
\newif\ifTLtwo
\newif\ifTLthree
% \TLonetrue
\TLtwotrue
% \TLthreetrue
% note: \def is used here for brevity; it is a bad choice if your text
% is \long-er than a paragraph
% see here http://tex.stackexchange.com/q/39450/8528 for more information
\ifTLone
\def\tli #1{#1}
\def\tlii #1{}
\def\tliii #1{}
\fi
\ifTLtwo
\def\tli #1{#1}
\def\tlii #1{#1}
\def\tliii #1{}
\fi
\ifTLthree
\def\tli #1{#1}
\def\tlii #1{#1}
\def\tliii #1{#1}
\fi
\begin{document}
This is outside all levels. Hopefully most of your text fits in this
category.
\tli {This is level one.} \par
\tlii {This is level two.} \par
\tliii{This is level three.}\par
\begin{itemize}
\tliii{\item TL 3: $a + b = x^2$}
\item regular%
\tliii{\footnote{A super-secret footnote for those already in the know.}}
\tlii{\item TL 2.}
\item regular
\end{itemize}
\end{document}
存在明显的局限性,例如在这些宏中塞入一些逐字文本,但如果您不需要做任何如此花哨的事情,这可能会完成工作。
您还可以将\newif
和\ifTL<level>
声明移出文件并从命令行调用它们,并与结合起来-jobname=<filename>
创建不同“级别”的输出文件:假设原始输入文件名为myfile.tex
,使用:
pdflatex -jobname=TLtwo "\newif\ifTLone\newif\ifTLtwo\newif\ifTLthree\TLtwotrue\input{filename.tex}"
这应该会TLtwo.pdf
在输出中实现最高 2 级。