У меня есть документ TeX, в который встроено огромное количество рисунков из fig
папки, которая заполнена еще большим количеством других рисунков.
Я хотел бы переместить документ вместе с его рисунками, но я не хочу перемещать всю fig
папку, а только те рисунки, которые встроены в документ.
Есть ли пакет (или какой-либо другой способ), который позволяет мне, например, распечатать имена файлов всех рисунков, встроенных в документ? Что-то вроде:
fig/figurename1.eps
fig/figurename2.eps
...
etc
Затем я мог бы просто скопировать и вставить этот список, добавить несколько cp
символов в простой текстовый файл и автоматизировать копирование этих файлов в нужное мне место, запустив файл в своей оболочке:
$ cp fig/figurename1.eps wherever/fig/
$ cp fig/figurename2.eps wherever/fig/
...
etc
Конечно, это всего лишь идея, если у кого-то есть альтернатива «перечислению файлов и копированию-вставке в файл оболочки», я был бы рад выслушать =)
решение1
Вы можете изменить \includegraphcs
макрос, чтобы добавить в список и распечатать список в конце документа. MWE ниже дает следующий вывод:
Figures included were
images/figA.jpg
images/figB.png
Примечания:
В этом случае
\let
также будет работать (согласно комментарию egreg наИзменить размер всех изображений в Latex до ширины в процентах), но я привык использовать\LetLtxMacro
fromпакетletltxmacro
для макросов, которые имеют необязательные параметры. Подробное описание\LetLtxMacro
можно найти в этом вопросе озакрытый символ квадратного корня.Эта
[demo]
опция используется для того, чтобы поместить черный ящик туда, где будет находиться фигурка в демонстрационных целях. При реальном использовании (когда у вас действительно будут доступны фигурки) эту опцию необходимо удалить.Если бы вы хотели, вы могли бы использовать
\immediate\write18
и выполнитьcp
команду оболочки внутри\foreach
цикла и иметь каталог в конце набора, который содержит изображения, которые были включены. Никакой дальнейшей обработки не потребовалось бы.
Код:
\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}
решение2
pdflatex
предоставляет флаг -recorder
, который записывает .fls
файл. Все, что INPUT
там отмечено, это файлы, которые он открыл во время обработки.
latexmk
использует флаг -deps
или -deps-out=FILENAME
для отображения приличий и в последнем случае также сохраняет их в make
отформатированном FILENAME
.
решение3
В Linux подойдет что-то вроде этого, без изменения исходного кода:
strace -fe open make 2>&1 1>/dev/null | grep plots | sed 's/.*\"\(.*\)\".*/\1/' > plots.list
Где :
make
— это команда, которую вы используете для формирования выходных данных (может быть какой-то вариациейpdflatex file.tex
).strace
отображает системные вызовы. С параметрами, которые мы предоставляем, мы сохраняем только "открытые" системные вызовы (-e
опция), чтобы получить вставленные цифры (а также другие открытые файлы foe сейчас). Параметры-f
отображают системные вызовы подпроцессов, а перенаправления сохраняют только вывод strace.grep plots
выбирает строки, содержащие общую строку в пути (в данном случае «участки»).sed
выбирает то, что находится внутри кавычек.Окончательное перенаправление сохраняет результат в файле.
Таким образом вы можете получить дублирующиеся имена файлов, но этого может быть достаточно, в зависимости от ваших потребностей.
решение4
perl
На CTAN есть скрипт,texdependкоторый делает все это и даже больше. Он обрабатывает все виды внутренних и внешних зависимостей и может генерировать информацию в формате Makefile
, perl
или 1 на строку.
>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