我有一套讲义,每个讲座都包含在一个子文件中,主文件包含所有讲座的列表,如下所示:
\subfile{lec-1}
\subfile{lec-2}
% more files labeled lec-X
\subfile{lec-26}
每次我需要将视图设置为某些讲座/完整文档时,我都需要手动评论/取消评论,并且我希望有一些不那么繁琐的事情。
有没有更好的方法来组织这些?也许一个简单的 foreach 循环就可以了,但是有没有更优雅的解决方案?谢谢!
答案1
您可以使用\foreach
frompgffor
包来避免重复所有内容\subfile
。
您multiaudience
可以设置两个(或更多)“受众”,即文档的版本。
在我的 MWE 中,complete
打印所有内容,并onlysome
打印子文件 1、3 和 4。
您可以通过简单地注释/取消注释以下两行之一来选择使用哪一个:
%\DefCurrentAudience{onlysome}
\DefCurrentAudience{complete}
以下是完整的 MWE:
\documentclass{book}
\usepackage{pgffor}
\usepackage{multiaudience}
\SetNewAudience{complete}
\SetNewAudience{onlysome}
\usepackage{subfiles}
\begin{document}
%\DefCurrentAudience{onlysome}
\DefCurrentAudience{complete}
\begin{shownto}{complete}
\foreach \ind in {1,...,26}
{\subfile{lec-\ind}}
\end{shownto}
\begin{shownto}{onlysome}
\foreach \ind in {1,3,4}
{\subfile{lec-\ind}}
\end{shownto}
\end{document}
答案2
如下parts.sty
所示,您可以在一开始指定要包含哪些部分,如下所示:
\documentclass{article}
\usepackage{parts}
\onlyParts{basic}
%\onlyParts{basic,advanced}% typeset all
\begin{document}
\Part{basic}{\subfile{lec-1}}
\Part{advanced}{\subfile{lec-2}}
\Part{basic}{\subfile{lec-3}}
\Part{advanced}{\subfile{lec-4}}
\end{document}
如果您想通过讲座编号指定包含的材料,您可以使用自定义命令更简洁地完成\myPart
:
\documentclass{article}
\usepackage{parts}
\newcommand\myPart[#1]{\Part{#1}{\subfile{lec-#1}}}
\onlyParts{2,4}
\begin{document}
\myPart{1}
\myPart{2}
\myPart{3}
\myPart{4}
\end{document}
这是的代码parts.sty
。
\newcommand\onlyParts[1]{\def\parts@only{#1}}
\onlyParts{}
\newcommand\Part[2]{%
\def\parts@this{#1}%
\@for\parts@that:=\parts@only\do{%
\ifx\parts@this\parts@that
#2%
\fi
}%
\ignorespaces
}
此实用程序不仅限于加载子文件,您还可以将其与文本和其他代码一起使用。
\documentclass{article}
\usepackage{parts}
\onlyParts{Monday,Wednesday}
\begin{document}
\Part{Monday}{On Mondays, we recover from the weekend. }
\Part{Tuesday}{On Tuesdays, we work from nine to five. }
\Part{Wednesday}{On Wednesdays, we prepare for the rest of the week. }
\Part{Monday}{On a second thought, we should also get something done on Mondays. }
\end{document}