我是 Latex 的新手,目前使用 Overleaf 来管理我的 Latex 文件。我的问题如下:我在 Overleaf 中有多个项目,每个项目都涉及一个特定主题。我想创建另一个项目,以某种方式读取所有其他项目并获取每个项目中的页数(相关 PDF 文件的页数)。这个新项目用作页数计数器,跟踪所有其他项目的长度。有没有简单的方法可以做到这一点?
另外,如果这在 Overleaf 中不可行,但在 Texstudio 或任何本地 tex 编辑器中却很简单,请让我现在
答案1
在任何现代 TeX 系统上,假设您正在使用 pdfTeX 引擎(这是 Overleaf 上的默认引擎),您可以使用如下宏打印外部 PDF 文件的页数:
\def\numberofpages#1{\pdfximage{#1}\the\pdflastximagepages}
其中参数是相关 PDF 文件的相对路径。其他引擎的版本位于获取外部 PDF 的页数。这部分并非特定于 Overleaf,如果您愿意,您可以在自己的本地 TeX 发行版上使用它。
由于文档分布在多个 Overleaf 项目中
Overleaf 上的窍门(完全披露:我是 Overleaf 的支持人员。)然后将在计算页数的摘要项目(我们称之为摘要项目)中访问来自其他项目的 PDF 文件。这可以通过将其他项目的输出文件作为新文件包含在摘要项目中来实现。
我不建议这样做,因为它依赖于记住保持所有外部文件更新。但如果你确实需要这样做,那么就可以做到。
打开摘要项目,然后选择“新建文件”->“来自另一个项目”。然后选择要统计页面的项目。在“选择文件”下拉列表中,单击“从输出文件中选择”,然后选择output.pdf
。
然后在摘要项目中为输出 PDF 文件选择一个合适的名称。(如果要计算多个外部页面的页数,则该名称必须是唯一的。)
然后在摘要项目的前言中定义\numberofpages
上面列出的宏。假设我引入一个文件名为 的外部 PDF PaperA.pdf
,那么我可以在摘要项目的任何位置打印其页数
\numberofpages{PaperA.pdf}
需要注意的是,当您编辑其他项目并返回到摘要项目时,您需要记住使用您添加到摘要项目的每个外部 PDF 文件上显示的按钮“刷新”每个外部 PDF 文件:
由于 Overleaf 的架构,这些外部文件无法随着其他项目的变化而自动更新。这必须使用“刷新”按钮手动完成。
单个 Overleaf 项目中有多个文档
如果您在一个 Overleaf 项目中有多个文档,可以使用xr
类似代码和此\numberofpages
宏的某种组合更自动地完成此操作,或者lastpage
如 John 在评论中提到的那样。但在 Overleaf 上使用此方法也有其他权衡,具体取决于您在每个其他文档中的内容。请参阅我是否可以在 Overleaf 上选择哪个文件是项目中的主 tex 文件有关在单个 Overleaf 项目中编译多个文档的更多信息。
如果您最终将多个文档合并到一个 Overleaf 项目中,此帮助文章将展示如何使用latexmkrc
Overleaf 上的文件来触发在单个 Overleaf 项目中编译其他文件:与 Overleaf 中的 xr 包进行交叉引用。该文章从使用xr
包的角度讨论了这一点,但可以使用相同类型的方法在项目的输出文件区域中获取更新的 PDF,以便与\numberofpages
上面描述的宏一起使用。