我的情况很棘手。我使用 NewEnviron 来分隔文档的几个主要部分。每个部分都有自己的编号方案和几个特定于环境的命令和设置。对于我的问题来说,重要的是,所有编号方案都遵循以下原则page_current of page_total
但是,如果我现在使用 插入 pdf 文档,则会在文档的最后一页执行breaks if\includepdf
标签。page_total
\includepdf
这里有一个 mwe,可能可以更好地解释这一点。
\documentclass[fontsize=10pt]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mwe}
\usepackage{pdfpages}
\usepackage{environ}
\usepackage{scrlayer-scrpage}
\NewEnviron{myenvi}{%
\clearscrheadfoot%
\cfoot{\normalfont\thepage\ / \pageref{lastpage}}%
\clearpage%
\BODY%
\label{lastpage}%
}
\newcommand{\myincludepdf}[1]{\includepdf[scale=0.5, frame, pagecommand={}]{#1}}
%\newcommand{\myincludepdf}[1]{\includepdf[scale=0.5, frame, pagecommand={\label{lastpage}}]{#1}}
\begin{document}
\begin{myenvi}
\lipsum[1-15]
\myincludepdf{example-image-a4}
\end{myenvi}
\end{document}
我还尝试将我的标签添加到 includepdf 的邮政编码中。但这没有帮助。
我找到了两种方法来实现它。但都不令人满意。第一种方法是简单地向文档添加另一页。因为这样就\label{lastpage}
可以再次执行。此外,还可以将添加\label{lastpage}
到 \includepdf 的 pagecommand 选项中。但随后我收到很多“lastpage 多次定义”警告。
有谁知道如何解决这个问题吗?我考虑过使用计数器或 gdef 之类的东西。但我认为,如果没有 sidecar 文件的帮助,解决这个问题是不可能的。
是否有一个选项可以直接操作辅助文件,以便我不再产生多个标签,而只\label{lastpage}
保留最后一次调用?
答案1
好的,找到了解决方案。可能也不是最优雅的,但它有效。我使用最后一页-package 检查内部\includepdf
当前页面是否是文档的最后一页。如果是,则执行\label{endenvi}
,因此只定义一次。如果页面位于所有页面之后,则\includepdf
执行我的环境定义中的标签命令。
这里是代码:
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mwe}
\usepackage{pdfpages}
\usepackage{environ}
\usepackage{lastpage}
\usepackage{xifthen}
\usepackage{scrlayer-scrpage}
\NewEnviron{myenvi}{%
\clearscrheadfoot%
\cfoot{\normalfont\thepage\ / \pageref{endenvi}}%
\clearpage%
\BODY%
\label{endenvi}
}
\newcommand{\myincludepdf}[1]{\includepdf[scale=0.5, frame, pagecommand={%
\ifthenelse{\equal{\pageref{LastPage}}{\thepage}}{\label{endenvi}}{}}]{#1}}
\begin{document}
\begin{myenvi}
\lipsum[1-15]
\myincludepdf{example-image-a4}
\myincludepdf{example-image-a4}
\end{myenvi}
\end{document}