我的工作目录中有一组图片,我想使用这些图片制作 PDF 报告。我想包含所有图片,但图片数量在每种情况下都会发生变化。我想制作一个“for”循环,按顺序逐张插入每张图片。有人能帮我吗?目前我的代码如下:
\begin{figure}[h!]
\begin{centering}
\includegraphics[width=10cm,height=10cm]{Figure1.png}
\caption[Sèries temporals de vent i direccions]{Sèries temporals velocitat de vent i direccions. filtratge de pics i glaçades de velocitat.}
\label{Serie}
\end{centering}
\end{figure}
我想对.png
目录中的每一张图片都这样做。感谢您的提问:我使用的是 Windows 7,文件名遵循 Figura1.png、Figura2.png 等模式。那么哪种可能性最合适?
答案1
假设您的图片都遵循某些命名约定(这里我使用pic1.png
了pic4.png
),该lipsum
包仅用于虚拟文本:
\documentclass[parskip]{scrartcl}
\usepackage[margin=10mm,a6paper]{geometry}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\foreach \x in {1,2,3,4}
{ \lipsum[\x]
\includegraphics[scale=1]{pic\x.png}
\clearpage
}
\end{document}
或者,您可以指定要迭代的变量元组。以下代码效果相同:
\foreach \x/\picname in {4/pic1.png,8/pic2.png,15/pic3.png,16/pic4.png}
{ \lipsum[\x]
\begin{figure}[htb]
\includegraphics[scale=1]{\picname}
\caption{The very nice picture \x}
\end{figure}
\clearpage
}
输出为:
答案2
使用精彩python.sty
包(参见github) 和一些嵌入式 Python 代码,这很容易:
\documentclass{article}
\usepackage{python}
\usepackage{graphicx}
\begin{document}
\begin{python}
import os
directory = "."
extension = ".png"
files = [file for file in os.listdir(directory) if file.lower().endswith(extension)]
for file in files:
print r"\begin{figure}[!ht]"
print r"\centering"
print r"\includegraphics[width=10cm,height=10cm]{%s}" % file
print r"\caption{File %s}" % file
print r"\label{Serie}"
print r"\end{figure}"
\end{python}
\end{document}
请注意,您需要使用该--enable-write18
选项进行编译才能运行 Python 代码。
答案3
如果你的系统是 Unix 系统,那么下面的一组宏就可以了,但它们要求使用以下命令编译文件pdflatex -shell-escape
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[catalan]{babel}
\usepackage{graphicx}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\figureloop}{m}
{
\group_begin:
\etex_everyeof:D { \exp_not:N }
\tex_endlinechar:D \c_minus_one
\seq_gset_split:Nnx \g_figloop_names_seq { , }
{ \tex_input:D |"ls ~ -m ~ #1*.png" ~}
\group_end:
\seq_map_inline:Nn \g_figloop_names_seq { \dofigureloop { ##1 } }
}
\cs_generate_variant:Nn \seq_gset_split:Nnn {Nnx}
\seq_new:N \g_figloop_names_seq
\ExplSyntaxOff
\NewDocumentCommand \dofigureloop {m}
{
\begin{figure}
\centering
\includegraphics[width=10cm,height=10cm]{#1}
\caption[Sèries temporals de vent i direccions]
{Sèries temporals velocitat de vent i direccions. Filtratge de pics i glaçades de velocitat.}
\label{Serie-#1}
\end{figure}
}
\begin{document}
\figureloop{figure}
\end{document}
参数\figureloop
是图形名称中的通用部分。它可能被推广到不同的扩展。
该位将通过 shell-escape 发送到操作系统的命令\tex_input:D |"ls~-m~#1*.png"~
的输出加载到操作系统。此输出存储在一个序列中,然后将其拆分。然后在该序列上调用一个映射函数,其参数就是一个文件名,调用的宏只是排版必要的图形环境。还会生成ls
表单中的标签。Serie-<filename>
使用不同的 shell 命令这也可能适用于 Windows 系统。
无论如何都需要一个更简单的版本-shell-escape
;使用kpsewhich
应该确保它可以在 Windows 系统上执行。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[catalan]{babel}
\usepackage{graphicx}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\figureloop}{m}
{
\jonel_figureloop:n { #1 }
}
\ior_new:N \g_jonel_ls_stream
\seq_new:N \l_jonel_filenames_seq
\cs_new_protected:Npn \jonel_figureloop:n #1
{
\seq_clear:N \l_jonel_filenames_seq
\ior_open:Nn \g_jonel_ls_stream { "|kpsewhich ~ #1*.png" }
\ior_map_inline:Nn \g_jonel_ls_stream
{ \seq_put_right:Nf \l_jonel_filenames_seq { \tl_trim_spaces:n { ##1 } } }
\seq_map_inline:Nn \l_jonel_filenames_seq { \dofigureloop { ##1 } }
}
\cs_generate_variant:Nn \seq_put_right:Nn {Nf}
\ExplSyntaxOff
\NewDocumentCommand \dofigureloop {m}
{
\begin{figure}
\centering
\includegraphics[width=10cm,height=10cm]{#1}
\caption[Sèries temporals de vent i direccions]
{Sèries temporals velocitat de vent i direccions.
Filtratge de pics i glaçades de velocitat.}
\label{Serie-#1}
\end{figure}
}
\begin{document}
% assume all figures are in the "figures" subfolder
% and are named "figureXXX.png"
\figureloop{figures/figure}
\end{document}
2019 年更新
由于 的变更expl3
,先前的解决方案将不再有效。这是新版本。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[catalan]{babel}
\usepackage{graphicx}
\usepackage{xparse}
\usepackage{showlabels}
\ExplSyntaxOn
\NewDocumentCommand{\figureloop}{O{png}mm}
{
\jonel_figureloop:nnn { #1 } { #2 } { #3 }
}
\tl_new:N \l_jonel_filenames_tl
\seq_new:N \l_jonel_filenames_seq
\cs_new_protected:Nn \__jonel_filenames_process:nn {}
\cs_generate_variant:Nn \__jonel_filenames_process:nn { VV }
\cs_new_protected:Nn \jonel_figureloop:nnn
{
\sys_shell_get:nnN { kpsewhich ~ #2*.#1 } {} \l_jonel_filenames_tl
\seq_set_split:NnV \l_jonel_filenames_seq { ~ } \l_jonel_filenames_tl
\seq_pop_right:NN \l_jonel_filenames_seq \l_tmpa_tl
\cs_set_protected:Nn \__jonel_filenames_process:nn { #3 }
\seq_map_variable:NNn \l_jonel_filenames_seq \l__jonel_filenames_fullname_tl
{
\tl_set_eq:NN \l__jonel_filenames_shortname_tl \l__jonel_filenames_fullname_tl
\tl_remove_once:Nn \l__jonel_filenames_shortname_tl { ./#2 }
\tl_remove_once:Nn \l__jonel_filenames_shortname_tl { .#1 }
\__jonel_filenames_process:VV \l__jonel_filenames_fullname_tl \l__jonel_filenames_shortname_tl
}
}
\ExplSyntaxOff
\begin{document}
% assume all figures are in the "figures" subfolder
% and are named "figureXXX.png"
\figureloop{figures/ScreenShot}{
\begin{figure}
\centering
\showtokens{\#1=#1,\#2=#2}
\includegraphics[width=10cm,height=10cm,keepaspectratio]{#1}
\caption[Sèries temporals de vent i direccions]
{Sèries temporals velocitat de vent i direccions.
Filtratge de pics i glaçades de velocitat.}
\label{Serie-#2}
\end{figure}
}
\end{document}
答案4
使用 编译以下内容pdflatex -shell-escape filename.tex
。仅适用于 Windows 用户。
% filename.tex
\documentclass[preview,border=12pt,varwidth]{standalone}
\usepackage{graphicx}
\edef\subdir{"Sub Dir/"}
\graphicspath{{\subdir}}
\immediate\write18{cmd /c dir /b \subdir\space *.png > imagelist.txt}
\begin{document}
\makeatletter
\newread\reader
\openin\reader=imagelist.txt\relax
\begingroup
\endlinechar=-1\relax
\loop
\readline\reader to \data
\unless\ifeof\reader
\filename@parse{\data}
\section{\filename@base.\filename@ext}
\includegraphics[scale=.5,ext=.\filename@ext]{"\filename@base"}\endgraf
\repeat
\endgroup
\closein\reader
\makeatother
\end{document}
特征
- 它可以接受文件名或路径中的空格。
- 它可以从任何子目录导入图像。