通过标签或标签进行文档配置?

通过标签或标签进行文档配置?

这个问题导致了一个新的方案的出现:
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

感谢,感谢他最初的回答,该作品正是基于此回答。

相关内容