Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

Is it possible to iterate through a folder containing pictures while first filtering file extension tikz,png,pdf or eps, and then getting a list of filenames of the directory for use in a for loop, and add them using their filename as image text in my latex code?? I tried googling code examples but no luck yet.

share|improve this question
1  
Windows? Unix? Linux? Which? –  In PSTricks we trust Aug 2 at 16:19
1  
What would extension .tikz be? Raw tikz code to be included with \input? Would there be any duplicate filenames independent of extension (e.g. foo.png and foo.eps)? –  Alan Munn Aug 2 at 16:22
    
Sorry I mean windows. .tikz is matlab2tikz output, last question yes there would –  BigChief Aug 2 at 16:32

1 Answer 1

up vote 6 down vote accepted

This answer had been prepared long time ago and I am waiting for someone to ask it. Here (click) is the history.

Batch.bat

rem batch.bat
echo off

rem %1 path (relative to the main input file) to the files to be iterated 
rem %2 output file name
rem remaining args represent the extension of file to be iterated

set curdir=%CD%
cd "%~1"
shift

rem output must be enclosed with "" to allow spaces in the path
set output="%curdir%\%~1.list"

if exist %output% del %output%
copy nul %output%
shift

:loop
if "%~1"=="" goto :eof
dir /b *.%~1 >> %output%
shift
goto :loop

filename.tex

% filename.tex must be compiled with 
% pdflatex -shell-escape filename.tex 
\documentclass[preview,border=12pt]{standalone}
\usepackage{graphicx}

\newread\reader
\newcount\TotalFiles    


\makeatletter
\newcommand\IterateImages[2]{%
% #1: directory path with a trailing /
% #2: a list of file extensions: eps pdf jpg png
\immediate\write18{batch "#1" \jobname\space #2}
\openin\reader=\jobname.list\relax
\loop
    \read\reader to \filename
    \unless\ifeof\reader
    \filename@parse{\filename}
    \section*{\filename}
    \begin{center}
        \includegraphics[scale=0.1]{"#1\filename@base"}
    \end{center}
    \endgraf
    \advance\TotalFiles1\relax
\repeat
\closein\reader
}
\makeatother



\begin{document}
% ./ also works
\IterateImages{Sample Pictures/}{jpg png pdf}

\section*{Summary}
There is(are) \the\TotalFiles\ file(s) in total.
\end{document}

Output

To prove that I did not lie.

enter image description here

Notes

For security reason, filecontents does not allow us to create batch.bat on the fly.

share|improve this answer
    
Thanks!! Absolutely outrageous!! To answer this so fast so comprehensive. Cool to think of a batch script to handle this. Last minor request: How to skip extensions in the resulting output image text?? Would it be possible without batch scripts?? I guess not? –  BigChief Aug 2 at 17:17
1  
@BigChief: You can use \filename@base if you want the filename without extension. Using batch file is the best approach in my opinion. –  In PSTricks we trust Aug 2 at 17:20
    
Thanks! Will use @base really great solution. –  BigChief Aug 2 at 17:31
1  
You can create the bat-file on the fly by first writing a batch.txt and then use write18 to rename it. But I would probably prefer a .lua script instead of a batch script. –  Ulrike Fischer Aug 2 at 17:41
1  
@UlrikeFischer: A nice trick. Thanks. –  In PSTricks we trust Aug 2 at 17:42

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.