要在 Pagesel 中选择此页面之后的所有页面吗?

要在 Pagesel 中选择此页面之后的所有页面吗?

您可以通过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)。您可以使用refcount0如果标签不存在则进行干预并提供页码。

此外,请注意,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}

相关内容