如何取得文件中嵌入的圖形的檔案名稱列表

如何取得文件中嵌入的圖形的檔案名稱列表

我有一個 TeX 文檔,其中嵌入了一個文件夾中的大量數字,而fig該文件夾中還充滿了大量其他數字。

我想移動文件及其圖形,但我不想移動整個fig資料夾,而只想移動文件中嵌入的圖形。

例如,是否有一個套件(或任何其他方式)允許我列印出文件嵌入的所有圖形的檔案名稱?就像是:

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

然後,我可以複製貼上該列表並cp在純文字檔案中添加一些 ,並通過在 shell 中運行該文件來自動將這些文件複製到我想要的位置:

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

當然,這只是一個想法,如果有人有「在 shell 檔案中列出檔案並複製貼上」的替代方案,我很樂意傾聽 =)

答案1

您可以修改\includegraphcs巨集以新增至清單並在文件末尾列印清單。下面的 MWE 產生以下輸出:

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

筆記:

  • 在這種情況下\let也可以工作(根據egreg的評論將 Latex 中的所有影像調整為百分比寬度),但我已經習慣使用\LetLtxMacrofromletltxmacro包裹對於具有可選參數的巨集。詳細的描述\LetLtxMacro可以在這個關於a的問題中找到閉平方根符號

  • 使用該[demo]選項是為了在圖形所在的位置放置一個黑框以用於演示目的,在您的實際使用中(當您實際有可用的圖形時),您需要刪除此選項。

  • 如果您願意,可以在循環中使用\immediate\write18和執行shell 命令,並在排版結束時有一個目錄,其中包含包含的圖像。不需要進一步處理。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使用標誌-depsor-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選項),以便取得插入的數字(以及現在的其他開啟的檔案)。這些-f選項用於顯示子程序的系統調用,重定向用於僅保留 strace 輸出。

  • grep plots選擇路徑中包含公共字串的行(在本例中為「繪圖」)。

  • sed選擇引號內的內容。

  • 最終重定向將結果轉儲到檔案中。

您可能會以這種方式獲得重複的檔案名,但根據您的需求可能已經足夠了。

答案4

CTAN上有一個perl腳本,依賴文本這一切以及更多。它處理各種內部和外部依賴關係,並可以產生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

相關內容