我有一个包含几百张图的文件夹(其中只有数字):我怎样才能将它们全部导入到我的tex
文件中不知道文件名在类似的代码中\includegraphics{filename}
(使用LuaLaTeX
?
我想将文件名作为标题。
一般 MWE:
\documentclass{article}
\usepackage{graphicx,caption}
%folder for the figures is `/figures/`
\begin{document}
%repeat from here for each file in folder `figures`
\begin{figure}[!htb]
\includegraphics[scale=1]{figures/`filename`}
\caption{`filename`}
\end{figure}
\end{document}
答案1
如果你安装了 Java,你可以使用texosquery
使用 TeX 的管道 shell 转义。以下假设您的所有图像文件都具有扩展名.png
:
\documentclass{article}
\usepackage{graphicx,caption}
\usepackage{texosquery}% requires piped shell escape
\makeatletter
% syntax: \foreachfile{cs}{pattern}{folder}{body}
\newcommand{\foreachfile}[4]{%
\TeXOSQueryFilterFileList{\result}{,}{#2}{#3}%
\ifx\result\empty
Query failed!
\else
\@for#1:=\result\do{#4}%
\fi
}
\makeatother
\begin{document}
\foreachfile{\thisimage}{.*\string\.png}{figures}
{
\begin{figure}[!htb]
\edef\x{\noexpand\includegraphics[scale=1]{figures/\thisimage}}\x
\caption{\thisimage}
\end{figure}
}
\end{document}
这需要启用 shell escape。例如:
pdflatex -shell-escape mydoc
(文件名为mydoc.tex
)。如果您使用 MiKTeX,您还需要使用--enable-pipes
。如果您使用texosquery
v1.3 或更低版本的 LuaTeX,您还需要使用 手动关闭试运行模式\TeXOSQueryDryRunfalse
。v1.4 不需要此操作。
texosquery
使用前需要进行一些设置。应该有一个名为的配置文件texosquery.cfg
,可以通过以下方式找到:
kpsewhich texosquery.cfg
(从命令行运行)。最好将此文件复制到您的TEXMFLOCAL
或TEXMFHOME
树中,以防止每次升级软件包时您的更改被覆盖。
找出你使用的 Java 版本。(从你的评论中我猜你使用的是 Java 5。)可以使用以下命令找到版本号
java -version
例如,对我来说,这显示java version "1.8.0_92"
意味着 Java 8。
如果你使用的是 Java 5 或 6,则该texosquery.cfg
文件需要包含以下行
\def\TeXOSInvokerName{texosquery-jre5}
\TeXOSQueryAllowRestricted
必须注释掉带有 的行。
如果你使用的是 Java 7,则该texosquery.cfg
文件需要包含以下行
\def\TeXOSInvokerName{texosquery}
\TeXOSQueryAllowRestricted
并且,再次强调,必须注释掉带有 的行。这是默认配置。
如果你使用的是 Java 8,则该texosquery.cfg
文件需要包含以下行
\def\TeXOSInvokerName{texosquery-jre8}
该应用程序的此形式已添加到 TeX Live 2017 的限制列表中,因此如果您有 TL2017,则可以取消注释\TeXOSQueryAllowRestricted
,否则需要保持注释掉。
texosquery-jre8
限制列表仅评估了 Java 8 版本 ( ),因为旧版本的 Java 被视为安全风险。
注意:对于texosquery
v1.3 及以下版本,您无法\TeXOSQueryFilterFileList
在受限模式下使用(但可以与不受限制的 shell 转义一起使用)。版本 1.4 允许这样做,但受限模式的安全功能会施加一些限制。
答案2
或许它并不完全符合你的期望,但它可以作为一个开始。
示例 1:
以下示例使用tikz
包裹:
\documentclass[a4paper]{report}
\usepackage{tikz}
\usepackage{graphicx}
\begin{document}
\def \n {3} % change this to the amount of files you need to include.
\foreach \s in {0,...,\n} {%
\begin{figure}
\centering
\includegraphics[scale=0.5]{figures/\s.png}
\caption{This is figure \s}
\end{figure}
}
\end{document}
值得注意的是,图形需要有数字名称。
示例 2: 第二个例子取自如何迭代文件夹中文件的名称
\documentclass{article}
\makeatletter
\def\app@exe{\immediate\write18}
\def\inputAllFiles#1{%
\app@exe{ls #1/*.txt | xargs cat >> \jobname.tmp}%
\InputIfFileExists{\jobname.tmp}{}
\AtEndDocument{\app@exe{rm -f #1/\jobname.tmp}}}
\makeatother
\begin{document}
\inputAllFiles{figures/.}% from the figures dir
\end{document}
需要注意的是,你需要使用pdflatex -shell-escape test