这个问题导致了一个新的方案的出现:
tagging
我正在尝试制定配置大型回忆录通过多个版本面向多个受众。
显然,实现此目的的一种方法是构建一个主节集,然后将它们组合成几个不同的主文档,这些主文档基本上是一串\input{}
命令。
另一种方法是定义一组部分 ID 环境,然后使用\newcomment{} \commentson{} and commentsoff{}
还有一种方式与此相反:给每个部分添加一个或多个标签。如下所示:
\begin{tagged}{managers,library}
\chapter{A Simple Introduction}
...
\end{tagged}
\begin{tagged}{sysprogs,library}
\chapter{A Complex Introduction}
...
\end{tagged}
\begin{tagged}{sysprogs,administrators}
\chapter{How to erase the system}
...
\end{tagged}
然后我可以在开始时做一些事情,例如:
\usetag{sysprogs}
打造“系统程序员”版。
是否有一个包可以做这样的事情?
接受@Leo Liu 的回答。太棒了。
答案1
有一个xcomment
包裹,它没有标签,但对于这种问题很有用。另请参阅
https://texfaq.org/FAQ-conditional
以下是您想要的:
\documentclass{minimal}
\usepackage{verbatim}
\usepackage{etoolbox}
\newcommand\usetag[1]{%
\def\do##1{\csdef{tagged@##1}{}}%
\docsvlist{#1}}
\newenvironment{tagged}[1]%
{\def\do##1{%
\ifcsname tagged@##1\endcsname
\let\comment\relax
\let\endcomment\relax
\fi}%
\docsvlist{#1}
\comment}%
{\endcomment}
\begin{document}
\usetag{a,b,c}
\begin{tagged}{a}
aaaa
\end{tagged}
\begin{tagged}{x}
xxxx
\end{tagged}
\begin{tagged}{a, x}
aaaa xxxx
\end{tagged}
\begin{tagged}{b, c, x}
bbbb cccc xxxx
\end{tagged}
\end{document}
实现起来并不困难。逗号后的空格将被忽略。
答案2
这`标记' 包现在在 CTAN 上,提供以下命令:
\tagged{list}{yes} % Conditional inclusion
\untagged{list}{no} % Conditional exclusion
\iftagged{list}{yes}{no} % Conditional inclusion/exclusion
\begin{taggedblock}{list} % Conditionally included environment
\end{taggedblock} %
\begin{untaggedblock}{list} % Conditionally excluded environment
\end{taggedblock} %
\usetag{list} % Turn tags on
\droptag{list} % Turn tags off
感谢刘,感谢他最初的回答,该作品正是基于此回答。