includegraphics[page=\pageref... 可能吗?如何将 [page=] 设置为变量?

includegraphics[page=\pageref... 可能吗?如何将 [page=] 设置为变量?

我目前正在编写一个相当复杂的文档,其中包含大量使用 TikZ 创建的图形。因此,我决定将所有图形放入一个名为 tikz.tex 的大文件中,创建一个多页 PDF,每个图形都有一个紧密裁剪的页面。

(我单独编译)生成一个干净的PDFtikz.tex和 .aux 文件。这是它的最小版本:

\documentclass{article}
\usepackage{tikz}
\usepackage[pdftex,active,tightpage]{preview}
\tikzset{
    %... my tikzset ...
    }
\begin{document}
    \begin{preview}
        \label{pic1}
        \begin{tikzpicture}
        %... tikz ...
        \end{tikzpicture}
    \end{preview}
    \begin{preview}
        \label{pic2}
        \begin{tikzpicture}
        %... tikz ...
        \end{tikzpicture}
    \end{preview}
\end{document}

我的主文件的最小版本

\documentclass[]{article}
\usepackage {xr}
\usepackage []{hyperref}
\externaldocument[tikz:]{../Bilder/tikz}
\begin{document}
    \input{../Kapitel/Kapitel_1}
\end{document}

主文件中包含的实际章节的最小版本将类似于此

\chapter{name}
\begin{figure}[htb]
    \includegraphics[page=\pageref{tikz:pic2}]{../Bilder/tikz.pdf}
\end{figure}

返回:

! Missing number, treated as zero. <to be read again> \protect l.12
...KOS},width=\textwidth]{../Bilder/tikz.pdf} A number should have
been here; I inserted `0'.

我的想法是使用主文档中的标签来引用正确的页码。当然,我可以硬编码页码,但由于我打算在相当长的一段时间内使用这个 tikz 文件,所以我更喜欢通过\pageref或类似的东西来引用页码。我不想将 PDF 拆分成单个文件。

如果我的章节看起来像这样,它就会起作用。在这种情况下\pageref显示正确

\chapter{name}
\begin{figure}[htb]
    \includegraphics[page=2]{../Bilder/tikz.pdf}
\end{figure}
correct page number of pic 2 is \pageref{tikz:pic2}

对如何开始\includegraphics[page=\pageref{...}]工作有什么想法吗?

谢谢很多提前!

答案1

我会用zref包。它带有一个zref-xr模块(即子包,即包),并允许从引用中提取页码作为可在中使用的纯数字\includegraphics。正常情况\pageref通常包含其他代码,这使其不合适。您可能需要完全展开页码,然后才能将其传递给page的键\includegraphics。也可以为此目的定义自己的键。

一个简单的例子是:

% tikzstuff.tex
\documentclass{article}
\usepackage{tikz}
\usepackage[user]{zref}
\usepackage[pdftex,active,tightpage]{preview}
\begin{document}
    \begin{preview}
        \zlabel{pic1}
        \begin{tikzpicture}
            \draw (0,0) -- (10,10);
            \node at (5,5) {\large\sffamily 1};
        \end{tikzpicture}
    \end{preview}
    \begin{preview}
        \zlabel{pic2}
        \begin{tikzpicture}
            \draw (0,10) -- (10,0);
            \node at (5,5) {\large\sffamily 2};
        \end{tikzpicture}
    \end{preview}
\end{document}

对于 TikZ 图和以下主文件:

\documentclass{article}
\usepackage[xr]{zref}
\usepackage{graphicx}
\usepackage{hyperref}
\zexternaldocument[tikz:]{tikzstuff}

\makeatletter
\define@key{Gin}{bylabel}{%
    \edef\@tempa{{Gin}{page=\zref@extract{tikz:#1}{page}}}%
    \expandafter\setkeys\@tempa
}
\makeatother

\begin{document}

...

\includegraphics[bylabel=pic1]{tikzstuff}% Include image reference as 'pic1' in the external document

...

\includegraphics[bylabel=pic2]{tikzstuff}

\end{document}

请注意,你可以将每个 TikZ 图片放在自己的文件中,然后使用standalone捆绑包可以单独编译它们,同时还可以将它们插入到主文档中。这样可以避免页面引用的问题。

答案2

尝试

\chapter{name}
\begin{figure}[htb]
    \edef\temp{page=\pageref{tikz:pic2}}
    \expandafter\includegraphics\expandafter[\temp]{../Bilder/tikz.pdf}
\end{figure}

相关内容