![includegraphics[page=\pageref... 可能吗?如何将 [page=] 设置为变量?](https://linux22.com/image/241545/includegraphics%5Bpage%3D%5Cpageref...%20%E5%8F%AF%E8%83%BD%E5%90%97%EF%BC%9F%E5%A6%82%E4%BD%95%E5%B0%86%20%5Bpage%3D%5D%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%E5%8F%98%E9%87%8F%EF%BC%9F.png)
我目前正在编写一个相当复杂的文档,其中包含大量使用 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}