我正在写一篇由多个部分组成的文章。对于每个部分,我或多或少都有一个单独的 tex 文件,它们位于主文件中。我现在要提交的期刊要求我将所有文件集成到一个文件中。我只是想知道,这不是很糟糕的做法吗?我的意思是,LaTeX 提供命令include
是有原因的。include
这不是一个很大的问题,我只是希望听到一些意见。
答案1
作为一种一般做法,我喜欢用它\include
来保持一切干净整洁,特别是因为它允许我只包含我想要的文件。
也就是说,当您有一个很大的文档时,您可以使用\includeonly{chapter1,chapter2}
,这样可以忽略其余内容,只编译第 1 章和第 2 章。
现在,如果他们要求您将所有内容放在一个文件中,只需遵守...也许是因为文件存储的目的而要求这样做(或者也许他们只是不想将很多文件与一个作者相关联)。
无论如何,你也可以看看这篇文章何时应使用 \input 和 \include?了解有关\include
和几个文件项目的更多信息。
答案2
他们可能在出版过程中不使用 TeX,而是(最有可能 - 您是在谈论 AIP 期刊吗?)使用 XML。他们可能有将输入转换为 XML 的脚本 - 以考虑所有可能发生的情况的方式编写它们很麻烦。
我使用 pgfplots 和 tikz 来绘制图表,因此提交时必须将所有内容合并到一个文件中。我编写了一个 perl 脚本,用于解析 csv 输入文件并输出 LaTeX 代码。但最终,我不得不将所有图形提交为 pdf:他们的 TeX 引擎阻塞了我的文件,尽管所有其他在线编译器和我的本地安装都运行正常。无法让它工作...
无论如何,如果您感兴趣的话,这里有一个 perl 脚本。请记住:它只解析文件并输出 LaTeX 代码 - 它实际上并没有组合所有代码片段。它快速而粗糙,但如果您想尝试一下,这是一个很好的起点。
我的建议:只需将 biblatex 和所有其他内容复制到一个文件中作为最后一步,然后将图形作为 PDF 提交。
#! C:/Programme/Perl/bin/perl -w
use strict;
unless(@ARGV<1){ # Check if input file is given as a commandline argument
open(FILE,"<".$ARGV[0]) or die("Error reading file: ".$ARGV[0]." ".$!);
my $textraw="";
while(<FILE>){$textraw.=$_;}
close(FILE) or die("Error closing file: ".$ARGV[0]." ".$!);
my $patternMatch;
my @addplot;
my $n=0;
while($textraw =~ /(\\addplot.*?)table\[(.*?)?,?\s?x expr\=(.*?),y expr\=(.*?)\]\n\s+\{([^\}]*)\}/sg){
$patternMatch++;
my $plotCommand=$1;
my $skipRows=$2;
my @xCol;
$xCol[0]=$3;
my @yCol;
$yCol[0]=$4;
my $DataFileName=$5;
if($skipRows){$skipRows=~s/skip first n=(\d)/$1/g;}
else{$skipRows=0;}
open(FILE,"<".$DataFileName) or die("Error reading file: ".$DataFileName." ".$!);
my $i;
#$addplot[$n]=$1."coordinates {";
print $1."coordinates {";
LINE:while(<FILE>){
my $xCoord;
my $yCoord;
chomp($_);
$i++;
if($i<=$skipRows){next LINE;}
if(($xCol[0]=~m/\\thisrow\{/)||($yCol[0]=~m/\\thisrow\{/)){
# I was going to put logic here to account for people using \thisrow.
# Screw this - it's too much hassle. Please use \thisrowno
die("Error: \thisrow{} detected - unable to parse. Please change LaTeX source to \thisrowno.");
}
my $xColStack=0;
my $xOperator="+";
my $xColTmp=$xCol[0];
while($xColTmp=~/\\thisrowno\{(.*?)\}(.*)?/g){
my $columnIndex=$1;
my $additionalDirectives=$2;
$xColTmp=$additionalDirectives;
$_=~m/\s*(\S*)\s*(\S*)\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?/;
my %selectColumn = (
0 => $1,
1 => $2,
2 => $3,
3 => $4,
4 => $5,
5 => $6,
6 => $7,
7 => $8,
8 => $9,
9 => $10,
10 => $11,
11 => $12,
12 => $13,
13 => $14,
14 => $15
);
if($xOperator eq "+"){
$xColStack+=$selectColumn{$columnIndex};
}
else{
die("Unsupported operator - you have to implement it yourself. I only added \"+\".")
}
if($additionalDirectives=~/(.)?\d?\\thisrowno/){
$xOperator=$1;
}
elsif($additionalDirectives=~/(.)\s*?(\d*)/){
#die "[".$additionalDirectives."]";
#$xColStack=$xColStack;
die("There are some additional operations to be executed on the data, namely: $additionalDirectives \n Please use awk to format the data as this cannot be parsed. awk usage is as follows:\n gawk \"{\$1=\$1*1000;\$2=\\\"\\\";$\3=$\3*12e-3*1e-6/284;print}\" file.in > file.out");
}
}
#$addplot[$n].="(".$xColStack.",";
print "(".$xColStack.",";
my $yColStack=0;
my $yOperator="+";
my $yColTmp=$yCol[0];
while($yColTmp=~/\\thisrowno\{(.*?)\}(.*)?/g){
my $columnIndex=$1;
my $additionalDirectives=$2;
print $2;
$yColTmp=$additionalDirectives;
$_=~m/\s*(\S*)\s*(\S*)\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?\s*(\S*)?/;
my %selectColumn = (
0 => $1,
1 => $2,
2 => $3,
3 => $4,
4 => $5,
5 => $6,
6 => $7,
7 => $8,
8 => $9,
9 => $10,
10 => $11,
11 => $12,
12 => $13,
13 => $14,
14 => $15
);
if($yOperator eq "+"){
$yColStack+=$selectColumn{$columnIndex};
}
else{
die("Unsupported operator - you have to implement it yourself. I only added \"+\".")
}
if($additionalDirectives=~/(.)?\d?\\thisrowno/){
$yOperator=$1;
}
elsif($additionalDirectives=~/(.)\s*?(\d*)/){
#die "[".$additionalDirectives."]";
#$xColStack=$xColStack;
}
}
#$addplot[$n].=$yColStack.")";
print $yColStack.")";
}
#$addplot[$n].="};";
print "};\n\n";
close(FILE) or die("Error closing file: ".$DataFileName." ".$!);
#$n++;
}
#$n=0;
#while($textraw =~ /(\\addplot.*?)table\[.*?\]\n\s+\{.*?\}/sg){
#
# $n++;
#}
}
else{print "Error: no input file given!\n\nUsage: $0 inputfile.\n";}