디렉토리의 모든 파일 이름을 포함하는 tex 파일을 생성합니다.

디렉토리의 모든 파일 이름을 포함하는 tex 파일을 생성합니다.

95개의 tex 파일이 포함된 폴더가 있습니다. 다음 코드가 포함된 all.tex tex 파일을 만들어야 합니다.

\documentclass[10pt]{article}
\begin{document}
\input{file1.tex}
\input{file2.tex}
...
\input{file95.tex}
\end{document}

파일명은 이러합니다아니요패턴이 있어서 루프를 사용할 수 없습니다. 위의 내용은 단지 실제 예시일 뿐입니다.

Bash에서 다음을 시도했습니다.

printf '%s\n' *.tex | paste -sd "\n" - > all.tex

그러면 다음과 같은 all.tex 파일이 생성됩니다.

file1.tex
file2.tex
...
file95.tex

파일 이름 주위에 \input{}을 어떻게 추가하나요? 서문 등을 어떻게 추가하나요?

나는 사용하고있다배쉬(우분투에서)윈도우 10에서.

답변1

간단한 쉘 스크립트에서는 printf간단한 와일드카드 확장을 사용합니다.

#!/bin/sh

printf '%s\n' '\documentclass[10pt]{article}' \
              '\begin{document}'

printf '\input{%s}\n' *.tex

printf '%s\n' '\end{document}'

스크립트를 호출하고 출력을 리디렉션할 수 있습니다. 예를 들면 다음과 같습니다.

/path/to/script > /path/of/output.tex

단일 명령줄에서 단일 리디렉션을 위해 인쇄물을 그룹화할 수 있습니다.

{ printf '%s\n' '\documentclass[10pt]{article}' \
              '\begin{document}'
printf '\input{%s}\n' *.tex
printf '%s\n' '\end{document}'
} > /path/of/output.tex

답변2

아마도 최고는 아니지만 파일 sed편집을 위한 all.tex솔루션 은 다음과 같습니다.

sed -e 's/^/\\input\{/g' -e 's/$/\}/g' all.tex

답변3

일반 Ubuntu에는 기본적으로 Perl이 설치되어 있으므로 다음을 수행할 수 있습니다.

ls *tex | perl -pne 's/(.*)/\\input{$1}/' > allfiles.tex

아직 Windows의 Ubuntu에 설치되지 않았을 수도 있습니다. 그렇다면 apt-get install perl-base괜찮습니다.

편집하다:Perl을 사용할 수 없고 설치하고 싶지 않다면 sed를 사용할 수도 있습니다.

ls *tex | sed 's/\(.*tex\)/\\input{\1}/' > allfiles.tex

(그러나 나는 항상 더 강력한 Perl을 추천합니다)

답변4

GNU 사용 awk:

awk '
    BEGIN     { print "\\documentclass[10pt]{article}"
                print "\\begin{document}" }
    BEGINFILE { printf("\\include{%s}\n", FILENAME); nextfile }
    END       { print "\\end{document}" }' *.tex

그러면 표시된 것과 같은 목록이 생성됩니다. 여기서 파일은 셸의 확장된 파일 이름 와일드카드 패턴 순서대로 나열됩니다 *.tex.

file1.tex이름이 to 인 파일의 경우 file95.tex이는 다음과 같습니다.아니요번호순으로. 이렇게 하려면 셸로 전환 하고 globbing 모드나 좀 더 편안한 모드를 zsh사용해야 할 수도 있습니다 .file<1-95>.tex*.tex(n)

관련 정보