
| Current Path : /bin/X11/X11/ |
Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Current File : //bin/X11/X11/multibibliography |
#!/usr/bin/perl
# Usage: perl multibibliography.pl jobname
# By Yannis Haralambous and Michael Cohen
# Changes by Boris Veytsman, $Revision: 1.6 $, $Date: 2013-06-25 03:37:30 $
# This perl script does the bibtexing part, generating 3 separate .bbl
# files with descriptive names derived from source file name, so no
# need to separately invoke.
use strict;
sub cleanup {
local $/=undef;
my $file = shift;
open IN, $file;
my $BIG=<IN>;
close IN;
$BIG=~s/(\r\n|\r|\n)/ /g;
$BIG=~s/\\bibitem/\n\n\\bibitem/g;
$BIG=~s/\\newblock/\n\\newblock/g;
$BIG=~s/\\end\{thebibliography\}/\n\n\\end{thebibliography}/g;
$BIG=~s/[ ]+/ /g;
open OUT, ">$file";
print OUT $BIG;
close OUT;
}
# First, change "apalike" in the aux file to "unsrt" and generate bbl
# file, renamed to "fn-sequence.bbl".
my $filename=$ARGV[0];
$filename=~s/\.(tex|bib|bbl|aux|log)$//;
if (-e $filename.".aux") {
open IN, $filename.".aux";
my $BIG="";
while (<IN>) {
if (m/\\bibstyle\{apalike\}/) {
$BIG .= "\\bibstyle{unsrt}\n";
} else {
$BIG .= $_;
}
}
close IN;
open OUT, "> $filename-sequence.aux";
print OUT $BIG;
close OUT;
system("bibtex $filename-sequence");
# Now, change "unsrt" in the aux file to "chronological"
# and generate bbl file, renamed to "fn-timeline.bbl".
open IN, "$filename-sequence.aux";
$BIG="";
while (<IN>) {
if (m/\\bibstyle\{unsrt\}/) {
$BIG .= "\\bibstyle{chronological}\n";
} else {
$BIG .= $_;
}
}
close IN;
open OUT, "> $filename-timeline.aux";
print OUT $BIG;
close OUT;
system("bibtex $filename-timeline");
# Lastly, change "chronological" in the aux file to "apalike"
# and generate bbl file, retaining name "fn.bbl".
open IN, "$filename-timeline.aux";
$BIG="";
while (<IN>) {
if (m/\\bibstyle\{chronological\}/) {
$BIG .= "\\bibstyle{apalike}\n";
} else {
$BIG .= $_;
}
}
close IN;
open OUT, "> $filename.aux";
print OUT $BIG;
close OUT;
system("bibtex $filename");
cleanup("$filename.bbl");
cleanup("$filename-sequence.bbl");
cleanup("$filename-timeline.bbl");
open IN, "$filename-sequence.bbl";
my $counter=1;
my %UNSRT;
my %DATE;
my %NAME;
while (<IN>) {
if (m/\\bibitem{([^\}]+?)}/) {
$UNSRT{$1}=$counter;
$counter++;
}
}
close IN;
open IN, $filename.".bbl";
$counter=1;
while (<IN>) {
if (m/\\bibitem\[([^\]]+)\]{([^}]+?)}/) {
my $longdesc=$1;
my $label=$2;
if ($longdesc =~ /^(.*),\s+(\S+)$/) {
$NAME{$label}=$1;
$DATE{$label}=$2;
}
}
}
close IN;
open IN, $filename."-sequence.bbl";
$counter=1;
$BIG="";
while (<IN>) {
if (s/\\bibitem{(.+?)}/\\bibitem[\\MBlabel{$counter}{$NAME{$1}}{$DATE{$1}}]{$1}\n/) {
$counter++;
}
$BIG .= $_;
}
close IN;
open OUT, "> $filename-sequence.bbl";
print OUT $BIG;
close OUT;
open IN, $filename.".bbl";
$BIG="";
while (<IN>) {
s/\\bibitem\[[^\]]+\]{(.+?)}/\\bibitem[\\MBlabel{$UNSRT{$1}}{$NAME{$1}}{$DATE{$1}}]{$1}/;
$BIG .= $_;
}
close IN;
open OUT, ">$filename.bbl";
print OUT $BIG;
close OUT;
open IN, $filename."-timeline.bbl";
$BIG="";
while (<IN>) {
s/\\bibitem\[[^\]]+\]{(.+?)}/\\bibitem[\\MBlabel{$UNSRT{$1}}{$NAME{$1}}{$DATE{$1}}]{$1}/;
$BIG .= $_;
}
close IN;
open OUT, ">$filename-timeline.bbl";
print OUT $BIG;
close OUT;
}