我有很多图片需要在 PDF 中显示(无文本)。我希望制作类似照片的联系表。有没有一种简单的方法可以做到这一点,而不必手动完成所有操作,例如,我可以设置一个 20 x 10 的网格,然后只列出文件名吗?如果我必须每隔几行就浏览开始和结束环境,那么这将花费太长时间。理想情况下,我希望它换到下一页。
答案1
一旦文件名中包含特殊字符(例如_
等) ,从另一个文件读取文件名就会很棘手。
这将使用\readline
,它会相应地更改 catcodes 并将读取的文件名存储到列表中,这里称为\mylist
。
为了显示图形,定义一个列表处理器就足够了,基本上就是这样\includegraphics
。(我在三幅图像后添加了环绕并在表格中使用了漂亮的对齐方式)
\documentclass{article}
\usepackage{etoolbox}
\usepackage{graphicx}
\listxadd{\mylist}{}
\newread\readhandle
\newcommand{\readfromfiletolist}[1]{%
\IfFileExists{#1}{%
\begingroup
\openin\readhandle=#1% open the file
\endlinechar-1 % Drop the endline characters
\loop
\readline\readhandle to \linefromfile %read a complete line
\listxadd{\mylist}{\linefromfile}% add expanded!
\unless\ifeof\readhandle
\repeat
\endgroup
\closein\readhandle% Close the file
}{}%
}
\newcounter{piccounter}
\newcommand{\displayimage}[1]{%
\stepcounter{piccounter}%
\begin{tabular}[t]{l}
\includegraphics[width=3cm]{"#1"} \tabularnewline
#1
\end{tabular}
\ifnum\value{piccounter} = 3 % Wrap after 3 pictures
\par
\setcounter{piccounter}{0}%
\fi%
}
\begin{document}
\readfromfiletolist{filelist.txt}
\begin{center}
\huge \textbf{Spot the wrong image!}
\end{center}
\forlistloop{\displayimage}{\mylist}
\end{document}
以下是filelist.text
a_1.jpg
a_2.jpg
a_3.jpg
a_4.jpg
a_5.jpg
a_6.jpg
brontosaurs.png
a_7.jpg
该brontosaurs.png
文件取自开放剪贴画,而那位可爱的蜜蜂公爵则取自我们友好的用户 Paulo Cereda!
请注意,_
由于 catcode 更改,显示为上标点。在我看来,只要文件名本身不显示,就没有问题。
答案2
类似这样的方法可能会有效(未经测试)
\usepackage{etoolbox,graphicx}
\newcommand\HandlePic[1]{%
\includegraphics[width=3cm]{#1}
\par
}
\forcsvlist\HandlePic{A,B,C}
列表中的每个项目都会逐一交给处理程序。
这只是 Christians 解决方案的一个补充。以下是使用该verbatim
包的POC滥用 \verbatiminput
\documentclass[a4paper]{article}
\usepackage{verbatim}
\usepackage{graphicx}
\makeatletter
\newcommand\test[1]{
\begingroup
\def\verbatim@processline{%
\includegraphics{\the\verbatim@line}%
\par
}
\def\verbatim@input##1##2{%
\IfFileExists {##2}{%
\verbatim@readfile{\@filef@und}
\endgroup\@doendpe}%
{\typeout {No file ##2.}\endgroup}}
\verbatiminput{#1}
\endgroup
}
\makeatother
\begin{document}
\test{t.txt}
\end{document}