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 {}を追加するにはどうすればよいですか?序文などをどのように追加しますか?
使っていますバッシュ(Ubuntuから)Windows 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)