使用pdfpages如何实现插入PDF实现保持「原有PDF页面大小不变」?

发布于 2025-07-16 20:24:52
\documentclass{article}
\usepackage{pgffor}
\usepackage{graphicx}
\usepackage{expl3}

\ExplSyntaxOn
\newcommand{\safeloop}[1]{
    \pdfximage{#1}
    \int_set:Nn \g_tmp_int {\pdflastximagepages}
    \int_step_i_nline:nn {\g_tmp_int} {
        \includegraphics[page=##1]{#1}
    }
}
\ExplSyntaxOff

\begin{document}
\safeloop{picture/huatu1.pdf}
\end{document}

查看更多

关注者
0
被浏览
131
3 个回答
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

由于没有提供「huatu1.pdf」, MWE不规范...另外当遇到报错,作为提问者理应提供「报错信息」

image.png

很遗憾,直接复制粘贴在「别人的电脑上」无法编译复现你遇到的错误...

上面的代码在我本地无法编译...建议提供当前项目的压缩包并对这段代码想实现的效果做详细介绍。

大致有以下几个问题:

  • pgffor没用上...调用它做什么呢...
  • expl3已经进入latex2e内核,因此会自动调用,无需自行显式调用
  • \int_step_i_nline:nn这个函数不存在,这里 似乎 应该用\int_step_inline:nn,请仔细阅读texdoc interface3而非问AI...
  • P.S. 是pdfpages不好用吗...

祝好!


Edit

既然你的提问标题是「一段expl3代码无法编译」

这里不会关心你的实际需求,只提供为何出错?实际上和latex3并无关系。

你的问题可以更简化的MWE为:

\documentclass{article}
\usepackage{pdfpages}
\newcommand{\getpdfpages}[1]{%
    \pdfximage{#1}%
    \the\pdflastximagepages%
}
\begin{document}
The page is:\getpdfpages{example-image.pdf}
\end{document}

当使用pdflatex编译时,可以正常得到PDF为example-image的页数为1:
image.png

而当使用xelatex编译时,将得到:

! Undefined control sequence.
\getpdfpages #1->\pdfximage
                            {#1}\the \pdflastximagepages
l.11 The page is \getpdfpages{example-image.pdf}

?

这是因为\pdfximagepdfTeX提供的宏,无法使用xelatex编译。

另外,代码中:

  • \usepackage[UTF8]{ctex}并没有发挥作用
  • 使用现代引擎编译文档时,默认编码默认即为UTF8,所以这里也是没有必要显式写出UTF8的...
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

不知道你要干什么,不要贴一大堆代码,看着很累...

贴个「最佳实践」吧...(我还是觉得不够优雅,这显然是pdfpages宏包_应该_提供的内置功能...理论上翻issues更合理)

Learning From this link:

\documentclass[a4paper]{article}
\usepackage{l3graphics}
\usepackage{pdfpages}
\begin{document}
\ExplSyntaxOn
\graphics_get_pagecount:nN {test.pdf} \l_tmpa_tl
\int_step_inline:nn {\l_tmpa_tl} {
     \includepdf[pages={#1},fitpaper]{test.pdf} % PDF.file with differernt papersize
}
\ExplSyntaxOff
\end{document}

image.png

123
123 1天前
这家伙很懒,什么也没写!

我询问ai好多次都失败了,没想到ds最后还是给出了正确代码

\documentclass{article}
\usepackage{pdfpages}
\usepackage[UTF8]{ctex}

\ExplSyntaxOn
% 声明全局整数变量存储页数
\int_new:N \g_pdf_totalpages_int

% 获取PDF页数并存入变量
\cs_new_protected:Npn \storepdfpages:n #1
{
  \pdfximage{#1} % 创建PDF图像(不可展开的命令)
  \int_gset:Nn \g_pdf_totalpages_int {\pdflastximagepages} % 存储页数
}

% 循环插入PDF页
\cs_new_protected:Npn \insertallpages:n #1
{
  \storepdfpages:n {#1} % 先获取并存储页数
  \int_step_inline:nn {\g_pdf_totalpages_int} % 使用整数变量循环
  {
    \includepdf[pages={##1},~fitpaper]{#1} % 注意这里的双##(因为嵌套在宏定义中)
  }
}
\ExplSyntaxOff

\begin{document}
\ExplSyntaxOn
\insertallpages:n {huatu1.pdf} % 插入所有页
\ExplSyntaxOff
\end{document}

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览