我有一些图片,想将其汇集制作成一个PDF画册。
这些图片的文件名假定是
001.pdf, 002.pdf, ..., 009.pdf,
010.pdf, 011.pdf, 012.pdf, ..., 099.pdf,
100.pdf, 101.pdf, 102.pdf, ..., 119.pdf,
120.pdf
我使用的第一种方法,是分开处理,避免前缀问题,可惜这样稍显麻烦:
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{graphicx}
\begin{document}
\foreach \x in {1,...,9} {\tikz{
\node {\includegraphics[width=5cm]{p00\x.pdf}};
}}
\foreach \x in {10,...,99} {\tikz{
\node {\includegraphics[width=5cm]{p0\x.pdf}};
}}
\foreach \x in {100,...,120} {\tikz{
\node {\includegraphics[width=5cm]{p\x.pdf}};
}}
\end{document}
我使用的第二种方法,是在Excel
中使用Excel公式
将每一个文件名枚举出来,然后复制到\foreach \x in
后面的编组内,不过这个做法是借助外部工具实现的:
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{graphicx}
\begin{document}
\foreach \x in {
p001,
p002,
p003,
p004,
p005,
p006,
p007,
p008,
p009,
p010,
p011,
p012,
p013,
p014,
p015,
p016,
p017,
p018,
p019,
p020,
p021,
p022,
p023,
p024,
p025,
p026,
p027,
p028,
p029,
p030,
p031,
p032,
p033,
p034,
p035,
p036,
p037,
p038,
p039,
p040,
p041,
p042,
p043,
p044,
p045,
p046,
p047,
p048,
p049,
p050,
p051,
p052,
p053,
p054,
p055,
p056,
p057,
p058,
p059,
p060,
p061,
p062,
p063,
p064,
p065,
p066,
p067,
p068,
p069,
p070,
p071,
p072,
p073,
p074,
p075,
p076,
p077,
p078,
p079,
p080,
p081,
p082,
p083,
p084,
p085,
p086,
p087,
p088,
p089,
p090,
p091,
p092,
p093,
p094,
p095,
p096,
p097,
p098,
p099,
p100,
p101,
p102,
p103,
p104,
p105,
p106,
p107,
p108,
p109,
p110,
p111,
p112,
p113,
p114,
p115,
p116,
p117,
p118,
p119,
p120} {\tikz{\node {\includegraphics[width=5cm]{\x.pdf}};}}
\end{document}
在Tikz
中有没有一种比较优雅的方法,纯靠TeX
或Tikz
来实现这个需求呢?
在source2e.pdf
中有一个名为\two@digits
的宏
69 ⟨∗2ekernel⟩
70 \def\two@digits#1{\ifnum#1<10 0\fi\number#1}
这一问题也被称为前导零(leading-zero)问题,我想如果知道这点还是比较好搜索答案的...
Thanks to MICO
我的思路是模仿自定义\three@digits
:
\documentclass[tikz]{standalone}
\usepackage{pgffor}
\usepackage{graphicx}
\begin{document}
\makeatletter
% \def\two@digits#1{\ifnum#1<10 0\fi\number#1}
\def\three@digits#1{\ifnum#1<10 00\else\ifnum#1<100 0\fi\fi\number#1}
\foreach \x in {1,...,120} {\tikz{
% \node {\includegraphics[width=5cm]{p\x.pdf}};
\node {\includegraphics[width=5cm]{p\three@digits{\x}.pdf}};
}}
\makeatother
\end{document}
一个基于 expl3 的方法如下:
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\ExplSyntaxOn
\cs_generate_variant:Nn \prg_replicate:nn {e}
\cs_new:Npn \three_digits:n #1
{% to keep expandable
\prg_replicate:en {3-\tl_count:n {#1}}{0} #1
}
\newcommand\PDFInclude[2][1]{
\int_step_inline:nnn {#1}{#2}{
%\includegraphics[width=5cm]{
\three_digits:n {##1}.pdf\par
%}
}
}
\ExplSyntaxOff
An simple TEST I as follows:\par
\PDFInclude{10}
An simple TEST II as follows:\par
\PDFInclude[95]{111}
\end{document}
运行结果如下:
你可以把上面的 \PDFInclude
命令自己加以改造以符合自己的需求.
居然还真有这种宏!感谢!