如果我有一个多页 PDF 文件,每页都有一个图形,我可以使用命令\includegraphics[page=123]{foo}
来引用单个图形(参见这个问题)。
但是,如果我有很多图表,那么很难跟踪页码。(例如,我使用 OmniGraffle 准备插图并将所有内容导出为一个多页 PDF 文件;如果我在 OmniGraffle 中重新组织图表,我必须手动在 Latex 代码中修复所有页码。)
我可以用某种方式PDF 书签而不是页码\includegraphics
?
答案1
以下是实现 user946850 想法的命令。您需要pdftk
GNU sed
:
$ pdftk input_file.pdf dump_data | sed -n '/BookmarkTitle/{y/1234567890/ABCDEFGHIJ/;H};
/BookmarkPageNumber/H;
${g;s/BookmarkTitle: \([^\n]*\)\nBookmarkPageNumber: \([^\n]*\)/\\newcommand{fig\1}{\2}/g;
s/ //g;p}' > file_bookmarks.tex
这会将书签(如“1 First figure”(第 18 页的书签))转换为输出中的一行:
\newcommand{\figAFirstFigure}{18}
我添加了前缀\fig
以保持唯一性,并消除了空格,并将数字转换为 AJ,因为它们在 TeX 命令中不易使用。其他特殊字符也会有问题:最好只使用字母字符作为书签。\csname
如果需要,可以使用这种方法。
答案2
摘自 LaTeX Wikibook 部分包括图形,这似乎是不可能的。您是否考虑过以下解决方案:
\newcommand{\definepage}[1]{%
\stepcounter{myexternalpagenum}\edef#1{\arabic{myexternalpagenum}}}
\newcounter{myexternalpagenum}
\definepage{\macroforpageone}
\definepage{\macroforpagetwo}
%...
\definepage{\macroforlastpage}
%...
\includegraphics[page=\macroforpageonehundredtwentythree]{foo}
这至少可以让你免去在很多地方编辑文档的麻烦,只需更新\definepage
命令的顺序即可。也许有一个 PDF 工具可以输出书签列表,然后你可以将其转换为\definepage
调用列表。