문서에 포함된 그림의 파일 이름 목록을 얻는 방법

문서에 포함된 그림의 파일 이름 목록을 얻는 방법

fig나는 엄청난 양의 다른 그림으로 가득 찬 폴더 에서 엄청난 양의 그림을 포함하는 TeX 문서를 가지고 있습니다 .

문서를 그림과 함께 이동하고 싶지만 폴더 전체를 이동하고 싶지 않고 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), 그러나 나는 다음을 사용하는 데 익숙해졌습니다.패키지letltxmacro선택적 매개변수가 있는 매크로의 경우. 에 대한 자세한 설명은 \LetLtxMacroa에 대한 이 질문에서 찾을 수 있습니다.닫힌 제곱근 기호.

  • [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).

  • stracesyscall을 표시합니다. 우리가 제공하는 옵션을 사용하면 -e삽입된 수치(현재 열려 있는 다른 파일도 포함)를 가져오기 위해 "열린" syscall(옵션)만 유지합니다. 옵션 -f은 하위 프로세스의 syscall을 표시하는 것이며 리디렉션은 strace 출력만 유지하는 것입니다.

  • grep plots경로에서 공통 문자열을 포함하는 행을 선택합니다(이 경우 "플롯").

  • sed따옴표 안에 있는 내용을 선택합니다.

  • 최종 리디렉션은 결과를 파일에 덤프합니다.

이런 식으로 중복된 파일 이름을 얻을 수 있지만 원하는 것에 따라 충분할 수 있습니다.

답변4

perlCTAN에는 스크립트 가 있습니다 .텍스펜던트그것은 이 모든 것 이상을 수행합니다. 모든 종류의 내부 및 외부 종속성을 처리하고 정보를 줄당 1개 형식 Makefile으로 생성할 수 있습니다.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

관련 정보