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)