\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}
由于没有提供「huatu1.pdf
」, MWE不规范...另外当遇到报错,作为提问者理应提供「报错信息」。
很遗憾,直接复制粘贴在「别人的电脑上」无法编译复现你遇到的错误...
上面的代码在我本地无法编译...建议提供当前项目的压缩包,并对这段代码想实现的效果做详细介绍。
大致有以下几个问题:
pgffor
没用上...调用它做什么呢...expl3
已经进入latex2e内核,因此会自动调用,无需自行显式调用\int_step_i_nline:nn
这个函数不存在,这里 似乎 应该用\int_step_inline:nn
,请仔细阅读texdoc interface3
而非问AI...pdfpages
不好用吗...祝好!
既然你的提问标题是「一段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
:
而当使用xelatex
编译时,将得到:
! Undefined control sequence.
\getpdfpages #1->\pdfximage
{#1}\the \pdflastximagepages
l.11 The page is \getpdfpages{example-image.pdf}
?
这是因为\pdfximage
是pdfTeX
提供的宏,无法使用xelatex
编译。
另外,代码中:
\usepackage[UTF8]{ctex}
并没有发挥作用UTF8
,所以这里也是没有必要显式写出UTF8
的...不知道你要干什么,不要贴一大堆代码,看着很累...
贴个「最佳实践」吧...(我还是觉得不够优雅,这显然是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}
我询问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}
可以改成别的的pdf路径
huatu1.pdf
我想这样,这样历遍页数,一页一页插入就可以使每一页的尺寸保持原来的大小,但是可能由于宏展开的问题,无法编译,于是我尝试expl3
@u98900
这是不是在给「潜在的回答者」增添不必要的麻烦呢?
是否有可能因为「潜在的回答者」觉得麻烦,延长了你获得满意答案的周期呢?
@u70550
以上使我最新的代码,我手动设置循环的次数为 10,那么确实可以正常编译,而当我使用以下代码,则报错
报错
没想到ds最终给出了解决方法,虽然它失败了好多次