使用循环通过 \includegraphics 添加 PDF 页面时出现问题

使用循环通过 \includegraphics 添加 PDF 页面时出现问题

在主文档中包含多个 pdf 页面的解决方案https://tex.stackexchange.com/a/125212/41856对我来说是可行的,但是,那里列出的代码和下面列出的代码不会将 test.pdf 作为正文中的图 (1) 引用,而是引用图 (22),或者引用 test.pdf 中的许多页面

\getpdfpages{test.pdf}
\foreach \x in {1,...,\value{pdfpages}} {
% your code for page \x of t.pdf goes here
\begin{table}[htpb]    \caption{Figure 1}  \label{fig:Figure 1}
 \centering
\includegraphics[page=\x,width=1\textwidth]{test.pdf}
 \end{table} }
\clearpage

(\ref{fig:Figure 1})

\ref当我希望图 (1) 时,前面的命令会在主文档中产生图 (22),或者 test.pdf 中有多少页。

如何修改上述代码,使\ref文档中的每一页都增加 1,而不是 test.pdf 中的页数增加 1?

当您在正文中包含更多文档(例如 test1.pdf、test2.pdf 等)时,这一点就更为重要。

答案1

这对我有用:

\documentclass{article}
\usepackage{graphicx}
\usepackage{pgffor}

\newcounter{pdfpages}
\newcommand*{\getpdfpages}[1]{%
  \begingroup
    \sbox0{% 
      \includegraphics{#1}%
      \setcounter{pdfpages}{\pdflastximagepages}%
    }%
  \endgroup
}

\begin{document}
\getpdfpages{gptest.pdf}
\foreach \x in {1,...,\value{pdfpages}} {
  \begin{figure}[htpb]
  \caption{Figure \x}\label{fig:Figure \x}
  \centering
  \includegraphics[page=\x,width=1\textwidth]{gptest.pdf}
  \end{figure}
}

\clearpage

\ref{fig:Figure 2}

\end{document}

\getpdfpages在其他命令中第一次使用该文件之前发出该命令非常重要\includegraphics,否则它将不起作用。一个好的位置可能是文档序言中。(感谢 Stephan Lemke 的注意。)

答案2

一种轻量级方法。作为#1\numexpr它的前缀是 ,\the必须打印其值。

ABC

\documentclass{article}
%\usepackage{graphicx}% not needed here
\usepackage{xinttools}% in TeX installations updated 2013/11/22 or later
\begin{document}
\xintFor #1 in \xintintegers \do {% #1 is a \numexpr <digits>\relax
  \begin{figure}[htpb]
  \caption{Figure \the#1}\label{fig:Figure \the#1}
  \centering
    \mbox {\pdfximage width .2\textwidth page #1 {testgraph.pdf}%
           \pdfrefximage\pdflastximage }%
% or with graphicx
%    \includegraphics [page=#1,width=.2\textwidth]{testgraph.pdf}
  \end{figure}
\ifnum\pdflastximagepages=#1\expandafter\xintBreakFor\fi
}
\end{document}

testgraph.pdf生成3页pdf文件的代码:

\documentclass[multi=test,crop,border=1pt]{standalone}
\begin{document}
\begin{test}%
A%
\end{test}
\begin{test}%
B%
\end{test}
\begin{test}%
C%
\end{test}
\end{document}

答案3

我原来的问题涉及如何使用命令(\ref{fig:Figure 1})将多页 pdf(例如 test.pdf,即 22(或任意数量)页长)包含在文档末尾。

“技巧”是在 \foreach 循环之外标记 test1.pdf,以便对 test1.pdf 的引用不会因循环而增加,如下面的代码所示,该代码在文档末尾包含三个不同长度的 pdf 文件:

\section{Exhibit \ref{figure:Exhibit 1}} \label{figure:Exhibit 1}
\getpdfpages{test1.pdf}
%test1.pdf is 22 pages long
\foreach \x in {1,...,\value{pdfpages}} {
% your code for page \x of t.pdf goes here
\begin{figure}[H]  \caption{Exhibit \ref{figure:Exhibit 1}}
 \centering
\includegraphics[page=\x,width=1.1\textwidth]{test1.pdf}
\end{figure}}
\clearpage

\section{Exhibit \ref{figure:Exhibit 2}} \label{figure:Exhibit 2}
\getpdfpages{test2.pdf}
%test2.pdf is 17 pages long
\foreach \x in {1,...,\value{pdfpages}} {
% your code for page \x of t.pdf goes here
\begin{figure}[H]  \caption{Exhibit \ref{figure:Exhibit 2}}
 \centering
\includegraphics[page=\x,width=1.1\textwidth]{test2.pdf}
\end{figure}}
\clearpage

\section{Exhibit \ref{figure:Exhibit 3}} \label{figure:Exhibit 3}
\getpdfpages{test3.pdf}
%test3.pdf is 37 pages long
\foreach \x in {1,...,\value{pdfpages}} {
% your code for page \x of t.pdf goes here
\begin{figure}[H]  \caption{Exhibit \ref{figure:Exhibit 3}}
 \centering
\includegraphics[page=\x,width=1.1\textwidth]{test3.pdf}
\end{figure}}
\clearpage

现在我们可以在 LaTeX 文档中引用(实际上这些是作为部分引用)任何这些“图形”,并且我们可以轻松地随意添加更多具有任意页数的图形,因为它们现在正确地增加了 1(单位)。可能还有其他方法可以做到这一点……诀窍是在循环外标记“图形”,而不是在循环内!

相关内容