您可以通过pagesel
以下方式选择页面
\usepackage[2-3]{pagesel}
不过,我想设定一些页面选择命令位于某些内容之后,文档中的所有内容都位于该命令之后。例如,假设您的文档中有 777 页,查找所选内容的页码非常耗时。
如果所选内容有结束标签,那就太好了。我想编译整个文档,但只包含部分页面。
Werner 的回答中的一些特点
代码
\documentclass{article}
%% http://tex.stackexchange.com/a/267555/13173
\usepackage{atbegshi}
\newcommand{\handlethispage}{}
\newcommand{\discardpagesfromhere}{\let\handlethispage\AtBeginShipoutDiscard}
\newcommand{\keeppagesfromhere}{\let\handlethispage\relax}
\AtBeginShipout{\handlethispage}
\begin{document}
Treatment
\discardpagesfromhere
\section{1. Digestive }
GERS.
\keeppagesfromhere
\subsubsection{Model}
\end{document}
给出
其中部分消化和单词胃食管反流被作为主体中的特征删除。
如何在 pagesel 过程中仅包含部分页面?
答案1
您可以使用以下方式即时丢弃页面atbegshi
的\AtBeginShipoutDiscard
:
\documentclass{article}
\usepackage{lipsum}\sloppy
\usepackage{atbegshi}
\newcommand{\handlethispage}{}
\newcommand{\discardpagesfromhere}{\let\handlethispage\AtBeginShipoutDiscard}
\newcommand{\keeppagesfromhere}{\let\handlethispage\relax}
\AtBeginShipout{\handlethispage}
\begin{document}
\discardpagesfromhere
\lipsum[1-50]
\lipsum[1-50]
\keeppagesfromhere
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\end{document}
上面我已经定义了\discardpagesfromhere
从该点开始丢弃页面,而\keeppagesfromhere
从该点开始保留页面。
请注意,这将删除丢弃页面上的所有引用。
如果你坚持pagesel
并且想要使用页面引用,你可以遵循这个技巧:
\documentclass{article}
\usepackage{lipsum}\sloppy
\makeatletter
\begingroup
\renewcommand{\@newl@bel}[3]{\@namedef{#1@#2}{#3}}% Update \newlabel-related macro
\input{\jobname.aux}% Read .aux file
\xdef\keeppagesfromhere{\expandafter\@secondoftwo\r@keepfromhere}% Grab page of label keepfromhere
\endgroup
\makeatother
\usepackage[\keeppagesfromhere-]{pagesel}
\begin{document}
\lipsum[1-50]
\lipsum[1-50]
\label{keepfromhere}
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\lipsum[1-50]
\end{document}
.aux
我们在更新宏后读入文件\@newl@bel
以创建引用本地。然后我们只捕获特定标签的页面引用:(keepfromhere
这是使用 实现的\expandafter\@secondoftwo\r@keepfromhere
)。我们使用此页面引用来提供可以使用的范围pagesel
。
请注意,您必须先编译文档,\label{keepfromhere}
然后才能使用它,因为标签需要存在(在中.aux
)。您可以使用refcount
0
如果标签不存在则进行干预并提供页码。
此外,请注意,pagesel
默认情况下不会更新.aux
,因此编译没有 pagesel
(但\label{keepfromhere}
)在您成功丢弃正确的页面之前是必要的。
X
当然,如果你知道要保留内容的页码,pagesel
提供
\usepackage[X-]{pagesel}
答案2
请参阅 Werner 和 touhami 的答案以获得更优雅的解决方案。
pagesel
为了完整性,通过包 提供带有标签中绝对页码的版本zref
。普通标签仅存储页码计数器的页码,但页码计数器可能会通过\pagenumbering
( \mainmatter
, ...) 重置。绝对页码由包 提供zref-abspage
。这些数字是包 所需要的pagesel
。
.aux
带有标签的文件是通过包读取的,zref-xr
因为文件的正常读取.aux
来得太晚\begin{document}
,此时包应该已经被加载了。
\documentclass{article}
\usepackage{blindtext}
\usepackage{zref-abspage,zref-xr}
\makeatletter
% Mark pages with tags
\newcommand*{\maketag}[1]{%
\zref@labelbyprops{tag-#1}{abspage}%
}
\newcommand*{\maketagfirstpage}{\maketag{first}}
\newcommand*{\maketaglastpage}{\maketag{last}}
% The `.aux` file contains the labels with the page numbers.
% When the `.aux` file is read in `\begin{document}` it is too late
% for loading a package. Therefore, the `.aux` file is first read
% as external `.aux` file, where the label names are prefixed with
% "self".
\zexternaldocument[self-]{\jobname}
\edef\pageselfirstpage{\zref@extractdefault{self-tag-first}{abspage}{0}}
\edef\pagesellastpage{\zref@extractdefault{self-tag-last}{abspage}{0}}
\ifnum\pageselfirstpage=0 %
\typeout{Warning: Missing first page for pagesel!}%
\let\pageselfirstpage\@empty
\fi
\ifnum\pagesellastpage=0 %
\typeout{Warning: Missing last page for pagesel!}%
\let\pagesellastpage\@empty
\fi
% Patch for atbegshi
\usepackage{etoolbox}
\patchcmd{\AtBegShi@Output}{%
\@PackageWarning{atbegshi}{Ignoring void shipout box}%
}{%
\begingroup
\csname set@typeset@protect\endcsname
\@PackageWarning{atbegshi}{Ignoring void shipout box}%
\endgroup
}{}{\errmessage{\noexpand\AtBegShi@Output could not be patched}}
\makeatother
% Load package pagesel
\usepackage[\pageselfirstpage-\pagesellastpage]{pagesel}
\begin{document}
\part{First part}
\blinddocument
\newpage
\part{Second part}
\maketagfirstpage
\blinddocument
\maketaglastpage
\newpage
\part{Third part}
\blinddocument
\end{document}
答案3
你可以尝试一下
\documentclass{article}
\usepackage{lipsum}
\newbox\mtbox
\newenvironment{nopdf}{%
\def\shipout{\deadcycles=0\setbox\mtbox=}}{}
\begin{document}
\lipsum[1-15]
\begin{nopdf}
\lipsum[1-15]
\end{nopdf}
\lipsum[1-15]
\begin{nopdf}
\lipsum[1-15]
\end{nopdf}
\lipsum[1-15]
\begin{nopdf}
\lipsum[1-15]
\end{nopdf}
\end{document}