我为用户准备了大量内容。对于不同的用户,我想显示不同的内容。为此,我想通过显示和不显示文档的某些内容(例如章节、部分、子节)来产生不同的输出。
我的想法是:在编写章节/节时,我通过将参数设置为 true 或 false 来声明它以允许向特定用户显示。例如,
如果 (user1 == true) 那么它应该在那里
user1.pdf
更具体地说,类似于:
宏是: \chapter <chapterName1> [bool arg1][bool arg2][bool arg3]
\chapter <chapterName1> [user1==true][user2==false][user3==false]
\chapter <chapterName2> [user1==true][user2==true][user3==false]
\section <sectionName1> [user1==true][user2==true][user3==true]
如果我传递user1
并且user3
为“True”,那么我的输出应该包含
命令(例如):\def\arg1=true, arg2=false, arg1=true \input{myfile}
chapterName1
sectionName1
我怎样才能做到这一点?
答案1
你可以从这里开始。下面的方法以environ
包为特色来跳过内容,但你也可以尝试使用该comment
包来实现此目的。
\documentclass[openany]{scrbook}
\usepackage{environ}
\usepackage{pdftexcmds}
\newcommand{\username}{user1}
\makeatletter
\NewEnviron{condchapter}[2][user]{
\ifnum\pdf@strcmp{#1}{\username}=\z@
\chapter{#2}
\BODY
\else
\fi
}
\makeatother
\begin{document}
\begin{condchapter}[user1]{Title-1}
Some text.
\end{condchapter}
\begin{condchapter}[user2]{Title-2}
Some text.
\end{condchapter}
\renewcommand{\username}{user2}
\begin{condchapter}[user2]{Title-3}
Some text.
\end{condchapter}
\end{document}
启用用户列表的另一种可能性是:
\documentclass[openany]{scrbook}
\usepackage{environ}
\usepackage{xstring}
\newcommand{\username}{user1}
\makeatletter
\NewEnviron{condchapter}[2][user]{
\IfSubStr{#1}{\username}{%
\chapter{#2}
\BODY
}{}
%\else
%\fi
}
\makeatother
\begin{document}
\begin{condchapter}[user1]{Title-1}
Some text.
\end{condchapter}
\begin{condchapter}[user2]{Title-2}
Some text.
\end{condchapter}
\renewcommand{\username}{user2}
\begin{condchapter}[user2, user3]{Title-3}
Some text.
\end{condchapter}
\end{document}
PS:要一次创建所有文件,您可以从答案开始这里
另一种可能性是仅使用comment
包裹为此目的,无需修改命令chapter
。