我為用戶提供了大量內容。對於不同的用戶我想顯示不同的內容。為此,我想透過顯示和不顯示文件的某些內容(例如章節、小節)來產生不同的輸出。
我的想法是:在編寫章節/部分時,我聲明它可以透過將參數設為 true 或 false 來向特定使用者顯示。例如,
if (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
anduser3
作為“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
。