我有一个主 TeX 文件,它输入许多其他 TeX 文件,例如
\documentclass{article}
\begin{document}
\input{input1.tex}
\input{input2.tex}
\input{input3.tex}
\end{document}
假设上面的文件我想要一个从、和main.tex
导入内容的单个 TeX 文件,这样我就只有一个 TeX 文件,而不是上面的四个 TeX 文件。input1.tex
input2.tex
input3.tex
答案1
我不确定 Herbert 的脚本是否“在一次递归调用中工作”。在我对递归的解释中,我假设如果其中一个文件input*.tex
本身包含\input{}
请求,我们希望它在一次调用中工作。
我本来想在上面发表评论来询问此事,但我没有声誉。
我使用相同的执行语法通过 gawk 创建了一个脚本:
#! /bin/gawk -f
BEGIN{
FS="\\input{|}"
}{
regex="(%*)(.*)\\input{(.*)}";
if(match($0,regex,a)){
file = a[3];
if(a[1]==""){
match(file,".tex",b);
if(RLENGTH<0){
system("./recursiveInput.awk "file".tex");
}
else{
system("./recursiveInput.awk "file);
}
}
}
else{
print $0
}
}
这有优点那:
- 它确实是一次性递归的(在我的解释中)
- 它避免使用 perl
chomp()
,但chop()
会产生不良影响(就我而言),即不能忠实地再现空白行(有时在 TeX 中用于段落划分) %
它会忽略语句前带有 的行\input{}
,这些行是\input{}
命令被注释掉的行。
这有缺点那:
- 我只为
\input{}
和实现了它不是声明\include{}
答案2
这是一个可以实现这一点的 Perl 脚本。它替换了所有包含的文件通过 \input
和\include
语句及其内容。要使用它,请运行:
./buildFile.pl < main.tex > main_all.tex
脚本如下(buildFile.pl
):
#!/usr/bin/env perl
sub p_inc {
$DateiName = shift;
if ( open (my $datei, "$DateiName.tex") ) {
print "%%%---------- open: ", $DateiName, "\n";
while (<$datei>) {
if ((/^\s*\\include\{\s*(\S+)/i) or (/^\s*\\input\{\s*(\S+)/i)) {
my $include = $1;
chomp($include);
chop($include);
print "%%%%%%%%% jump to ", $include, "\n";
p_inc($include);
} else { print; }
}
print "%%%---------- close: ", $DateiName, "\n";
close $datei;
} else { print "%%%<===== file doesn't exist\n"; }
}
@zeilen = (<>);
for $zeile (@zeilen) {
next if $zeile =~ /^\s*(%)/;
if (($zeile =~ /^\s*\\include\{\s*(\S+)/i) or ($zeile =~ /^\s*\\input\{\s*(\S+)/i)) {
my $include = $1;
chomp($include); # remove trailing whitespace
chop($include); # remove '}' from the matched string
print "%%%%%%%%%%% jump to ", $include, "\n";
p_inc($include);
} else { print $zeile; }
}
答案3
虽然我从来没有用过它,bundledoc
包裹似乎提供了此功能。从软件包描述来看:
该
bundledoc
包是snapshot
包裹它将构建给定 LaTeX 文档所需的所有类、包和文件捆绑在一起。它读取生成的.dep
文件snapshot
,找到其中提到的每个文件,并将它们存档为单个.tar.gz
(或.zip
,或任何其他)文件,适合跨系统移动、传输给同事等。脚本
arlatex
提供了一种替代的“归档”机制,使用环境创建一个包含 LaTeX 文档的所有辅助文件以及文档本身的单个 LaTeX 文件filecontents*
。