我的一个朋友最近完成了他的博士论文。为了节省墨粉,他用彩色打印机打印了带有数字的页面,但其他页面都用黑白打印机打印。为了做到这一点,他仔细检查了文档,并手工打印了每一页带有数字的页面。
虽然他很小心,但这似乎极易出错,我想知道是否有办法生成仅包含带有图形的页面的文档,同时保留完整文档的格式和分页?
答案1
最简单的方法可能是pdfpages
包。它不是自动的,但您不必单独打印每一页,并且可以根据图形列表生成页面列表。
以下是一个例子:
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={3-6, 17, 28, 29-31}]{yourdocument}
\end{document}
使用此方法时要记住的一件事是,页码对应于物理页的数量yourdocument.pdf
,不是文档中的页码。这意味着,如果您有n \frontmatter
页数(在论文中,你会这样做),那么所有相关的页码都会偏离n。解决这个问题最简单的方法是从 pdf 文档中删除所有前言页面,以生成提取的页面文档,这样第一个物理页面就对应于论文的第 1 页。
自动化
从理论上讲,可以稍微自动化一下这个过程,尽管对于只做一两次的事情来说,这可能不值得。对于那些喜欢挑战的人,这里有一些想法(基于评论中的讨论)。
- 修改
\addtocontents
图形代码,以便写出页码列表,供后续在pdfpages
文档中使用。这似乎是实际自动化中工作量最大、收获最少的事情。 lof
使用您最喜欢的脚本语言从文件中提取条目.aux
,并解析出页码。然后脚本可以生成整个pdfpages
文档。如果您确实需要自动化该过程,这可能是最好的方法。- 您只需这样做一两次;手动完成上述 2 项,然后利用剩余的时间享用啤酒。
答案2
我尝试了一下,想出了一个解决方案。可能不是最好的,但它有效。该解决方案基于@Alan Munn 的答案。
这是一个 shell 脚本,适用于所有pdfpages
安装了 pdfLaTeX 的 Unix 系统。使用它时,您需要提供 TeX 文件的文件名(无 .tex 结尾!)和页面偏移量(由前置内容引起)作为第二个参数:
./only-figures.sh document 1
首先,我们加载 .aux 并准备将其存储在变量中。
STR=$(cat $1.aux |\
我们只关心带有数字的线条。
grep figure |\
在这些行中,我们只关心引用唯一页面的数量。
sed 's/.*}}{\([1-9]*\)}}/\1/' | uniq |\
然后我们将偏移量添加到页码。
awk '{print $0+'$2'}' |\
最后将它们全部打包到以逗号分隔的列表中。
sed ':a;N;$!ba;s/\n/,/g')
模板文件用于新的临时文档。
cat template.tex | sed s/@@@/$STR/ > only-figures-tmp.tex
模板如下所示:
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages={@@@}]{document}
\end{document}
我们在临时文件上调用 pdfLaTeX,移动新的 PDF 并进行清理。
pdflatex only-figures-tmp
mv -f only-figures-tmp.pdf $1-only-figures.pdf
rm only-figures-tmp.*
整个事情也可以找到在这个要点中