So erhalten Sie eine Liste der Dateinamen der in einem Dokument eingebetteten Abbildungen

So erhalten Sie eine Liste der Dateinamen der in einem Dokument eingebetteten Abbildungen

Ich habe ein TeX-Dokument, in das eine riesige Menge an Abbildungen aus einem Ordner eingebettet ist, figder wiederum voller weiterer, riesiger Abbildungen ist.

Ich möchte das Dokument samt Abbildungen verschieben, jedoch nicht den gesamten figOrdner mitnehmen, sondern nur die darin enthaltenen Abbildungen, die im Dokument eingebettet sind.

Gibt es ein Paket (oder eine andere Möglichkeit), mit dem ich beispielsweise die Dateinamen aller im Dokument eingebetteten Abbildungen ausdrucken kann? So etwas wie:

fig/figurename1.eps
fig/figurename2.eps
...
etc

Ich könnte diese Liste dann einfach kopieren und einfügen, einige cp's in eine reine Textdatei einfügen und das Kopieren dieser Dateien an den gewünschten Speicherort automatisieren, indem ich die Datei in meiner Shell ausführe:

$ cp fig/figurename1.eps wherever/fig/
$ cp fig/figurename2.eps wherever/fig/
...
etc

Natürlich ist das nur eine Idee, wenn jemand eine Alternative zum „Auflisten von Dateien und Kopieren/Einfügen in eine Shell-Datei“ hat, würde ich mich freuen, davon zu hören =)

Antwort1

Sie können das Makro ändern \includegraphcs, um eine Liste hinzuzufügen und die Liste am Ende des Dokuments auszudrucken. Das folgende MWE erzeugt die folgende Ausgabe:

Figures included were
 images/figA.jpg
 images/figB.png

Anmerkungen:

  • In diesem Fall \lethätte es auch funktioniert (gemäß egregs Kommentar unterPassen Sie die Größe aller Bilder in Latex auf eine prozentuale Breite an), aber ich habe mich daran gewöhnt, \LetLtxMacrofrom zu verwendenDas letltxmacroPaketfür Makros, die optionale Parameter haben. Eine detaillierte Beschreibung \LetLtxMacrofinden Sie unter dieser Frage zu einemgeschlossenes Quadratwurzelsymbol.

  • Die [demo]Option wird verwendet, um zu Demozwecken dort eine schwarze Box zu platzieren, wo die Abbildung hingehört. Bei Ihrer tatsächlichen Verwendung (wenn Sie die Abbildungen tatsächlich zur Verfügung haben) müssen Sie diese Option entfernen.

  • Wenn Sie möchten, können Sie \immediate\write18den cpShell-Befehl innerhalb der \foreachSchleife verwenden und ausführen und am Ende des Satzes ein Verzeichnis mit den eingefügten Bildern haben. Eine weitere Verarbeitung wäre nicht erforderlich.

Code:

\documentclass{article}
\usepackage[demo]{graphicx}% Remove [demo] option in real usage.
\usepackage{letltxmacro}
\usepackage{pgffor}


%% https://tex.stackexchange.com/questions/14393/how-keep-a-running-list-of-strings-and-then-process-them-one-at-a-time
\newcommand\FigList{}
\newcommand\AddFigToList[1]{\edef\FigList{\FigList#1,}}

\LetLtxMacro{\OldIncludegraphics}{\includegraphics}
\renewcommand{\includegraphics}[2][]{%
    \AddFigToList{#2}%
    \OldIncludegraphics[#1]{#2}%
}

\newcommand*{\ShowListOfFigures}{%
    \typeout{Figures included were}%
    \foreach \x in \FigList {%
        %\par\x% <-- uncomment if you want the list in the PDF as well
        \typeout{ \x}
    }%
}
\AtEndDocument{\ShowListOfFigures}

\begin{document}
\includegraphics{images/figA.jpg}

\includegraphics{images/figB.png}
\end{document}

Antwort2

pdflatexgibt das Flag an -recorder, das eine Datei schreibt .fls. Alles, was INPUTdort markiert ist, sind Dateien, die es während der Verarbeitung geöffnet hat. latexmkverwendet das Flag -depsoder -deps-out=FILENAMEum die Anständigkeiten anzuzeigen und diese im letzten Fall auch in einer makeformatierten Datei zu speichern FILENAME.

Antwort3

Unter Linux reicht etwa Folgendes aus, ohne dass die Quelle geändert werden muss:

strace -fe open  make 2>&1  1>/dev/null | grep plots | sed 's/.*\"\(.*\)\".*/\1/' > plots.list

Wo :

  • makeist der Befehl, den Sie zum Erstellen Ihrer Ausgabe verwenden (kann eine Variation von sein pdflatex file.tex).

  • stracezeigt die Systemaufrufe an. Mit den von uns bereitgestellten Optionen behalten wir nur die „offenen“ Systemaufrufe ( -eOption) bei, um die eingefügten Zahlen (sowie andere derzeit geöffnete Dateien) zu erhalten. Die -fOptionen dienen dazu, Systemaufrufe von Unterprozessen anzuzeigen, und die Umleitungen dienen dazu, nur die Strace-Ausgabe beizubehalten.

  • grep plotswählt die Zeilen aus, die eine gemeinsame Zeichenfolge im Pfad enthalten (in diesem Fall „Plots“).

  • sedwählt aus, was sich innerhalb der Anführungszeichen befindet.

  • Die abschließende Umleitung speichert das Ergebnis in einer Datei.

Auf diese Weise erhalten Sie möglicherweise doppelte Dateinamen, aber je nach Ihren Wünschen könnte das ausreichend sein.

Antwort4

Es gibt ein perlSkript auf CTAN,texabhängigdas all dies und noch mehr kann. Es verarbeitet alle Arten interner und externer Abhängigkeiten und kann die Informationen im Format Makefile, , 1-pro-Zeile oder 1-pro-Zeile generieren.perl

>texdepend
Find LaTex dependencies, Version: 0.96, Michael Friendly ([email protected])
Usage: C:\batchfiles\texdepend.pl <options> texfile[.tex]
  where <options> may be abbreviated to unique truncations, and are:
   -help               print this measly help
   -expand             expand package/include file to full path names
   -format = make      print dependencies in Makefile format
             perl      print in the form of perl assignments (LatexMk)
             1         print one per line (with # separators)
   -ignore = list      list of file types to be ignored in .log [default: fd]
   -out = filename     send output to filename
   -print =            Any one or more of i (includes) p (packages)
                       f (figs) b (bibfiles) s (styles) d (all dependencies)
   -styles = list      list of file types for  from .log [default: sty]
   -verbose

verwandte Informationen