Ich habe ein TeX-Dokument, in das eine riesige Menge an Abbildungen aus einem Ordner eingebettet ist, fig
der wiederum voller weiterer, riesiger Abbildungen ist.
Ich möchte das Dokument samt Abbildungen verschieben, jedoch nicht den gesamten fig
Ordner 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
\let
hä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,\LetLtxMacro
from zu verwendenDasletltxmacro
Paketfür Makros, die optionale Parameter haben. Eine detaillierte Beschreibung\LetLtxMacro
finden 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\write18
dencp
Shell-Befehl innerhalb der\foreach
Schleife 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
pdflatex
gibt das Flag an -recorder
, das eine Datei schreibt .fls
. Alles, was INPUT
dort markiert ist, sind Dateien, die es während der Verarbeitung geöffnet hat.
latexmk
verwendet das Flag -deps
oder -deps-out=FILENAME
um die Anständigkeiten anzuzeigen und diese im letzten Fall auch in einer make
formatierten 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 :
make
ist der Befehl, den Sie zum Erstellen Ihrer Ausgabe verwenden (kann eine Variation von seinpdflatex file.tex
).strace
zeigt die Systemaufrufe an. Mit den von uns bereitgestellten Optionen behalten wir nur die „offenen“ Systemaufrufe (-e
Option) bei, um die eingefügten Zahlen (sowie andere derzeit geöffnete Dateien) zu erhalten. Die-f
Optionen dienen dazu, Systemaufrufe von Unterprozessen anzuzeigen, und die Umleitungen dienen dazu, nur die Strace-Ausgabe beizubehalten.grep plots
wählt die Zeilen aus, die eine gemeinsame Zeichenfolge im Pfad enthalten (in diesem Fall „Plots“).sed
wä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 perl
Skript 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