我希望在章节末尾添加一个问题/解决方案库。我希望能够通过单个注释/取消注释操作来控制其打印。MWE 是一篇文章,但我的意图是制作一套包含 30 多个章节的书籍。所有书籍都共享一个通用的序言文件。
问题将打印为两列multicol
。我使用条件编译,如 [如何轻松编写条件页面?] 我不敢说我理解它,但到目前为止它对我来说还是有用的。我遇到的唯一问题是将它嵌套在\newenvironment
.
具体来说,我在这里面临两个问题(在 MWE 中用 PROB-1 和 PROB-2 标签表示)-
multicol
在新的环境中嵌套qbank
会引发编译错误。但嵌套multicol
在 a\newenvironment[quescol]
和嵌套quescol
在qbank
似乎有效。这让我很困惑。无论如何我都可以忍受,但仍然想知道真正的原因。\SelectPartsForCompilation{queb}
条件编译方案无法按预期工作。MWE 可以正确编译,但我无法按预期注释掉。我无法将\DeclareCompilationNameOfBlock[queb]
外部\begin{qbank}
块原封不动地qbank
放在数百个章节中(每个章节都在一个单独的文件中)。
实际上,在任何情况下嵌套此条件编译方案\newenvironment
都会产生混乱。 PS:在我的实际文档中,除了之外还有几个编译标签queb
。
\documentclass{article}
\usepackage{multicol,pgffor,environ,exsheets}
%https://tex.stackexchange.com/questions/247379/how-to-easily-write-conditional-pages/249823#249823
\makeatletter
\newcommand{\pgfkeysgsetvalue}[2]{
\pgfkeys@temptoks{#2}\expandafter\xdef\csname pgfk@#1\endcsname{\the\pgfkeys@temptoks}
}
\makeatother
\pgfkeys{/DeclareCompilationNameOfLine/.is family,/DeclareCompilationNameOfLine,
set/.unknown/.code={
\pgfkeysgsetvalue{/DeclareCompilationNameOfLine/\pgfkeyscurrentname}{1}
},
set/unset/.unknown/.code={
\pgfkeysgsetvalue{/DeclareCompilationNameOfLine/\pgfkeyscurrentname}{0}
}
}
\newif\ifPrintComment
\newcommand\SelectPartsForCompilation[1]{%
\foreach \key in {#1}{\pgfkeys{/DeclareCompilationNameOfLine,set/\key} }
}
\newcommand\MakeSelection[1]{
\PrintCommentfalse
\foreach \key in {#1,all} {
\pgfkeysifdefined{/DeclareCompilationNameOfLine/\key}%
{\pgfkeysgetvalue{/DeclareCompilationNameOfLine/\key}{\temp}
\ifnum\temp=1\global\PrintCommenttrue\fi% print if key=1
}{}
}
}
\newcommand\DeclareCompilationNameOfLine[2][]{\MakeSelection{#1}\ifPrintComment#2\fi}
\NewEnviron{DeclareCompilationNameOfBlock}[1][]{\MakeSelection{#1}\ifPrintComment\BODY\fi }
\setlength{\columnseprule}{0.4pt}
\newenvironment{quescol}{ % PORB-1 :: I am forced to use this clunky envirnoment
\begin{multicols}{2}
} {
\end{multicols}
\hrule
}
\newenvironment{qbank}{
\medskip
\DeclareCompilationNameOfBlock[queb]
\hrule
\begin{center}
\textbf{\textit{\LARGE Question Bank}}
\end{center}
\hrule
\quescol % PROB-1 :: if I directly use \begin{multicols}{2}, i get compliation error
} {
\endquescol
\endDeclareCompilationNameOfBlock
}
% PROB-2 :: If I comment out the follwing line, it throws up a compilation error
\SelectPartsForCompilation{queb} % comment this line for not including the question bank in PDF
\begin{document}
\section{first} Text of first
\section{second} Text of second
\section{third} Text of third
\begin{qbank}
\begin{question}
Transitive
\end{question}
\begin{question}
Reflexive
\end{question}
\begin{question}
Symmetric
\end{question}
\end{qbank}
\end{document}