summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2014-10-19 22:36:21 +0000
committerKarl Berry <karl@freefriends.org>2014-10-19 22:36:21 +0000
commit85fe62616c2d0cda42038452c38374f1cf5d855a (patch)
tree45a4890dc18b6bd0d1e6142eeebf19ee293c10a3
parentc07d0b959c7e9bbc2b3beeeab1ebf9ab11489255 (diff)
crossrefware (19oct14)
git-svn-id: svn://tug.org/texlive/trunk@35401 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/texk/texlive/linked_scripts/Makefile.am3
-rw-r--r--Build/source/texk/texlive/linked_scripts/Makefile.in3
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/crossrefware/bibdoiadd.pl267
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/crossrefware/bibzbladd.pl215
-rwxr-xr-xBuild/source/texk/texlive/linked_scripts/crossrefware/ltx2crossrefxml.pl460
l---------Master/bin/alpha-linux/bibdoiadd1
l---------Master/bin/alpha-linux/bibzbladd1
l---------Master/bin/alpha-linux/ltx2crossrefxml1
l---------Master/bin/amd64-freebsd/bibdoiadd1
l---------Master/bin/amd64-freebsd/bibzbladd1
l---------Master/bin/amd64-freebsd/ltx2crossrefxml1
l---------Master/bin/amd64-kfreebsd/bibdoiadd1
l---------Master/bin/amd64-kfreebsd/bibzbladd1
l---------Master/bin/amd64-kfreebsd/ltx2crossrefxml1
l---------Master/bin/amd64-netbsd/bibdoiadd1
l---------Master/bin/amd64-netbsd/bibzbladd1
l---------Master/bin/amd64-netbsd/ltx2crossrefxml1
l---------Master/bin/armel-linux/bibdoiadd1
l---------Master/bin/armel-linux/bibzbladd1
l---------Master/bin/armel-linux/ltx2crossrefxml1
l---------Master/bin/armhf-linux/bibdoiadd1
l---------Master/bin/armhf-linux/bibzbladd1
l---------Master/bin/armhf-linux/ltx2crossrefxml1
l---------Master/bin/i386-cygwin/bibdoiadd1
l---------Master/bin/i386-cygwin/bibzbladd1
l---------Master/bin/i386-cygwin/ltx2crossrefxml1
l---------Master/bin/i386-freebsd/bibdoiadd1
l---------Master/bin/i386-freebsd/bibzbladd1
l---------Master/bin/i386-freebsd/ltx2crossrefxml1
l---------Master/bin/i386-kfreebsd/bibdoiadd1
l---------Master/bin/i386-kfreebsd/bibzbladd1
l---------Master/bin/i386-kfreebsd/ltx2crossrefxml1
l---------Master/bin/i386-linux/bibdoiadd1
l---------Master/bin/i386-linux/bibzbladd1
l---------Master/bin/i386-linux/ltx2crossrefxml1
l---------Master/bin/i386-netbsd/bibdoiadd1
l---------Master/bin/i386-netbsd/bibzbladd1
l---------Master/bin/i386-netbsd/ltx2crossrefxml1
l---------Master/bin/i386-solaris/bibdoiadd1
l---------Master/bin/i386-solaris/bibzbladd1
l---------Master/bin/i386-solaris/ltx2crossrefxml1
l---------Master/bin/mipsel-linux/bibdoiadd1
l---------Master/bin/mipsel-linux/bibzbladd1
l---------Master/bin/mipsel-linux/ltx2crossrefxml1
l---------Master/bin/powerpc-linux/bibdoiadd1
l---------Master/bin/powerpc-linux/bibzbladd1
l---------Master/bin/powerpc-linux/ltx2crossrefxml1
l---------Master/bin/sparc-solaris/bibdoiadd1
l---------Master/bin/sparc-solaris/bibzbladd1
l---------Master/bin/sparc-solaris/ltx2crossrefxml1
l---------Master/bin/universal-darwin/bibdoiadd1
l---------Master/bin/universal-darwin/bibzbladd1
l---------Master/bin/universal-darwin/ltx2crossrefxml1
-rwxr-xr-xMaster/bin/win32/bibdoiadd.exebin0 -> 1536 bytes
-rwxr-xr-xMaster/bin/win32/bibzbladd.exebin0 -> 1536 bytes
-rwxr-xr-xMaster/bin/win32/ltx2crossrefxml.exebin0 -> 1536 bytes
l---------Master/bin/x86_64-cygwin/bibdoiadd1
l---------Master/bin/x86_64-cygwin/bibzbladd1
l---------Master/bin/x86_64-cygwin/ltx2crossrefxml1
l---------Master/bin/x86_64-darwin/bibdoiadd1
l---------Master/bin/x86_64-darwin/bibzbladd1
l---------Master/bin/x86_64-darwin/ltx2crossrefxml1
l---------Master/bin/x86_64-linux/bibdoiadd1
l---------Master/bin/x86_64-linux/bibzbladd1
l---------Master/bin/x86_64-linux/ltx2crossrefxml1
l---------Master/bin/x86_64-solaris/bibdoiadd1
l---------Master/bin/x86_64-solaris/bibzbladd1
l---------Master/bin/x86_64-solaris/ltx2crossrefxml1
-rw-r--r--Master/texmf-dist/doc/man/man1/bibdoiadd.1194
-rw-r--r--Master/texmf-dist/doc/man/man1/bibdoiadd.man1.pdfbin0 -> 5708 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/bibzbladd.1162
-rw-r--r--Master/texmf-dist/doc/man/man1/bibzbladd.man1.pdfbin0 -> 4470 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/ltx2crossrefxml.1180
-rw-r--r--Master/texmf-dist/doc/man/man1/ltx2crossrefxml.man1.pdfbin0 -> 5005 bytes
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/Makefile40
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/README17
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/aomsample.bib277
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/citations.bib811
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/crossrefware.pdfbin0 -> 134733 bytes
-rw-r--r--Master/texmf-dist/doc/support/crossrefware/head.ltx28
-rwxr-xr-xMaster/texmf-dist/scripts/crossrefware/bibdoiadd.pl267
-rwxr-xr-xMaster/texmf-dist/scripts/crossrefware/bibzbladd.pl215
-rwxr-xr-xMaster/texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl460
-rw-r--r--Master/texmf-dist/tex/latex/crossrefware/bibdoiadd.cfg9
-rw-r--r--Master/texmf-dist/tex/latex/crossrefware/ltx2crossrefxml.cfg22
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check2
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds4
-rw-r--r--Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/crossrefware.tlpsrc8
89 files changed, 3703 insertions, 2 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.am b/Build/source/texk/texlive/linked_scripts/Makefile.am
index 033eb06b2eb..d55a854cabb 100644
--- a/Build/source/texk/texlive/linked_scripts/Makefile.am
+++ b/Build/source/texk/texlive/linked_scripts/Makefile.am
@@ -85,6 +85,9 @@ texmf_other_scripts = \
checkcites/checkcites.lua \
context/perl/mptopdf.pl \
convbkmk/convbkmk.rb \
+ crossrefware/bibdoiadd.pl \
+ crossrefware/bibzbladd.pl \
+ crossrefware/ltx2crossrefxml.pl \
ctanify/ctanify \
ctanupload/ctanupload.pl \
de-macro/de-macro \
diff --git a/Build/source/texk/texlive/linked_scripts/Makefile.in b/Build/source/texk/texlive/linked_scripts/Makefile.in
index ba63d1db542..da0994089d8 100644
--- a/Build/source/texk/texlive/linked_scripts/Makefile.in
+++ b/Build/source/texk/texlive/linked_scripts/Makefile.in
@@ -293,6 +293,9 @@ texmf_other_scripts = \
checkcites/checkcites.lua \
context/perl/mptopdf.pl \
convbkmk/convbkmk.rb \
+ crossrefware/bibdoiadd.pl \
+ crossrefware/bibzbladd.pl \
+ crossrefware/ltx2crossrefxml.pl \
ctanify/ctanify \
ctanupload/ctanupload.pl \
de-macro/de-macro \
diff --git a/Build/source/texk/texlive/linked_scripts/crossrefware/bibdoiadd.pl b/Build/source/texk/texlive/linked_scripts/crossrefware/bibdoiadd.pl
new file mode 100755
index 00000000000..b9be8dec824
--- /dev/null
+++ b/Build/source/texk/texlive/linked_scripts/crossrefware/bibdoiadd.pl
@@ -0,0 +1,267 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+bibdoiadd.pl - add DOI numbers to papers in a given bib file
+
+=head1 SYNOPSIS
+
+bibdoiadd [B<-c> I<config_file>] [B<-o> I<output>] I<bib_file>
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c> I<config_file>
+
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the name for the
+output file is formed by adding C<_doi> to the input file
+
+=back
+
+=head1 DESCRIPTION
+
+The script reads a BibTeX file. It checks whether the entries have
+DOIs. If now, tries to contact http://www.crossref.org to get the
+corresponding DOI. The result is a BibTeX file with the fields
+C<doi=...> added.
+
+The name of the output file is either set by the B<-o> option or
+is derived by adding the suffix C<_doi> to the output file.
+
+There are two options for making queries with Crossref: free account
+and paid membership. In the first case you still must register with
+Crossref and are limited to a small number of queries, see the
+agreement at
+C<http://www.crossref.org/01company/free_services_agreement.html>. In
+the second case you have a username and password, and can use them for
+automatic queries. I am not sure whether the use of this script is
+allowed for the free account holders. Anyway if you try to add DOI
+to a large number of entries, you should register as a paid member.
+
+
+
+=head1 CONFIGURATION FILE
+
+The configuration file is mostly self-explanatory: it has comments
+(starting with C<#>) and assginments in the form
+
+ $field = value ;
+
+The important parameters are C<$mode> (C<'free'> or C<'paid'>,
+C<$email> (for free users) and C<$username> & C<$password> for paid
+members.
+
+
+=head1 EXAMPLES
+
+ bibdoiadd -c bibdoiadd.cfg citations.bib > result.bib
+ bibdoiadd -c bibdoiadd.cfg citations.bib -o result.bib
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+=cut
+
+use strict;
+use Text::BibTeX;
+use Text::BibTeX::Name;
+use Getopt::Std;
+use URI::Escape;
+use LWP::Simple;
+use TeX::Encode;
+use Encode;
+use HTML::Entities;
+use XML::Entities;
+
+my $USAGE="USAGE: $0 [-c config] [-o output] file\n";
+my $VERSION = <<END;
+bibdoiadd v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+my %opts;
+getopts('c:o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+################################################################
+# Defaults and parameters
+################################################################
+
+my $inputfile = shift;
+
+my $outputfile = $inputfile;
+
+$outputfile =~ s/\.([^\.]*)$/_doi.$1/;
+
+if ($opts{o}) {
+ $outputfile = $opts{o};
+}
+
+our $mode='free';
+our $email;
+our $username;
+our $password;
+
+if ($opts{c}) {
+ if (-r $opts{c}) {
+ push @INC, ".";
+ require $opts{c};
+ } else {
+ die "Cannot read options $opts{c}. $USAGE";
+ }
+}
+
+
+# Check the consistency
+
+if ($mode eq 'free' && !length($email)) {
+ die "Crossref requires a registered e-mail for the free mode queries\n";
+}
+
+if ($mode eq 'paid' && (!length($username) || !length($password))) {
+ die
+ "Crossref requires a username and password for the paid mode queries\n";
+}
+
+my $input = new Text::BibTeX::File "$inputfile" or
+ die "Cannot BibTeX file $inputfile\n";
+my $output = new Text::BibTeX::File "> $outputfile" or
+ die "Cannot write to $outputfile\n";
+
+my $prefix =
+ "http://www.crossref.org/openurl?redirect=false";
+if ($mode eq 'free') {
+ $prefix .= '&pid='.uri_escape($email);
+} else {
+ $prefix .= '&pid='.uri_escape($username).":".
+ uri_escape($password);
+}
+
+# Processing the input
+while (my $entry = new Text::BibTeX::Entry $input) {
+ if (!$entry->parse_ok()) {
+ print STDERR "Cannot understand entry: ";
+ $entry->print(*STDERR);
+ print STDERR "Skipping this entry\n";
+ next;
+ }
+ if (!(($entry->metatype() eq BTE_REGULAR) &&
+ ($entry->type() eq 'article'))) {
+ $entry->write($output);
+ next;
+ }
+ if ($entry->exists('doi')) {
+ $entry->write($output);
+ next;
+ }
+
+
+ # Now we have an entry with no doi. Let us get to work.
+ my $doi = GetDoi($prefix,$entry);
+ if (length($doi)) {
+ $entry->set('doi',$doi);
+ }
+ $entry->write($output);
+
+}
+
+$input->close();
+$output->close();
+exit 0;
+
+###############################################################
+# Getting one doi
+###############################################################
+
+sub GetDoi {
+ my ($url,$entry) = @_;
+ if ($entry->exists('issn')) {
+ $url .= "&issn=".uri_escape(SanitizeText($entry->get('issn')));
+ }
+ if ($entry->exists('journal')) {
+ $url .= "&title=".uri_escape(SanitizeText($entry->get('journal')));
+ }
+ my @names=$entry->names ('author');
+ if (scalar(@names)) {
+ my @lastnames = $names[0]->part ('last');
+ if (scalar(@lastnames)) {
+ my $lastname = SanitizeText(join(' ',@lastnames));
+ $url .= "&aulast=".uri_escape($lastname);
+ }
+ }
+ if ($entry->exists('volume')) {
+ $url .= "&volume=".uri_escape($entry->get('volume'));
+ }
+ if ($entry->exists('number')) {
+ $url .= "&issue=".uri_escape($entry->get('number'));
+ }
+ if ($entry->exists('pages')) {
+ my $pages=$entry->get('pages');
+ $pages =~ s/-.*$//;
+ $url .= "&spage=".uri_escape($pages);
+ }
+ if ($entry->exists('year')) {
+ $url .= "&date=".uri_escape($entry->get('year'));
+ }
+
+ my $result=get($url);
+
+ if ($result =~ m/<doi [^>]*>(.*)<\/doi>/) {
+ return $1;
+ } else {
+ return "";
+ }
+}
+
+###############################################################
+# Sanitization of a text string
+###############################################################
+sub SanitizeText {
+ my $string = shift;
+ # There is a bug in the decode function, which we need to work
+ # around: it adds space to constructions like \o x
+ $string =~ s/(\\[a-zA-Z])\s+/$1/g;
+ $string =~ s/\\newblock//g;
+ $string =~ s/\\urlprefix//g;
+ $string =~ s/\\emph//g;
+ $string =~ s/\\enquote//g;
+ $string =~ s/\\url/URL: /g;
+ $string =~ s/\\doi/DOI: /g;
+ $string =~ s/\\\\/ /g;
+ $string = decode('latex', $string);
+ $string =~ s/\\[a-zA-Z]+/ /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/[\[\{\}\]]/ /g;
+ $string = encode_entities($string);
+ $string = XML::Entities::numify('all', $string);
+ $string =~ s/amp;//g;
+ $string =~ s/~/ /g;
+ $string =~ s/\s*([\.;,])/$1/g;
+ return $string;
+}
diff --git a/Build/source/texk/texlive/linked_scripts/crossrefware/bibzbladd.pl b/Build/source/texk/texlive/linked_scripts/crossrefware/bibzbladd.pl
new file mode 100755
index 00000000000..4059b7b0a12
--- /dev/null
+++ b/Build/source/texk/texlive/linked_scripts/crossrefware/bibzbladd.pl
@@ -0,0 +1,215 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+bibzbladd.pl - add Zbl numbers to papers in a given bib file
+
+=head1 SYNOPSIS
+
+bibzbladd [B<-o> I<output>] I<bib_file>
+
+=head1 OPTIONS
+
+=over 4
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the name for the
+output file is formed by adding C<_zbl> to the input file
+
+=back
+
+=head1 DESCRIPTION
+
+The script reads a BibTeX file. It checks whether the entries have
+Zbls. If now, tries to contact internet to get the numbers. The
+result is a BibTeX file with the fields
+C<zblnumber=...> added.
+
+The name of the output file is either set by the B<-o> option or
+is derived by adding the suffix C<_zbl> to the output file.
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+=cut
+
+use strict;
+use Text::BibTeX;
+use Text::BibTeX::Name;
+use Getopt::Std;
+use URI::Escape;
+use LWP::UserAgent;
+use TeX::Encode;
+
+my $USAGE="USAGE: $0 [-o output] file\n";
+my $VERSION = <<END;
+bibzbladd v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+my %opts;
+getopts('o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+################################################################
+# Defaults and parameters
+################################################################
+
+my $inputfile = shift;
+
+my $outputfile = $inputfile;
+
+$outputfile =~ s/\.([^\.]*)$/_zbl.$1/;
+
+if ($opts{o}) {
+ $outputfile = $opts{o};
+}
+
+my $input = new Text::BibTeX::File "$inputfile" or
+ die "Cannot BibTeX file $inputfile\n";
+my $output = new Text::BibTeX::File "> $outputfile" or
+ die "Cannot write to $outputfile\n";
+
+
+# Creating the HTTP parameters
+my $mirror =
+ "http://www.zentralblatt-math.org/MIRROR/zmath/en/search/";
+my $userAgent = LWP::UserAgent->new;
+
+# Processing the input
+while (my $entry = new Text::BibTeX::Entry $input) {
+ if (!$entry->parse_ok()) {
+ print STDERR "Cannot understand entry: ";
+ $entry->print(*STDERR);
+ print STDERR "Skipping this entry\n";
+ next;
+ }
+ if (!(($entry->metatype() eq BTE_REGULAR))) {
+ $entry->write($output);
+ next;
+ }
+ if ($entry->exists('zblnumber')) {
+ $entry->write($output);
+ next;
+ }
+
+
+ # Now we have an entry with no Zbl. Let us get to work.
+ my $zbl = GetZbl($entry, $userAgent, $mirror);
+ if (length($zbl)) {
+ $entry->set('zblnumber',$zbl);
+ }
+ $entry->write($output);
+
+}
+
+$input->close();
+$output->close();
+exit 0;
+
+###############################################################
+# Getting one Zbl
+###############################################################
+
+sub GetZbl {
+ my $entry=shift;
+ my $userAgent=shift;
+ my $mirror=shift;
+
+ my @query;
+
+ my @names=$entry->names ('author');
+ if (scalar(@names)) {
+ foreach my $name (@names) {
+ my @lastnames = $name->part ('last');
+ if (scalar(@lastnames)) {
+ foreach my $lastname (@lastnames) {
+ push @query, "au:$lastname";
+ }
+ }
+ }
+ }
+ if (my $title = $entry->get('title')) {
+ push @query, "ti:$title";
+ }
+
+ if (my $year = $entry->get('year')) {
+ push @query, "py:$year";
+ }
+
+ if (my $year = $entry->get('year')) {
+ push @query, "py:$year";
+ }
+
+ my $type = $entry->type;
+ if ($type eq 'article') {
+ push @query, "dt:j";
+ }
+ if ($type eq 'book') {
+ push @query, "dt:b";
+ }
+ if ($type eq 'inproceedings' || $type eq 'incollection') {
+ push @query, "dt:a";
+ }
+
+ my $source = "";
+ if ($type eq 'article') {
+ if ($entry->get('journal')) {
+ $source .= $entry->get('journal');
+ }
+ if (my $vol=$entry->get('volume')) {
+ $source .= ",$vol";
+ }
+ if (my $pages=$entry->get('pages')) {
+ $source .= ",$pages";
+ }
+ } else {
+ if (my $bt=$entry->get('booktitle')) {
+ $source .= "$bt";
+ }
+ }
+
+ if ($source) {
+ push @query, "so:$source";
+ }
+
+
+ my $qstring = join(" & ", @query);
+# print STDERR "$qstring\n";
+
+ my $form;
+
+ $form->{name}='form';
+ $form->{q} = $qstring;
+ $form->{type} = "ascii";
+ $form->{submit} = 'Search';
+
+ my $response = $userAgent->post($mirror, $form);
+ if ($response->decoded_content =~ /^an:\s*Zbl\s*(\S+)\s*$/m) {
+ return $1;
+ } else {
+ return ("");
+ }
+}
+
diff --git a/Build/source/texk/texlive/linked_scripts/crossrefware/ltx2crossrefxml.pl b/Build/source/texk/texlive/linked_scripts/crossrefware/ltx2crossrefxml.pl
new file mode 100755
index 00000000000..5ceee5f13df
--- /dev/null
+++ b/Build/source/texk/texlive/linked_scripts/crossrefware/ltx2crossrefxml.pl
@@ -0,0 +1,460 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+ltx2crossrefxml.pl - a tool for creation of XML files for submitting to crossref.
+
+=head1 SYNOPSIS
+
+ltx2crossrefxml [B<-c> I<config_file>] [B<-o> I<output>] I<latex_file> I<latex_file> ...
+
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c> I<config_file>
+
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the XML is output to stdout.
+
+=back
+
+=head1 DESCRIPTION
+
+The script takes a number of latex files and produces an XML file
+ready for submission to Crossref. Each file must be previously processed
+by LaTeX with the newest C<resphilosophica> package: the package creates
+the file C<.rti> wtih the information about the bibliography.
+
+The processing of reference list is at present rather limited: only so
+called unstructured references are produced.
+
+=head1 CONFIGURATION FILE FORMAT
+
+The configuration file is mostly self-explanatory: it has comments
+(starting with C<#>) and assginments in the form
+
+ $field = value ;
+
+=head1 EXAMPLES
+
+ ltx2crossrefxml.pl ../paper1/paper1.tex ../paper2/paper2.tex -o result.xml
+
+ ltx2crossrefxml.pl -c myconfig.cnf paper.tex -o paper.xml
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2012 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+
+=cut
+
+ use strict;
+ use POSIX qw(strftime);
+ use Text::BibTeX;
+ use Text::BibTeX::Name;
+ use TeX::Encode;
+ use Encode;
+ use HTML::Entities;
+ use XML::Entities;
+ use File::Basename;
+ use File::Spec;
+ my $USAGE="USAGE: $0 [-c config] [-o output] file1 file2 ...\n";
+my $VERSION = <<END;
+ltx2crossrefxml v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+ use Getopt::Std;
+ my %opts;
+ getopts('c:o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+ ################################################################
+ # Defaults and parameters
+ ################################################################
+
+ *OUT=*STDOUT;
+
+ if (defined($opts{o})) {
+ open (OUT, ">$opts{o}") or die "Cannot open file $opts{o} for writing\n";
+ }
+
+
+ our $depositorName='DEPOSITOR_NAME';
+ our $depositorEmail='DEPOSITOR_EMAIL';
+ our $registrant='REGISTRANT';
+ our $fullTitle = "FULL TITLE";
+ our $abbrevTitle = "ABBR. Title.";
+ our $issn = "1234-5678";
+ our $coden = "CODEN";
+ our $batchId="ltx2crossref$$";
+ our $timestamp=strftime("%Y%m%d%H%M%S", gmtime);
+
+
+ if ($opts{c}) {
+ if (-r $opts{c}) {
+ require $opts{c};
+ } else {
+ die "Cannot read options $opts{c}. $USAGE";
+ }
+ }
+
+
+
+ PrintHead();
+
+ #
+ # The hash %papers. Keys year->vol->issue->number
+ #
+ my %papers;
+
+ foreach my $file (@ARGV) {
+ AddPaper($file);
+ }
+
+ foreach my $year (keys %papers) {
+ foreach my $volume (keys %{$papers{$year}}) {
+ foreach my $issue (keys %{$papers{$year}->{$volume}}) {
+ PrintIssueHead($year, $volume, $issue);
+ my $paperList = $papers{$year}->{$volume}->{$issue};
+ foreach my $paper (@{$paperList}) {
+ PrintPaper($paper);
+ }
+ }
+ }
+
+ }
+
+ PrintTail();
+
+ exit(0);
+
+
+#####################################################
+# Printing the head and the tail
+#####################################################
+
+sub PrintHead {
+
+
+ print OUT <<END;
+<doi_batch xmlns="http://www.crossref.org/schema/4.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.3.0" xsi:schemaLocation="http://www.crossref.org/schema/4.3.0 http://www.crossref.org/schema/deposit/crossref4.3.0.xsd">
+ <head>
+ <doi_batch_id>$batchId</doi_batch_id>
+ <timestamp>$timestamp</timestamp>
+ <depositor>
+ <name>$depositorName</name>
+ <email_address>$depositorEmail</email_address>
+ </depositor>
+ <registrant>$registrant</registrant>
+ </head>
+ <body>
+ <journal>
+ <journal_metadata language="en">
+ <full_title>$fullTitle</full_title>
+ <abbrev_title>$abbrevTitle</abbrev_title>
+ <issn>$issn</issn>
+ <coden>$coden</coden>
+ </journal_metadata>
+END
+
+}
+
+sub PrintTail {
+ print OUT <<END;
+ </journal>
+ </body>
+</doi_batch>
+END
+
+return;
+}
+
+
+#######################################################
+# Adding one paper
+#######################################################
+
+sub AddPaper {
+ my $file = shift;
+ my ($name,$path,$suffix) = fileparse($file, '\.[^\.]*$');
+ my $rpifile = File::Spec->catfile($path, "$name.rpi");
+ open (RPI, $rpifile) or die
+ "Cannot find $rpifile. Did you process $file?\n";
+ my %data;
+ while (<RPI>) {
+ chomp;
+ if (/^%([^=]*)\s*=\s*(.*)\s*$/) {
+ $data{$1}=$2;
+ }
+ }
+ close RPI;
+ my @bibliography;
+ foreach my $bibfile ($file, File::Spec->catfile($path, "$name.bbl")) {
+ @bibliography = (@bibliography,
+ AddBibliography($bibfile));
+ }
+ $data{'bibliography'}=\@bibliography;
+ push @{$papers{$data{year}}->{$data{volume}}->{$data{issue}}}, \%data;
+}
+
+##############################################################
+# Reading a list of papers and adding it to the
+# bibliography
+##############################################################
+
+sub AddBibliography {
+ my $bibfile = shift;
+ open (BIB, $bibfile) or return;
+ my $insidebibliography = 0;
+ my $currpaper="";
+ my @result;
+ my $key;
+ while (<BIB>) {
+ chomp;
+ if (/^\s*\\bibitem(?:\[.*\])?+\{(.+)\}/) {
+ if ($insidebibliography) {
+ if ($currpaper) {
+ my %paperhash;
+ $paperhash{$key}=$currpaper;
+ push @result, \%paperhash;
+ }
+ }
+ $key = $1;
+ $currpaper="";
+ $insidebibliography=1;
+ next;
+ }
+ if (/^\s*\\end\{thebibliography\}/) {
+ if ($currpaper) {
+ my %paperhash;
+ $paperhash{$key}=$currpaper;
+ push @result, \%paperhash;
+ }
+ $currpaper="";
+ $insidebibliography=0;
+ next;
+ }
+ if ($insidebibliography) {
+ $currpaper .= " $_";
+ }
+ }
+ close BIB;
+ return @result;
+}
+
+#################################################################
+# Printing information about one issue
+#################################################################
+
+sub PrintIssueHead {
+ my ($year, $volume, $issue) = @_;
+ print OUT <<END;
+ <journal_issue>
+ <publication_date media_type="print">
+ <year>$year</year>
+ </publication_date>
+ <journal_volume>
+ <volume>$volume</volume>
+ </journal_volume>
+ <issue>$issue</issue>
+ </journal_issue>
+END
+}
+
+###############################################################
+# Printing information about one paper
+###############################################################
+sub PrintPaper {
+ my $paper = shift;
+ my $title=SanitizeText($paper->{title});
+ my $url=GetURL($paper);
+ print OUT <<END;
+ <journal_article publication_type="full_text">
+ <titles>
+ <title>
+ $title
+ </title>
+ </titles>
+ <contributors>
+END
+my @authors = split /\s*\\and\s*/, $paper->{authors};
+ my $seq='first';
+ foreach my $author (@authors) {
+ print OUT <<END;
+ <person_name sequence="$seq" contributor_role="author">
+END
+$seq='additional';
+ PrintAuthor($author);
+ print OUT <<END;
+ </person_name>
+END
+
+ }
+
+ print OUT <<END;
+ </contributors>
+ <publication_date media_type="print">
+ <year>$paper->{year}</year>
+ </publication_date>
+ <pages>
+ <first_page>$paper->{startpage}</first_page>
+ <last_page>$paper->{endpage}</last_page>
+ </pages>
+ <doi_data>
+ <doi>$paper->{doi}</doi>
+ <timestamp>$timestamp</timestamp>
+ <resource>$url</resource>
+ </doi_data>
+END
+
+if (scalar(@{$paper->{bibliography}})) {
+ print OUT <<END;
+ <citation_list>
+END
+ foreach my $citation (@{$paper->{bibliography}}) {
+ PrintCitation($citation);
+ }
+ print OUT <<END;
+ </citation_list>
+END
+}
+
+ print OUT <<END;
+ </journal_article>
+END
+
+
+}
+
+
+###############################################################
+# Sanitization of a text string
+###############################################################
+sub SanitizeText {
+ my $string = shift;
+ # There is a bug in the decode function, which we need to work
+ # around: it adds space to constructions like \o x
+ $string =~ s/(\\[a-zA-Z])\s+/$1/g;
+ $string =~ s/\\newblock//g;
+ $string =~ s/\\bgroup//g;
+ $string =~ s/\\egroup//g;
+ $string =~ s/\\scshape//g;
+ $string =~ s/\\urlprefix//g;
+ $string =~ s/\\emph//g;
+ $string =~ s/\\textbf//g;
+ $string =~ s/\\enquote//g;
+ $string =~ s/\\url/URL: /g;
+ $string =~ s/\\doi/DOI: /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/\$//g;
+ $string = decode('latex', $string);
+ $string =~ s/\\[a-zA-Z]+/ /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/[\[\{\}\]]/ /g;
+ $string = encode_entities($string);
+ $string = XML::Entities::numify('all', $string);
+ $string =~ s/amp;//g;
+ $string =~ s/~/ /g;
+ $string =~ s/\s*([\.;,])/$1/g;
+ return $string;
+}
+
+################################################################
+# Printing one author
+################################################################
+sub PrintAuthor {
+ my $author=shift;
+
+ my $person=new Text::BibTeX::Name ($author);
+
+ if ($person->part('first')) {
+ my @tokens = $person->part('first');
+ my $line = join(" ", @tokens);
+ $line = SanitizeText($line);
+ print OUT <<END;
+ <given_name>$line</given_name>
+END
+
+ }
+
+ if ($person->part('last')) {
+ my $line = SanitizeText($person->part('last'));
+ print OUT <<END;
+ <surname>$line</surname>
+END
+
+ }
+
+ if ($person->part('jr')) {
+ my $line = SanitizeText($person->part('jr'));
+ print OUT <<END;
+ <suffix>$line</suffix>
+END
+
+ }
+
+}
+
+#############################################################
+# Printing citations
+#############################################################
+sub PrintCitation {
+ my $paperhash=shift;
+ foreach my $key (keys (%{$paperhash})) {
+ my $citation=$paperhash->{$key};
+ $citation=SanitizeText($citation);
+
+ print OUT <<END;
+ <citation key="$key">
+ <unstructured_citation>
+ $citation
+ </unstructured_citation>
+ </citation>
+END
+}
+
+}
+
+##############################################################
+# Calculating URL
+##############################################################
+
+sub GetURL {
+ my $paper = shift;
+
+ my $result;
+ if ($paper->{paperUrl}) {
+ $result= $paper->{paperUrl}
+ } else {
+ my $doi=$paper->{doi};
+ $result= 'http://www.pdcnet.org/oom/service?url_ver=Z39.88-2004&rft_val_fmt=&rft.imuse_synonym=resphilosophica&rft.DOI='.$doi.'&svc_id=info:www.pdcnet.org/collection';
+ }
+ $result =~ s/&/&#38;/g;
+ return $result;
+}
diff --git a/Master/bin/alpha-linux/bibdoiadd b/Master/bin/alpha-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/alpha-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/alpha-linux/bibzbladd b/Master/bin/alpha-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/alpha-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/alpha-linux/ltx2crossrefxml b/Master/bin/alpha-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/alpha-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/amd64-freebsd/bibdoiadd b/Master/bin/amd64-freebsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/amd64-freebsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-freebsd/bibzbladd b/Master/bin/amd64-freebsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/amd64-freebsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-freebsd/ltx2crossrefxml b/Master/bin/amd64-freebsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/amd64-freebsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/amd64-kfreebsd/bibdoiadd b/Master/bin/amd64-kfreebsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/amd64-kfreebsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-kfreebsd/bibzbladd b/Master/bin/amd64-kfreebsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/amd64-kfreebsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-kfreebsd/ltx2crossrefxml b/Master/bin/amd64-kfreebsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/amd64-kfreebsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/amd64-netbsd/bibdoiadd b/Master/bin/amd64-netbsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/amd64-netbsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-netbsd/bibzbladd b/Master/bin/amd64-netbsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/amd64-netbsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/amd64-netbsd/ltx2crossrefxml b/Master/bin/amd64-netbsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/amd64-netbsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/armel-linux/bibdoiadd b/Master/bin/armel-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/armel-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/armel-linux/bibzbladd b/Master/bin/armel-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/armel-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/armel-linux/ltx2crossrefxml b/Master/bin/armel-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/armel-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/armhf-linux/bibdoiadd b/Master/bin/armhf-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/armhf-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/armhf-linux/bibzbladd b/Master/bin/armhf-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/armhf-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/armhf-linux/ltx2crossrefxml b/Master/bin/armhf-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/armhf-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-cygwin/bibdoiadd b/Master/bin/i386-cygwin/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-cygwin/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-cygwin/bibzbladd b/Master/bin/i386-cygwin/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-cygwin/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-cygwin/ltx2crossrefxml b/Master/bin/i386-cygwin/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-cygwin/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-freebsd/bibdoiadd b/Master/bin/i386-freebsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-freebsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-freebsd/bibzbladd b/Master/bin/i386-freebsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-freebsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-freebsd/ltx2crossrefxml b/Master/bin/i386-freebsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-freebsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-kfreebsd/bibdoiadd b/Master/bin/i386-kfreebsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-kfreebsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-kfreebsd/bibzbladd b/Master/bin/i386-kfreebsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-kfreebsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-kfreebsd/ltx2crossrefxml b/Master/bin/i386-kfreebsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-kfreebsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-linux/bibdoiadd b/Master/bin/i386-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-linux/bibzbladd b/Master/bin/i386-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-linux/ltx2crossrefxml b/Master/bin/i386-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-netbsd/bibdoiadd b/Master/bin/i386-netbsd/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-netbsd/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-netbsd/bibzbladd b/Master/bin/i386-netbsd/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-netbsd/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-netbsd/ltx2crossrefxml b/Master/bin/i386-netbsd/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-netbsd/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/i386-solaris/bibdoiadd b/Master/bin/i386-solaris/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/i386-solaris/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/i386-solaris/bibzbladd b/Master/bin/i386-solaris/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/i386-solaris/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/i386-solaris/ltx2crossrefxml b/Master/bin/i386-solaris/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/i386-solaris/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/mipsel-linux/bibdoiadd b/Master/bin/mipsel-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/mipsel-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/mipsel-linux/bibzbladd b/Master/bin/mipsel-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/mipsel-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/mipsel-linux/ltx2crossrefxml b/Master/bin/mipsel-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/mipsel-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/powerpc-linux/bibdoiadd b/Master/bin/powerpc-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/powerpc-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/powerpc-linux/bibzbladd b/Master/bin/powerpc-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/powerpc-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/powerpc-linux/ltx2crossrefxml b/Master/bin/powerpc-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/powerpc-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/sparc-solaris/bibdoiadd b/Master/bin/sparc-solaris/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/sparc-solaris/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/sparc-solaris/bibzbladd b/Master/bin/sparc-solaris/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/sparc-solaris/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/sparc-solaris/ltx2crossrefxml b/Master/bin/sparc-solaris/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/sparc-solaris/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/universal-darwin/bibdoiadd b/Master/bin/universal-darwin/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/universal-darwin/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/universal-darwin/bibzbladd b/Master/bin/universal-darwin/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/universal-darwin/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/universal-darwin/ltx2crossrefxml b/Master/bin/universal-darwin/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/universal-darwin/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/win32/bibdoiadd.exe b/Master/bin/win32/bibdoiadd.exe
new file mode 100755
index 00000000000..5777d90a17a
--- /dev/null
+++ b/Master/bin/win32/bibdoiadd.exe
Binary files differ
diff --git a/Master/bin/win32/bibzbladd.exe b/Master/bin/win32/bibzbladd.exe
new file mode 100755
index 00000000000..5777d90a17a
--- /dev/null
+++ b/Master/bin/win32/bibzbladd.exe
Binary files differ
diff --git a/Master/bin/win32/ltx2crossrefxml.exe b/Master/bin/win32/ltx2crossrefxml.exe
new file mode 100755
index 00000000000..5777d90a17a
--- /dev/null
+++ b/Master/bin/win32/ltx2crossrefxml.exe
Binary files differ
diff --git a/Master/bin/x86_64-cygwin/bibdoiadd b/Master/bin/x86_64-cygwin/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/x86_64-cygwin/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-cygwin/bibzbladd b/Master/bin/x86_64-cygwin/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/x86_64-cygwin/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-cygwin/ltx2crossrefxml b/Master/bin/x86_64-cygwin/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/x86_64-cygwin/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-darwin/bibdoiadd b/Master/bin/x86_64-darwin/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/x86_64-darwin/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-darwin/bibzbladd b/Master/bin/x86_64-darwin/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/x86_64-darwin/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-darwin/ltx2crossrefxml b/Master/bin/x86_64-darwin/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/x86_64-darwin/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-linux/bibdoiadd b/Master/bin/x86_64-linux/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/x86_64-linux/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-linux/bibzbladd b/Master/bin/x86_64-linux/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/x86_64-linux/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-linux/ltx2crossrefxml b/Master/bin/x86_64-linux/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/x86_64-linux/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-solaris/bibdoiadd b/Master/bin/x86_64-solaris/bibdoiadd
new file mode 120000
index 00000000000..3b37bd661ae
--- /dev/null
+++ b/Master/bin/x86_64-solaris/bibdoiadd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibdoiadd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-solaris/bibzbladd b/Master/bin/x86_64-solaris/bibzbladd
new file mode 120000
index 00000000000..0661a888028
--- /dev/null
+++ b/Master/bin/x86_64-solaris/bibzbladd
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/bibzbladd.pl \ No newline at end of file
diff --git a/Master/bin/x86_64-solaris/ltx2crossrefxml b/Master/bin/x86_64-solaris/ltx2crossrefxml
new file mode 120000
index 00000000000..39f658b7c97
--- /dev/null
+++ b/Master/bin/x86_64-solaris/ltx2crossrefxml
@@ -0,0 +1 @@
+../../texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl \ No newline at end of file
diff --git a/Master/texmf-dist/doc/man/man1/bibdoiadd.1 b/Master/texmf-dist/doc/man/man1/bibdoiadd.1
new file mode 100644
index 00000000000..00103374766
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/bibdoiadd.1
@@ -0,0 +1,194 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "bibdoiadd 1"
+.TH bibdoiadd 1 "2014-10-18" "" "CROSSREF LIBRARY"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+bibdoiadd.pl \- add DOI numbers to papers in a given bib file
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+bibdoiadd [\fB\-c\fR \fIconfig_file\fR] [\fB\-o\fR \fIoutput\fR] \fIbib_file\fR
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-c\fR \fIconfig_file\fR" 4
+.IX Item "-c config_file"
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+Output file. If this option is not used, the name for the
+output file is formed by adding \f(CW\*(C`_doi\*(C'\fR to the input file
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The script reads a BibTeX file. It checks whether the entries have
+DOIs. If now, tries to contact http://www.crossref.org to get the
+corresponding \s-1DOI\s0. The result is a BibTeX file with the fields
+\&\f(CW\*(C`doi=...\*(C'\fR added.
+.PP
+The name of the output file is either set by the \fB\-o\fR option or
+is derived by adding the suffix \f(CW\*(C`_doi\*(C'\fR to the output file.
+.PP
+There are two options for making queries with Crossref: free account
+and paid membership. In the first case you still must register with
+Crossref and are limited to a small number of queries, see the
+agreement at
+\&\f(CW\*(C`http://www.crossref.org/01company/free_services_agreement.html\*(C'\fR. In
+the second case you have a username and password, and can use them for
+automatic queries. I am not sure whether the use of this script is
+allowed for the free account holders. Anyway if you try to add \s-1DOI\s0
+to a large number of entries, you should register as a paid member.
+.SH "CONFIGURATION FILE"
+.IX Header "CONFIGURATION FILE"
+The configuration file is mostly self-explanatory: it has comments
+(starting with \f(CW\*(C`#\*(C'\fR) and assginments in the form
+.PP
+.Vb 1
+\& $field = value ;
+.Ve
+.PP
+The important parameters are \f(CW$mode\fR (\f(CW\*(Aqfree\*(Aq\fR or \f(CW\*(Aqpaid\*(Aq\fR,
+\&\f(CW$email\fR (for free users) and \f(CW$username\fR & \f(CW$password\fR for paid
+members.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+.Vb 2
+\& bibdoiadd \-c bibdoiadd.cfg citations.bib > result.bib
+\& bibdoiadd \-c bibdoiadd.cfg citations.bib \-o result.bib
+.Ve
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman
+.SH "COPYRIGHT AND LICENSE"
+.IX Header "COPYRIGHT AND LICENSE"
+Copyright (C) 2014 Boris Veytsman
+.PP
+This is free software. You may redistribute copies of it under the
+terms of the \s-1GNU\s0 General Public License
+<http://www.gnu.org/licenses/gpl.html>. There is \s-1NO\s0 \s-1WARRANTY\s0, to the
+extent permitted by law.
diff --git a/Master/texmf-dist/doc/man/man1/bibdoiadd.man1.pdf b/Master/texmf-dist/doc/man/man1/bibdoiadd.man1.pdf
new file mode 100644
index 00000000000..46c4540b164
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/bibdoiadd.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/bibzbladd.1 b/Master/texmf-dist/doc/man/man1/bibzbladd.1
new file mode 100644
index 00000000000..f2d5aca3047
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/bibzbladd.1
@@ -0,0 +1,162 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "bibzbladd 1"
+.TH bibzbladd 1 "2014-10-18" "" "CROSSREF LIBRARY"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+bibzbladd.pl \- add Zbl numbers to papers in a given bib file
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+bibzbladd [\fB\-o\fR \fIoutput\fR] \fIbib_file\fR
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+Output file. If this option is not used, the name for the
+output file is formed by adding \f(CW\*(C`_zbl\*(C'\fR to the input file
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The script reads a BibTeX file. It checks whether the entries have
+Zbls. If now, tries to contact internet to get the numbers. The
+result is a BibTeX file with the fields
+\&\f(CW\*(C`zblnumber=...\*(C'\fR added.
+.PP
+The name of the output file is either set by the \fB\-o\fR option or
+is derived by adding the suffix \f(CW\*(C`_zbl\*(C'\fR to the output file.
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman
+.SH "COPYRIGHT AND LICENSE"
+.IX Header "COPYRIGHT AND LICENSE"
+Copyright (C) 2014 Boris Veytsman
+.PP
+This is free software. You may redistribute copies of it under the
+terms of the \s-1GNU\s0 General Public License
+<http://www.gnu.org/licenses/gpl.html>. There is \s-1NO\s0 \s-1WARRANTY\s0, to the
+extent permitted by law.
diff --git a/Master/texmf-dist/doc/man/man1/bibzbladd.man1.pdf b/Master/texmf-dist/doc/man/man1/bibzbladd.man1.pdf
new file mode 100644
index 00000000000..0e7e13a2e82
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/bibzbladd.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.1 b/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.1
new file mode 100644
index 00000000000..983e7b99b8e
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.1
@@ -0,0 +1,180 @@
+.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.ie \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. nr % 0
+. rr F
+.\}
+.el \{\
+. de IX
+..
+.\}
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ltx2crossrefxml 1"
+.TH ltx2crossrefxml 1 "2014-10-18" "" "CROSSREF LIBRARY"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ltx2crossrefxml.pl \- a tool for creation of XML files for submitting to crossref.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+ltx2crossrefxml [\fB\-c\fR \fIconfig_file\fR] [\fB\-o\fR \fIoutput\fR] \fIlatex_file\fR \fIlatex_file\fR ...
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-c\fR \fIconfig_file\fR" 4
+.IX Item "-c config_file"
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+.IP "\fB\-o\fR \fIoutput\fR" 4
+.IX Item "-o output"
+Output file. If this option is not used, the \s-1XML\s0 is output to stdout.
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The script takes a number of latex files and produces an \s-1XML\s0 file
+ready for submission to Crossref. Each file must be previously processed
+by LaTeX with the newest \f(CW\*(C`resphilosophica\*(C'\fR package: the package creates
+the file \f(CW\*(C`.rti\*(C'\fR wtih the information about the bibliography.
+.PP
+The processing of reference list is at present rather limited: only so
+called unstructured references are produced.
+.SH "CONFIGURATION FILE FORMAT"
+.IX Header "CONFIGURATION FILE FORMAT"
+The configuration file is mostly self-explanatory: it has comments
+(starting with \f(CW\*(C`#\*(C'\fR) and assginments in the form
+.PP
+.Vb 1
+\& $field = value ;
+.Ve
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+.Vb 1
+\& ltx2crossrefxml.pl ../paper1/paper1.tex ../paper2/paper2.tex \-o result.xml
+\&
+\& ltx2crossrefxml.pl \-c myconfig.cnf paper.tex \-o paper.xml
+.Ve
+.SH "AUTHOR"
+.IX Header "AUTHOR"
+Boris Veytsman
+.SH "COPYRIGHT AND LICENSE"
+.IX Header "COPYRIGHT AND LICENSE"
+Copyright (C) 2012 Boris Veytsman
+.PP
+This is free software. You may redistribute copies of it under the
+terms of the \s-1GNU\s0 General Public License
+<http://www.gnu.org/licenses/gpl.html>. There is \s-1NO\s0 \s-1WARRANTY\s0, to the
+extent permitted by law.
diff --git a/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.man1.pdf b/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.man1.pdf
new file mode 100644
index 00000000000..984ddee4c7f
--- /dev/null
+++ b/Master/texmf-dist/doc/man/man1/ltx2crossrefxml.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/crossrefware/Makefile b/Master/texmf-dist/doc/support/crossrefware/Makefile
new file mode 100644
index 00000000000..2126040c452
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/Makefile
@@ -0,0 +1,40 @@
+SCRIPTS = \
+ ltx2crossrefxml.pl \
+ bibdoiadd.pl \
+ bibzbladd.pl
+
+
+MAN1 = ${SCRIPTS:%.pl=%.1}
+
+PDF = crossrefware.pdf
+
+all: ${MAN1} ${PDF}
+ chmod a+x ${SCRIPTS}
+
+
+
+%.1: %.pl
+ pod2man -c "CROSSREF LIBRARY" -n $* -s 1 -r "" $< > $@
+
+
+
+
+clean:
+ $(RM) *.aux *.toc *.log *.tex *.idx *.ilg *.ind *.out *.zip *.tgz
+
+distclean: clean
+ $(RM) *.pdf *.1 *.3
+
+
+%.pdf: %.tex
+ pdflatex $*
+ makeindex $*
+ pdflatex $*
+
+crossrefware.tex: head.ltx
+
+crossrefware.tex: ${SCRIPTS}
+ pod2latex -modify -full -prefile head.ltx -out $@ $+
+
+archive: all clean
+ cd ..; tar -czvf crossrefware.tgz crossref --exclude CVS \ No newline at end of file
diff --git a/Master/texmf-dist/doc/support/crossrefware/README b/Master/texmf-dist/doc/support/crossrefware/README
new file mode 100644
index 00000000000..f5d0d13c9d3
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/README
@@ -0,0 +1,17 @@
+ Crossrefware Bundle
+ version 1.0
+
+
+Scripts useful for working with crossref.org.
+
+bibdoiadd.pl - add DOI numbers to papers in a given bib file
+bibzbladd.pl - add Zbl numbers to papers in a given bib file
+ltx2crossrefxml.pl - a tool for creation of XML files for submitting to crossref.org
+
+Installation:
+
+1. Move *.pl files to the binaries directory in your system.
+
+2. Use *.cfg files as configuration files samples.
+
+3. Move *.1 to the man pages directory in your system.
diff --git a/Master/texmf-dist/doc/support/crossrefware/aomsample.bib b/Master/texmf-dist/doc/support/crossrefware/aomsample.bib
new file mode 100644
index 00000000000..1ca4c7908eb
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/aomsample.bib
@@ -0,0 +1,277 @@
+
+@Article{dihe:newdir,
+ author = {W. Diffie and E. Hellman},
+ title = {New directions in Cryptography},
+ journal = {IEEE Transactions on Information Theory},
+ year = 1976,
+ volume = 22,
+ number = 5,
+ pages = {644--654}
+}
+
+
+
+
+
+@Misc{fre:cichon,
+ author = {D. H. Fremlin},
+ title = {Cichon's Diagram},
+ howpublished = {presented at the
+S{\'e}minaire Initiation {\`a} l'Analyse, G. Choquet, M. Rogalski, J.
+Saint Raymond, at the Universit{\'e} Pierre et Marie Curie, Paris, 23e
+ann{\'e}e.},
+ year = {1983/194}
+}
+
+
+
+
+
+@Book{fre:riesz,
+ author = {D. H. Fremlin},
+ title = {Topological {R}iesz Spaces and Measure Theory},
+ publisher = {Cambridge University Press},
+ year = 2008
+}
+
+
+@Article{gouja:lagrmeth,
+ author = {I. P. Goulden and D. M. Jackson},
+ title = {The Enumeration of Directed
+Closed {E}uler Trails and Directed {H}amiltonian Circuits by
+{L}angrangian Methods},
+ journal = {European Journal of Combinatorics},
+ year = 1981,
+ volume = 2,
+ pages = {131--212}
+}
+
+
+
+@Book{hapa:graphenum,
+ author = {F. Harary and E. M. Palmer},
+ title = {Graphical Enumeration},
+ publisher = {Academic Press},
+ year = 1973
+}
+
+
+
+
+@InProceedings{imlelu:oneway,
+ author = {R. Impagliazzo and L. Levin and M. Luby},
+ title = {Pseudo-random Generation from One-Way Functions},
+ booktitle = {Proc. 21st STOC},
+ pages = {12--24},
+ year = 1989,
+ venue = {Seattle, WA, USA},
+ address = {New York},
+ publisher = {ACM}
+}
+
+
+
+
+@TechReport{komiyo:unipfunc,
+ author = {M. Kojima and S. Mizuno and A. Yoshise},
+ title = {A New Continuation Method
+for Complementarity Problems With Uniform $p$-Functions},
+ institution = {Tokyo Inst. of Technology, Dept. of Information Sciences},
+ year = 1987,
+ number = {B-194},
+ address = {Tokyo}
+}
+
+
+
+
+@TechReport{komiyo:lincomp,
+ author = {M. Kojima and S. Mizuno and A. Yoshise},
+ title = {A Polynomial-Time Algorithm For a Class of Linear
+Complementarity Problems},
+ institution = {Tokyo Inst. of Technology, Dept. of Information Sciences},
+ year = 1987,
+ number = {B-193},
+ address = {Tokyo}
+}
+
+
+
+
+@Article{liuchow:formalsum,
+ author = {C. J. Liu and Yutze Chow},
+ title = {On Operator and Formal Sum Methods for
+Graph Enumeration Problems},
+ journal = {SIAM Journal of Algorithms and Discrete Methods},
+ year = 1984,
+ volume = 5,
+ pages = {384--438}
+}
+
+
+
+
+@Article{mami:matrixth,
+ author = {M. Marcus and H. Minc},
+ title = {A Survey of Matrix Theory and Matrix
+Inequalities},
+ journal = {Complementary Series in Mathematics},
+ year = 1964,
+ volume = 14,
+ pages = {21--48}
+}
+
+
+
+
+@TechReport{miyoki:lincomp,
+ author = {S. Mizuno and A. Yoshise and T. Kikuchi},
+ title = {Practical Polynomial Time
+Algorithms for Linear Complementarity Problems},
+ institution = {Tokyo Inst. of Technology, Dept. of Industrial Engineering
+and Management},
+ year = 1988,
+ number = 13,
+ address = {Tokyo},
+ month = {April}
+}
+
+
+
+
+@TechReport{moad:quadpro,
+ author = {R. D. Monteiro and I. Adler},
+ title = {Interior Path Following Primal-Dual
+Algorithms, Part {II}: Quadratic Programming},
+ institution = {Dept. of Industrial Engineering and Operations Research},
+ year = 1987,
+ type = {Working Paper},
+ month = {August}
+}
+
+
+
+
+@Book{ste:sint,
+ author = {E. M. Stein},
+ title = {Singular Integrals and Differentiability Properties
+of Functions},
+ publisher = {Princeton Univ. Press},
+ year = 1970,
+ address = {Princeton, NJ}
+}
+
+
+
+
+
+@PhdThesis{ye:intalg,
+ author = {Y. Ye},
+ title = {Interior Algorithms for Linear, Quadratic and Linearly
+Constrained Convex Programming},
+ school = {Stanford Univ., Dept. of Engineering--Economic Systems},
+ year = 1987,
+ address = {Palo Alto, CA},
+ month = {July}
+}
+
+@article{Lenstra74,
+author= {Lenstra, Jr., Hendrik W. and Oort, Frans},
+title= {Simple abelian varieties having a prescribed formal isogeny type.},
+journal="J. Pure Appl. Algebra ",
+volume= 4 ,
+pages= {47--53},
+year= 1974,
+doi = "10.1016/0022-4049(74)90029-2",
+mrnumber = {0279.14009},
+url = {http://www.math.leidenuniv.nl/~hwl/PUBLICATIONS/1973a/art.pdf}
+}
+
+
+
+@Unpublished{Minasyan08,
+ author = {A. Minasyan and D. Osin},
+ title = {Normal Automorphisms of Relatively Hyperbolic Groups},
+ arxiv = {0809.2408},
+ year = 2008
+}
+
+@Article{Zarhin92,
+ key = {Zarh92},
+ author = {Zarhin, {\relax Yu}ri G.},
+ title = {Abelian Varieties Having a Reduction of {K3} Type},
+ journal = {Duke Math J.},
+ year = 1992,
+ volume = 65,
+ number = 3,
+ pages = {511--527},
+ mrnumber= {1154181},
+}
+
+@Book{Arnold89:MathMethodsMechanics,
+ author = {Arnold, V. I.},
+ title = {Mathematical Methods of Classical Mechanics},
+ publisher = {Springer},
+ year = 1989,
+ volume = 60,
+ series = {Graduate Texts in Mathematics},
+ address = {New York},
+ edition = {Second}
+}
+
+@Book{Michal48,
+ author = {A. D. Michal},
+ title = {Matrix and Tensor Calculus},
+ publisher = {John Wiley \& Sons, Inc.; Chapman \& Hall, Ltd.},
+ year = 1948,
+ series = {GALCIT Aeronautical Series},
+ address = {New York; London}
+}
+
+
+@Article{Michal38,
+ author = {A. D. Michal},
+ title = {Differential Calculus in Linear Topological Spaces},
+ journal = {Proc. nat. Acad. Sci. USA},
+ year = 1938,
+ volume = 24,
+ jfmnumber = {64.0366.02},
+ pages = {340--342}
+}
+
+@Unpublished{Zarhin:AG,
+ author = {Zarhin, {\relax Yu}ri G.},
+ title = {On Abel Groups},
+ sortyear = 2200,
+ note = {Private Communication}
+}
+
+@Unpublished{Zarhin:AC,
+ author = {Zarhin, {\relax Yu}ri G.},
+ title = {Algebra and Cryptography},
+ sortyear = 2100,
+ note = {Private Communication}
+}
+
+@incollection{degroot1992stochastic,
+ author = {C. de Groot and D. W{\"u}rtz and M. Hanf and
+ R. Peikert and T. Koller and K. H. Hoffmann},
+ title = {Stochastic Optimization---Efficient Algorithms to
+ Solve Complex Problems},
+ booktitle = {System Modelling and Optimization, Proceedings of the Fifteenth IFIP Conference},
+ year = 1992,
+ editor = {P. Kall},
+ pages = {546--555},
+ venue = {Z{\"u}rich},
+ publisher = {Springer-Verlag},
+}
+
+@Book{Knuth94:TheTeXbook,
+ author = {Knuth, Donald Ervin},
+ title = {The \TeX book},
+ publisher = {Addison-Wesley Publishing Company},
+ year = 1994,
+ series = {Computers \& Typesetting A},
+ address = {Reading, MA},
+ titlenote = {with illustrations by Duane Bibby}
+}
diff --git a/Master/texmf-dist/doc/support/crossrefware/citations.bib b/Master/texmf-dist/doc/support/crossrefware/citations.bib
new file mode 100644
index 00000000000..005b64998cc
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/citations.bib
@@ -0,0 +1,811 @@
+
+@incollection {amicevelu75,
+ MRKEY = {MR0376534},
+ AUTHOR = {Amice, Yvette and V{\'e}lu, Jacques},
+ TITLE = {Distributions {$p$}-adiques associ\'ees aux s\'eries de
+ {H}ecke},
+ BOOKTITLE = {Journ\'ees {A}rithm\'etiques de {B}ordeaux ({C}onf., {U}niv.
+ {B}ordeaux, {B}ordeaux, 1974)},
+ PAGES = {119--131. Ast\'erisque, Nos. 24-25},
+ PUBLISHER = {Soc. Math. France},
+ ADDRESS = {Paris},
+ YEAR = {1975},
+ MRCLASS = {10D05},
+ MRNUMBER = {0376534 (51 \#12709},
+MRREVIEWER = {O. M. Fomenko},
+}
+
+%%%%
+
+@article {ashstevens86,
+ MRKEY = {MR860675},
+ AUTHOR = {Ash, Avner and Stevens, Glenn},
+ TITLE = {Modular forms in characteristic {$l$} and special values of
+ their {$L$}-functions},
+ JOURNAL = {Duke Math. J.},
+ FJOURNAL = {Duke Mathematical Journal},
+ VOLUME = {53},
+ YEAR = {1986},
+ NUMBER = {3},
+ PAGES = {849--868},
+ ISSN = {0012-7094},
+ CODEN = {DUMJAO},
+ MRCLASS = {11F75},
+ MRNUMBER = {860675 (88h:11036},
+ URL = {http://dx.doi.org/10.1215/S0012-7094-86-05346-9},
+}
+
+%%%%
+
+
+@incollection {MR760999,
+ MRKEY = {MR760999},
+ AUTHOR = {Be{\u\i}linson, A. A.},
+ TITLE = {Higher regulators and values of {$L$}-functions},
+ BOOKTITLE = {Current problems in mathematics, {V}ol. 24},
+ SERIES = {Itogi Nauki i Tekhniki},
+ PAGES = {181--238},
+ PUBLISHER = {Akad. Nauk SSSR Vsesoyuz. Inst. Nauchn. i Tekhn. Inform.},
+ ADDRESS = {Moscow},
+ YEAR = {1984},
+ MRCLASS = {11R42 (11G40 11G45 11R70 14C35 18F25 19F27)},
+ MRNUMBER = {760999 (86h:11103},
+MRREVIEWER = {Daniel R. Grayson},
+}
+
+%%%%
+
+
+@article {bergerlizhu04,
+ MRKEY = {MR2060368},
+ AUTHOR = {Berger, Laurent and Li, Hanfeng and Zhu, Hui June},
+ TITLE = {Construction of some families of 2-dimensional crystalline
+ representations},
+ JOURNAL = {Math. Ann.},
+ FJOURNAL = {Mathematische Annalen},
+ VOLUME = {329},
+ YEAR = {2004},
+ NUMBER = {2},
+ PAGES = {365--377},
+ ISSN = {0025-5831},
+ CODEN = {MAANA},
+ MRCLASS = {11F80 (11F33 11F85 14F30)},
+ MRNUMBER = {2060368 (2005k:11104},
+MRREVIEWER = {Abdellah Mokrane},
+ URL = {http://dx.doi.org/10.1007/s00208-004-0529-y},
+}
+
+%%%%
+
+%%%%
+
+@inproceedings {besser00,
+ MRKEY = {MR1809626},
+ AUTHOR = {Besser, Amnon},
+ TITLE = {Syntomic regulators and {$p$}-adic integration. {I}. {R}igid
+ syntomic regulators},
+ BOOKTITLE = {Proceedings of the {C}onference on {$p$}-adic {A}spects of the
+ {T}heory of {A}utomorphic {R}epresentations ({J}erusalem,
+ 1998)},
+ JOURNAL = {Israel J. Math.},
+ FJOURNAL = {Israel Journal of Mathematics},
+ VOLUME = {120},
+ YEAR = {2000},
+ NUMBER = {part B},
+ PAGES = {291--334},
+ ISSN = {0021-2172},
+ CODEN = {ISJMAP},
+ MRCLASS = {14F43 (11G25 14F30 14G22 19F27)},
+ MRNUMBER = {1809626 (2002c:14035},
+MRREVIEWER = {Takao Yamazaki},
+ URL = {http://dx.doi.org/10.1007/BF02834843},
+}
+
+%%%%
+
+@incollection {blochkato90,
+ MRKEY = {MR1086888},
+ AUTHOR = {Bloch, Spencer and Kato, Kazuya},
+ TITLE = {{$L$}-functions and {T}amagawa numbers of motives},
+ BOOKTITLE = {The {G}rothendieck {F}estschrift, {V}ol.\ {I}},
+ SERIES = {Progr. Math.},
+ VOLUME = {86},
+ PAGES = {333--400},
+ PUBLISHER = {Birkh\"auser Boston},
+ ADDRESS = {Boston, MA},
+ YEAR = {1990},
+ MRCLASS = {11G40 (11G09 14C35 14F30 14G10)},
+ MRNUMBER = {1086888 (92g:11063},
+MRREVIEWER = {Ehud de Shalit},
+}
+
+%%%%
+
+@article {colemanedixhoven98,
+ MRKEY = {MR1600034},
+ AUTHOR = {Coleman, Robert F. and Edixhoven, Bas},
+ TITLE = {On the semi-simplicity of the {$U\sb p$}-operator on modular
+ forms},
+ JOURNAL = {Math. Ann.},
+ FJOURNAL = {Mathematische Annalen},
+ VOLUME = {310},
+ YEAR = {1998},
+ NUMBER = {1},
+ PAGES = {119--127},
+ ISSN = {0025-5831},
+ MRCLASS = {11F25 (11F11 11F33 11F85)},
+ MRNUMBER = {1600034 (99b:11043},
+MRREVIEWER = {Alexey A. Panchishkin},
+ URL = {http://dx.doi.org/10.1007/s002080050140},
+}
+
+%%%%
+
+
+%%%%
+
+@book {deligne77,
+ MRKEY = {MR0463174},
+ AUTHOR = {Deligne, P.},
+ TITLE = {Cohomologie \'etale},
+ SERIES = {Lecture Notes in Mathematics, Vol. 569},
+ NOTE = {S{\'e}minaire de G{\'e}om{\'e}trie Alg{\'e}brique du
+ Bois-Marie SGA 4${1{\o}er 2}$,
+ Avec la collaboration de J. F. Boutot, A. Grothendieck, L.
+ Illusie et J. L. Verdier},
+ PUBLISHER = {Springer-Verlag},
+ ADDRESS = {Berlin},
+ YEAR = {1977},
+ PAGES = {iv+312pp},
+ MRCLASS = {14F20},
+ MRNUMBER = {0463174 (57 \#3132},
+MRREVIEWER = {J. S. Milne},
+}
+
+%%%%
+
+@incollection {delignerapoport73,
+ MRKEY = {MR0337993},
+ AUTHOR = {Deligne, P. and Rapoport, M.},
+ TITLE = {Les sch\'emas de modules de courbes elliptiques},
+ BOOKTITLE = {Modular functions of one variable, {II} ({P}roc. {I}nternat.
+ {S}ummer {S}chool, {U}niv. {A}ntwerp, {A}ntwerp, 1972)},
+ PAGES = {143--316. Lecture Notes in Math., Vol. 349},
+ PUBLISHER = {Springer},
+ ADDRESS = {Berlin},
+ YEAR = {1973},
+ MRCLASS = {14K10 (10D05)},
+ MRNUMBER = {0337993 (49 \#2762},
+MRREVIEWER = {T. Oda},
+}
+
+%%%%
+
+@incollection {diamondim95,
+ MRKEY = {MR1357209},
+ AUTHOR = {Diamond, Fred and Im, John},
+ TITLE = {Modular forms and modular curves},
+ BOOKTITLE = {Seminar on {F}ermat's {L}ast {T}heorem ({T}oronto, {ON},
+ 1993--1994)},
+ SERIES = {CMS Conf. Proc.},
+ VOLUME = {17},
+ PAGES = {39--133},
+ PUBLISHER = {Amer. Math. Soc.},
+ ADDRESS = {Providence, RI},
+ YEAR = {1995},
+ MRCLASS = {11F11 (11F25 11G05 11G18)},
+ MRNUMBER = {1357209 (97g:11044},
+}
+
+%%%%
+
+
+%%%%
+
+@article {flach92,
+ MRKEY = {MR1172693},
+ AUTHOR = {Flach, Matthias},
+ TITLE = {A finiteness theorem for the symmetric square of an elliptic
+ curve},
+ JOURNAL = {Invent. Math.},
+ FJOURNAL = {Inventiones Mathematicae},
+ VOLUME = {109},
+ YEAR = {1992},
+ NUMBER = {2},
+ PAGES = {307--327},
+ ISSN = {0020-9910},
+ CODEN = {INVMBH},
+ MRCLASS = {11G40 (11F80 11G05 19F27)},
+ MRNUMBER = {1172693 (93g:11066},
+MRREVIEWER = {Bas Edixhoven},
+ URL = {http://dx.doi.org/10.1007/BF01232029},
+}
+
+%%%%
+
+
+@article {huber00,
+ MRKEY = {MR1775312},
+ AUTHOR = {Huber, Annette},
+ TITLE = {Realization of {V}oevodsky's motives},
+ JOURNAL = {J. Algebraic Geom.},
+ FJOURNAL = {Journal of Algebraic Geometry},
+ VOLUME = {9},
+ YEAR = {2000},
+ NUMBER = {4},
+ PAGES = {755--799},
+ ISSN = {1056-3911},
+ MRCLASS = {14F42 (14F30 18E30)},
+ MRNUMBER = {1775312 (2002d:14029},
+MRREVIEWER = {Yuichiro Takeda},
+}
+
+%%%%
+
+@article {iwahorimatsumoto65,
+ MRKEY = {MR0185016},
+ AUTHOR = {Iwahori, N. and Matsumoto, H.},
+ TITLE = {On some {B}ruhat decomposition and the structure of the
+ {H}ecke rings of {${\germ p}$}-adic {C}hevalley groups},
+ JOURNAL = {Inst. Hautes \'Etudes Sci. Publ. Math.},
+ FJOURNAL = {Institut des Hautes \'Etudes Scientifiques. Publications
+ Math\'ematiques},
+ NUMBER = {25},
+ YEAR = {1965},
+ PAGES = {5--48},
+ ISSN = {0073-8301},
+ MRCLASS = {20.70 (14.50)},
+ MRNUMBER = {0185016 (32 \#2486},
+MRREVIEWER = {Rimhak Ree},
+}
+
+%%%%
+
+@book {jacquet72,
+ MRKEY = {MR0562503},
+ AUTHOR = {Jacquet, Herv{\'e}},
+ TITLE = {Automorphic forms on {${\rm GL}(2)$}. {P}art {II}},
+ SERIES = {Lecture Notes in Mathematics, Vol. 278},
+ PUBLISHER = {Springer-Verlag},
+ ADDRESS = {Berlin},
+ YEAR = {1972},
+ PAGES = {xiii+142},
+ MRCLASS = {10D15 (22E55)},
+ MRNUMBER = {0562503 (58 \#27778},
+MRREVIEWER = {Stephen Gelbart},
+}
+
+%%%%
+
+@article {jannsen88,
+ MRKEY = {MR929536},
+ AUTHOR = {Jannsen, Uwe},
+ TITLE = {Continuous \'etale cohomology},
+ JOURNAL = {Math. Ann.},
+ FJOURNAL = {Mathematische Annalen},
+ VOLUME = {280},
+ YEAR = {1988},
+ NUMBER = {2},
+ PAGES = {207--245},
+ ISSN = {0025-5831},
+ CODEN = {MAANA},
+ MRCLASS = {14F20 (11G25)},
+ MRNUMBER = {929536 (89a:14022},
+MRREVIEWER = {Wayne Raskind},
+ URL = {http://dx.doi.org/10.1007/BF01456052},
+}
+
+%%%%
+
+
+%%%%
+
+@article {kato04,
+ MRKEY = {MR2104361},
+ AUTHOR = {Kato, Kazuya},
+ TITLE = {{$p$}-adic {H}odge theory and values of zeta functions of
+ modular forms},
+ NOTE = {Cohomologies $p$-adiques et applications arithm{\'e}tiques.
+ III},
+ JOURNAL = {Ast\'erisque},
+ FJOURNAL = {Ast\'erisque},
+ NUMBER = {295},
+ YEAR = {2004},
+ PAGES = {ix, 117--290},
+ ISSN = {0303-1179},
+ MRCLASS = {11F85 (11F67 11G40 11R33 11S80 14G10 14G35)},
+ MRNUMBER = {2104361 (2006b:11051},
+MRREVIEWER = {Fabrizio Andreatta},
+}
+
+%%%%
+
+@book {katok92,
+ MRKEY = {MR1177168},
+ AUTHOR = {Katok, Svetlana},
+ TITLE = {Fuchsian groups},
+ SERIES = {Chicago Lectures in Mathematics},
+ PUBLISHER = {University of Chicago Press},
+ ADDRESS = {Chicago, IL},
+ YEAR = {1992},
+ PAGES = {x+175},
+ ISBN = {0-226-42582-7; 0-226-42583-5},
+ MRCLASS = {20H10 (30F35)},
+ MRNUMBER = {1177168 (93d:20088},
+MRREVIEWER = {I. Kra},
+}
+
+%%%%
+
+@article {kurihara02,
+ MRKEY = {MR1914621},
+ AUTHOR = {Kurihara, Masato},
+ TITLE = {On the {T}ate {S}hafarevich groups over cyclotomic fields of
+ an elliptic curve with supersingular reduction. {I}},
+ JOURNAL = {Invent. Math.},
+ FJOURNAL = {Inventiones Mathematicae},
+ VOLUME = {149},
+ YEAR = {2002},
+ NUMBER = {1},
+ PAGES = {195--224},
+ ISSN = {0020-9910},
+ CODEN = {INVMBH},
+ MRCLASS = {11G05 (11R23)},
+ MRNUMBER = {1914621 (2003f:11078},
+MRREVIEWER = {Vinayak Vatsal},
+ URL = {http://dx.doi.org/10.1007/s002220100206},
+}
+
+%%%%
+
+@article {landsburg91,
+ MRKEY = {MR1115990},
+ AUTHOR = {Landsburg, Steven E.},
+ TITLE = {Relative {C}how groups},
+ JOURNAL = {Illinois J. Math.},
+ FJOURNAL = {Illinois Journal of Mathematics},
+ VOLUME = {35},
+ YEAR = {1991},
+ NUMBER = {4},
+ PAGES = {618--641},
+ ISSN = {0019-2082},
+ CODEN = {IJMTAW},
+ MRCLASS = {19E15 (14C15 14C35)},
+ MRNUMBER = {1115990 (92i:19007},
+MRREVIEWER = {Luca Barbieri Viale},
+ URL = {http://projecteuclid.org/euclid.ijm/1255987675},
+}
+
+%%%%
+
+@book {lang02,
+ MRKEY = {MR1878556},
+ AUTHOR = {Lang, Serge},
+ TITLE = {Algebra},
+ SERIES = {Graduate Texts in Mathematics},
+ VOLUME = {211},
+ EDITION = {third},
+ PUBLISHER = {Springer-Verlag},
+ ADDRESS = {New York},
+ YEAR = {2002},
+ PAGES = {xvi+914},
+ ISBN = {0-387-95385-X},
+ MRCLASS = {00A05 (15-02)},
+ MRNUMBER = {1878556 (2003e:00003},
+ URL = {http://dx.doi.org/10.1007/978-1-4613-0041-0},
+}
+
+%%%%
+
+
+%%%%
+
+@article {levine04,
+ MRKEY = {MR1740880},
+ AUTHOR = {Levine, Marc},
+ TITLE = {Inverting the motivic {B}ott element},
+ JOURNAL = {$K$-Theory},
+ FJOURNAL = {$K$-Theory. An Interdisciplinary Journal for the Development,
+ Application, and Influence of $K$-Theory in the Mathematical
+ Sciences},
+ VOLUME = {19},
+ YEAR = {2000},
+ NUMBER = {1},
+ PAGES = {1--28},
+ ISSN = {0920-3036},
+ CODEN = {KTHEEO},
+ MRCLASS = {14F42 (14F20 19D45 19E08 19E20)},
+ MRNUMBER = {1740880 (2001k:14048},
+ URL = {http://dx.doi.org/10.1023/A:1007874218371},
+}
+
+%%%%
+
+
+%%%%
+
+@article {loefflerzerbes10,
+ MRKEY = {MR3065158},
+ AUTHOR = {Loeffler, David and Zerbes, Sarah Livia},
+ TITLE = {Wach modules and critical slope {$p$}-adic {$L$}-functions},
+ JOURNAL = {J. Reine Angew. Math.},
+ FJOURNAL = {Journal f\"ur die Reine und Angewandte Mathematik. [Crelle's
+ Journal]},
+ VOLUME = {679},
+ YEAR = {2013},
+ PAGES = {181--206},
+ ISSN = {0075-4102},
+ CODEN = {JRMAA8},
+ MRCLASS = {11R23 (11F80)},
+ MRNUMBER = {3065158},
+}
+
+%%%%
+
+@book {mazzavoevodskyweibel06,
+ MRKEY = {MR2242284},
+ AUTHOR = {Mazza, Carlo and Voevodsky, Vladimir and Weibel, Charles},
+ TITLE = {Lecture notes on motivic cohomology},
+ SERIES = {Clay Mathematics Monographs},
+ VOLUME = {2},
+ PUBLISHER = {American Mathematical Society},
+ ADDRESS = {Providence, RI},
+ YEAR = {2006},
+ PAGES = {xiv+216},
+ ISBN = {978-0-8218-3847-1; 0-8218-3847-4},
+ MRCLASS = {14F42 (19E15)},
+ MRNUMBER = {2242284 (2007e:14035},
+MRREVIEWER = {Thomas Geisser},
+}
+
+%%%%
+
+
+%%%%
+
+@article {momose81,
+ MRKEY = {MR617867},
+ AUTHOR = {Momose, Fumiyuki},
+ TITLE = {On the {$l$}-adic representations attached to modular forms},
+ JOURNAL = {J. Fac. Sci. Univ. Tokyo Sect. IA Math.},
+ FJOURNAL = {Journal of the Faculty of Science. University of Tokyo.
+ Section IA. Mathematics},
+ VOLUME = {28},
+ YEAR = {1981},
+ NUMBER = {1},
+ PAGES = {89--109},
+ ISSN = {0040-8980},
+ CODEN = {JFTMAT},
+ MRCLASS = {10D12},
+ MRNUMBER = {617867 (84a:10025},
+MRREVIEWER = {G. Frey},
+}
+
+%%%%
+
+@article {nekovar06,
+ MRKEY = {MR2333680},
+ AUTHOR = {Nekov{\'a}{\v{r}}, Jan},
+ TITLE = {Selmer complexes},
+ JOURNAL = {Ast\'erisque},
+ FJOURNAL = {Ast\'erisque},
+ NUMBER = {310},
+ YEAR = {2006},
+ PAGES = {viii+559},
+ ISSN = {0303-1179},
+ ISBN = {978-2-85629-226-6},
+ MRCLASS = {11R23 (11F41 11G40 11R34 22E41)},
+ MRNUMBER = {2333680 (2009c:11176},
+MRREVIEWER = {Laurent N. Berger},
+}
+
+%%%%
+
+@article {ohta99,
+ MRKEY = {MR1674001},
+ AUTHOR = {Ohta, Masami},
+ TITLE = {Ordinary {$p$}-adic \'etale cohomology groups attached to
+ towers of elliptic modular curves},
+ JOURNAL = {Compositio Math.},
+ FJOURNAL = {Compositio Mathematica},
+ VOLUME = {115},
+ YEAR = {1999},
+ NUMBER = {3},
+ PAGES = {241--301},
+ ISSN = {0010-437X},
+ CODEN = {CMPMAF},
+ MRCLASS = {11F33 (11F67 11G18)},
+ MRNUMBER = {1674001 (2000d:11064},
+MRREVIEWER = {Andrea Mori},
+ URL = {http://dx.doi.org/10.1023/A:1000556212097},
+}
+
+%%%%
+
+
+%%%%
+
+@article {otsuki09,
+ MRKEY = {MR2541166},
+ AUTHOR = {Otsuki, Rei},
+ TITLE = {Construction of a homomorphism concerning {E}uler systems for
+ an elliptic curve},
+ JOURNAL = {Tokyo J. Math.},
+ FJOURNAL = {Tokyo Journal of Mathematics},
+ VOLUME = {32},
+ YEAR = {2009},
+ NUMBER = {1},
+ PAGES = {253--278},
+ ISSN = {0387-3870},
+ MRCLASS = {11G05 (11G40 11R23)},
+ MRNUMBER = {2541166 (2010k:11093},
+MRREVIEWER = {Ahmet Tekcan},
+ URL = {http://dx.doi.org/10.3836/tjm/1249648421},
+}
+
+%%%%
+
+@article {perrinriou92,
+ MRKEY = {MR1168369},
+ AUTHOR = {Perrin-Riou, Bernadette},
+ TITLE = {Th\'eorie d'{I}wasawa et hauteurs {$p$}-adiques},
+ JOURNAL = {Invent. Math.},
+ FJOURNAL = {Inventiones Mathematicae},
+ VOLUME = {109},
+ YEAR = {1992},
+ NUMBER = {1},
+ PAGES = {137--185},
+ ISSN = {0020-9910},
+ CODEN = {INVMBH},
+ MRCLASS = {11R23 (11G40 11R42 11S25)},
+ MRNUMBER = {1168369 (93g:11109},
+MRREVIEWER = {Douglas L. Ulmer},
+ URL = {http://dx.doi.org/10.1007/BF01232022},
+}
+
+%%%%
+
+
+%%%%
+
+
+%%%%
+
+@article {pollackstevens11,
+ MRKEY = {MR2760194},
+ AUTHOR = {Pollack, Robert and Stevens, Glenn},
+ TITLE = {Overconvergent modular symbols and {$p$}-adic {$L$}-functions},
+ JOURNAL = {Ann. Sci. \'Ec. Norm. Sup\'er. (4)},
+ FJOURNAL = {Annales Scientifiques de l'\'Ecole Normale Sup\'erieure.
+ Quatri\`eme S\'erie},
+ VOLUME = {44},
+ YEAR = {2011},
+ NUMBER = {1},
+ PAGES = {1--42},
+ ISSN = {0012-9593},
+ MRCLASS = {11F85 (11F67 11S40)},
+ MRNUMBER = {2760194 (2012m:11074},
+MRREVIEWER = {Jeanine Van Order},
+}
+
+%%%%
+
+
+%%%%
+
+@incollection {quillen73,
+ MRKEY = {MR0338129},
+ AUTHOR = {Quillen, Daniel},
+ TITLE = {Higher algebraic {$K$}-theory. {I}},
+ BOOKTITLE = {Algebraic {$K$}-theory, {I}: {H}igher {$K$}-theories ({P}roc.
+ {C}onf., {B}attelle {M}emorial {I}nst., {S}eattle, {W}ash.,
+ 1972)},
+ PAGES = {85--147. Lecture Notes in Math., Vol. 341},
+ PUBLISHER = {Springer},
+ ADDRESS = {Berlin},
+ YEAR = {1973},
+ MRCLASS = {18F25},
+ MRNUMBER = {0338129 (49 \#2895},
+MRREVIEWER = {Stephen M. Gersten},
+}
+
+%%%%
+
+@article {ramakrishnan00,
+ MRKEY = {MR1792292},
+ AUTHOR = {Ramakrishnan, Dinakar},
+ TITLE = {Modularity of the {R}ankin-{S}elberg {$L$}-series, and
+ multiplicity one for {${\rm SL}(2)$}},
+ JOURNAL = {Ann. of Math. (2)},
+ FJOURNAL = {Annals of Mathematics. Second Series},
+ VOLUME = {152},
+ YEAR = {2000},
+ NUMBER = {1},
+ PAGES = {45--111},
+ ISSN = {0003-486X},
+ CODEN = {ANMAAH},
+ MRCLASS = {11F70 (11F55 11F66 11F80 11G18 14G10 20G35 22E55)},
+ MRNUMBER = {1792292 (2001g:11077},
+MRREVIEWER = {Solomon Friedberg},
+ URL = {http://dx.doi.org/10.2307/2661379},
+}
+
+%%%%
+
+@article {ribet85,
+ MRKEY = {MR819838},
+ AUTHOR = {Ribet, Kenneth A.},
+ TITLE = {On {$l$}-adic representations attached to modular forms. {II}},
+ JOURNAL = {Glasgow Math. J.},
+ FJOURNAL = {Glasgow Mathematical Journal},
+ VOLUME = {27},
+ YEAR = {1985},
+ PAGES = {185--194},
+ ISSN = {0017-0895},
+ CODEN = {GLMJAS},
+ MRCLASS = {11F11 (11F33 11G10)},
+ MRNUMBER = {819838 (88a:11041},
+MRREVIEWER = {G. Frey},
+ URL = {http://dx.doi.org/10.1017/S0017089500006170},
+}
+
+%%%%
+
+@book {rubin00,
+ MRKEY = {MR1749177},
+ AUTHOR = {Rubin, Karl},
+ TITLE = {Euler systems},
+ SERIES = {Annals of Mathematics Studies},
+ VOLUME = {147},
+ NOTE = {Hermann Weyl Lectures. The Institute for Advanced Study},
+ PUBLISHER = {Princeton University Press},
+ ADDRESS = {Princeton, NJ},
+ YEAR = {2000},
+ PAGES = {xii+227},
+ ISBN = {0-691-05075-9; 0-691-05076-7},
+ MRCLASS = {11R23 (11G40 11R34 11R42)},
+ MRNUMBER = {1749177 (2001g:11170},
+MRREVIEWER = {Jan Nekov{\'a}{\v{r}}},
+}
+
+%%%%
+
+
+%%%%
+
+@article {saitosato10,
+ MRKEY = {MR2804264},
+ AUTHOR = {Saito, Shuji and Sato, Kanetomo},
+ TITLE = {A {$p$}-adic regulator map and finiteness results for
+ arithmetic schemes},
+ JOURNAL = {Doc. Math.},
+ FJOURNAL = {Documenta Mathematica},
+ YEAR = {2010},
+ NUMBER = {Extra volume: Andrei A. Suslin sixtieth birthday},
+ PAGES = {525--594},
+ ISSN = {1431-0635},
+ MRCLASS = {14G40 (11G25 14C15 14C25 19F27)},
+ MRNUMBER = {2804264 (2012g:14044},
+MRREVIEWER = {Damian Roessler},
+}
+
+%%%%
+
+@incollection {scholl98,
+ MRKEY = {MR1696501},
+ AUTHOR = {Scholl, A. J.},
+ TITLE = {An introduction to {K}ato's {E}uler systems},
+ BOOKTITLE = {Galois representations in arithmetic algebraic geometry
+ ({D}urham, 1996)},
+ SERIES = {London Math. Soc. Lecture Note Ser.},
+ VOLUME = {254},
+ PAGES = {379--460},
+ PUBLISHER = {Cambridge Univ. Press},
+ ADDRESS = {Cambridge},
+ YEAR = {1998},
+ MRCLASS = {11G40 (11G16 11G18 11S25 14F30 19F15 19F27)},
+ MRNUMBER = {1696501 (2000g:11057},
+MRREVIEWER = {Amnon Besser},
+ URL = {http://dx.doi.org/10.1017/CBO9780511662010.011},
+}
+
+%%%%
+
+@article {shahidi81,
+ MRKEY = {MR610479},
+ AUTHOR = {Shahidi, Freydoon},
+ TITLE = {On certain {$L$}-functions},
+ JOURNAL = {Amer. J. Math.},
+ FJOURNAL = {American Journal of Mathematics},
+ VOLUME = {103},
+ YEAR = {1981},
+ NUMBER = {2},
+ PAGES = {297--355},
+ ISSN = {0002-9327},
+ CODEN = {AJMAAN},
+ MRCLASS = {10D15 (10D40 22E45 22E55)},
+ MRNUMBER = {610479 (82i:10030},
+MRREVIEWER = {Stephen Gelbart},
+ URL = {http://dx.doi.org/10.2307/2374219},
+}
+
+%%%%
+
+@article {shimura76,
+ MRKEY = {MR0434962},
+ AUTHOR = {Shimura, Goro},
+ TITLE = {The special values of the zeta functions associated with cusp
+ forms},
+ JOURNAL = {Comm. Pure Appl. Math.},
+ FJOURNAL = {Communications on Pure and Applied Mathematics},
+ VOLUME = {29},
+ YEAR = {1976},
+ NUMBER = {6},
+ PAGES = {783--804},
+ ISSN = {0010-3640},
+ MRCLASS = {10D15 (10H10)},
+ MRNUMBER = {0434962 (55 \#7925},
+MRREVIEWER = {K.-B. Gundlach},
+}
+
+%%%%
+
+
+%%%%
+
+@book {shimura00,
+ MRKEY = {MR1780262},
+ AUTHOR = {Shimura, Goro},
+ TITLE = {Arithmeticity in the theory of automorphic forms},
+ SERIES = {Mathematical Surveys and Monographs},
+ VOLUME = {82},
+ PUBLISHER = {American Mathematical Society},
+ ADDRESS = {Providence, RI},
+ YEAR = {2000},
+ PAGES = {x+302},
+ ISBN = {0-8218-2671-9},
+ MRCLASS = {11F67 (11-02 11F30 11F41 11F55)},
+ MRNUMBER = {1780262 (2001k:11086},
+MRREVIEWER = {Hideshi Takayanagi},
+}
+
+%%%%
+
+@incollection {swinnertondyer72,
+ MRKEY = {MR0406931},
+ AUTHOR = {Swinnerton-Dyer, H. P. F.},
+ TITLE = {On {$l$}-adic representations and congruences for coefficients
+ of modular forms},
+ BOOKTITLE = {Modular functions of one variable, {III} ({P}roc. {I}nternat.
+ {S}ummer {S}chool, {U}niv. {A}ntwerp, 1972)},
+ PAGES = {1--55. Lecture Notes in Math., Vol. 350},
+ PUBLISHER = {Springer},
+ ADDRESS = {Berlin},
+ YEAR = {1973},
+ MRCLASS = {10D05},
+ MRNUMBER = {0406931 (53 \#10717a},
+MRREVIEWER = {K.-B. Gundlach},
+}
+
+%%%%
+
+@article {voevodsky02,
+ MRKEY = {MR1883180},
+ AUTHOR = {Voevodsky, Vladimir},
+ TITLE = {Motivic cohomology groups are isomorphic to higher {C}how
+ groups in any characteristic},
+ JOURNAL = {Int. Math. Res. Not.},
+ FJOURNAL = {International Mathematics Research Notices},
+ YEAR = {2002},
+ NUMBER = {7},
+ PAGES = {351--355},
+ ISSN = {1073-7928},
+ MRCLASS = {14F42 (14C25 19E15)},
+ MRNUMBER = {1883180 (2003c:14021},
+MRREVIEWER = {Thomas Geisser},
+ URL = {http://dx.doi.org/10.1155/S107379280210403X},
+}
+
+%%%%
+
+
diff --git a/Master/texmf-dist/doc/support/crossrefware/crossrefware.pdf b/Master/texmf-dist/doc/support/crossrefware/crossrefware.pdf
new file mode 100644
index 00000000000..bfc0c19f196
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/crossrefware.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/crossrefware/head.ltx b/Master/texmf-dist/doc/support/crossrefware/head.ltx
new file mode 100644
index 00000000000..552b829d579
--- /dev/null
+++ b/Master/texmf-dist/doc/support/crossrefware/head.ltx
@@ -0,0 +1,28 @@
+\documentclass{article}
+\usepackage{makeidx}
+\usepackage{librecaslon}
+\usepackage[hidelinks]{hyperref}
+\makeindex
+\begin{document}
+\title{Crossrefware documentation}
+\author{Boris Veytsman}
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+
+Crossrefware is a collection of Perl scripts used to help to submit
+the documents to \url{http://www.crossref.org}.
+
+To use scrips you need a number of standard Perl libraries:
+\begin{enumerate}
+\item \path{Text::BibTeX} by Greg Ward,
+\item \path{TeX::Encode} by Timothy D Brody
+\end{enumerate}
+They are included in most standard Perl distributions, or can be
+installed from \url{http://www.cpan.org}.
+
+
+I am grateful to Josko Plazonic from Princeton Math Dept whose
+(unpublished) Python script was an inspiration for this suite.
+
diff --git a/Master/texmf-dist/scripts/crossrefware/bibdoiadd.pl b/Master/texmf-dist/scripts/crossrefware/bibdoiadd.pl
new file mode 100755
index 00000000000..b9be8dec824
--- /dev/null
+++ b/Master/texmf-dist/scripts/crossrefware/bibdoiadd.pl
@@ -0,0 +1,267 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+bibdoiadd.pl - add DOI numbers to papers in a given bib file
+
+=head1 SYNOPSIS
+
+bibdoiadd [B<-c> I<config_file>] [B<-o> I<output>] I<bib_file>
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c> I<config_file>
+
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the name for the
+output file is formed by adding C<_doi> to the input file
+
+=back
+
+=head1 DESCRIPTION
+
+The script reads a BibTeX file. It checks whether the entries have
+DOIs. If now, tries to contact http://www.crossref.org to get the
+corresponding DOI. The result is a BibTeX file with the fields
+C<doi=...> added.
+
+The name of the output file is either set by the B<-o> option or
+is derived by adding the suffix C<_doi> to the output file.
+
+There are two options for making queries with Crossref: free account
+and paid membership. In the first case you still must register with
+Crossref and are limited to a small number of queries, see the
+agreement at
+C<http://www.crossref.org/01company/free_services_agreement.html>. In
+the second case you have a username and password, and can use them for
+automatic queries. I am not sure whether the use of this script is
+allowed for the free account holders. Anyway if you try to add DOI
+to a large number of entries, you should register as a paid member.
+
+
+
+=head1 CONFIGURATION FILE
+
+The configuration file is mostly self-explanatory: it has comments
+(starting with C<#>) and assginments in the form
+
+ $field = value ;
+
+The important parameters are C<$mode> (C<'free'> or C<'paid'>,
+C<$email> (for free users) and C<$username> & C<$password> for paid
+members.
+
+
+=head1 EXAMPLES
+
+ bibdoiadd -c bibdoiadd.cfg citations.bib > result.bib
+ bibdoiadd -c bibdoiadd.cfg citations.bib -o result.bib
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+=cut
+
+use strict;
+use Text::BibTeX;
+use Text::BibTeX::Name;
+use Getopt::Std;
+use URI::Escape;
+use LWP::Simple;
+use TeX::Encode;
+use Encode;
+use HTML::Entities;
+use XML::Entities;
+
+my $USAGE="USAGE: $0 [-c config] [-o output] file\n";
+my $VERSION = <<END;
+bibdoiadd v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+my %opts;
+getopts('c:o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+################################################################
+# Defaults and parameters
+################################################################
+
+my $inputfile = shift;
+
+my $outputfile = $inputfile;
+
+$outputfile =~ s/\.([^\.]*)$/_doi.$1/;
+
+if ($opts{o}) {
+ $outputfile = $opts{o};
+}
+
+our $mode='free';
+our $email;
+our $username;
+our $password;
+
+if ($opts{c}) {
+ if (-r $opts{c}) {
+ push @INC, ".";
+ require $opts{c};
+ } else {
+ die "Cannot read options $opts{c}. $USAGE";
+ }
+}
+
+
+# Check the consistency
+
+if ($mode eq 'free' && !length($email)) {
+ die "Crossref requires a registered e-mail for the free mode queries\n";
+}
+
+if ($mode eq 'paid' && (!length($username) || !length($password))) {
+ die
+ "Crossref requires a username and password for the paid mode queries\n";
+}
+
+my $input = new Text::BibTeX::File "$inputfile" or
+ die "Cannot BibTeX file $inputfile\n";
+my $output = new Text::BibTeX::File "> $outputfile" or
+ die "Cannot write to $outputfile\n";
+
+my $prefix =
+ "http://www.crossref.org/openurl?redirect=false";
+if ($mode eq 'free') {
+ $prefix .= '&pid='.uri_escape($email);
+} else {
+ $prefix .= '&pid='.uri_escape($username).":".
+ uri_escape($password);
+}
+
+# Processing the input
+while (my $entry = new Text::BibTeX::Entry $input) {
+ if (!$entry->parse_ok()) {
+ print STDERR "Cannot understand entry: ";
+ $entry->print(*STDERR);
+ print STDERR "Skipping this entry\n";
+ next;
+ }
+ if (!(($entry->metatype() eq BTE_REGULAR) &&
+ ($entry->type() eq 'article'))) {
+ $entry->write($output);
+ next;
+ }
+ if ($entry->exists('doi')) {
+ $entry->write($output);
+ next;
+ }
+
+
+ # Now we have an entry with no doi. Let us get to work.
+ my $doi = GetDoi($prefix,$entry);
+ if (length($doi)) {
+ $entry->set('doi',$doi);
+ }
+ $entry->write($output);
+
+}
+
+$input->close();
+$output->close();
+exit 0;
+
+###############################################################
+# Getting one doi
+###############################################################
+
+sub GetDoi {
+ my ($url,$entry) = @_;
+ if ($entry->exists('issn')) {
+ $url .= "&issn=".uri_escape(SanitizeText($entry->get('issn')));
+ }
+ if ($entry->exists('journal')) {
+ $url .= "&title=".uri_escape(SanitizeText($entry->get('journal')));
+ }
+ my @names=$entry->names ('author');
+ if (scalar(@names)) {
+ my @lastnames = $names[0]->part ('last');
+ if (scalar(@lastnames)) {
+ my $lastname = SanitizeText(join(' ',@lastnames));
+ $url .= "&aulast=".uri_escape($lastname);
+ }
+ }
+ if ($entry->exists('volume')) {
+ $url .= "&volume=".uri_escape($entry->get('volume'));
+ }
+ if ($entry->exists('number')) {
+ $url .= "&issue=".uri_escape($entry->get('number'));
+ }
+ if ($entry->exists('pages')) {
+ my $pages=$entry->get('pages');
+ $pages =~ s/-.*$//;
+ $url .= "&spage=".uri_escape($pages);
+ }
+ if ($entry->exists('year')) {
+ $url .= "&date=".uri_escape($entry->get('year'));
+ }
+
+ my $result=get($url);
+
+ if ($result =~ m/<doi [^>]*>(.*)<\/doi>/) {
+ return $1;
+ } else {
+ return "";
+ }
+}
+
+###############################################################
+# Sanitization of a text string
+###############################################################
+sub SanitizeText {
+ my $string = shift;
+ # There is a bug in the decode function, which we need to work
+ # around: it adds space to constructions like \o x
+ $string =~ s/(\\[a-zA-Z])\s+/$1/g;
+ $string =~ s/\\newblock//g;
+ $string =~ s/\\urlprefix//g;
+ $string =~ s/\\emph//g;
+ $string =~ s/\\enquote//g;
+ $string =~ s/\\url/URL: /g;
+ $string =~ s/\\doi/DOI: /g;
+ $string =~ s/\\\\/ /g;
+ $string = decode('latex', $string);
+ $string =~ s/\\[a-zA-Z]+/ /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/[\[\{\}\]]/ /g;
+ $string = encode_entities($string);
+ $string = XML::Entities::numify('all', $string);
+ $string =~ s/amp;//g;
+ $string =~ s/~/ /g;
+ $string =~ s/\s*([\.;,])/$1/g;
+ return $string;
+}
diff --git a/Master/texmf-dist/scripts/crossrefware/bibzbladd.pl b/Master/texmf-dist/scripts/crossrefware/bibzbladd.pl
new file mode 100755
index 00000000000..4059b7b0a12
--- /dev/null
+++ b/Master/texmf-dist/scripts/crossrefware/bibzbladd.pl
@@ -0,0 +1,215 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+bibzbladd.pl - add Zbl numbers to papers in a given bib file
+
+=head1 SYNOPSIS
+
+bibzbladd [B<-o> I<output>] I<bib_file>
+
+=head1 OPTIONS
+
+=over 4
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the name for the
+output file is formed by adding C<_zbl> to the input file
+
+=back
+
+=head1 DESCRIPTION
+
+The script reads a BibTeX file. It checks whether the entries have
+Zbls. If now, tries to contact internet to get the numbers. The
+result is a BibTeX file with the fields
+C<zblnumber=...> added.
+
+The name of the output file is either set by the B<-o> option or
+is derived by adding the suffix C<_zbl> to the output file.
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2014 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+=cut
+
+use strict;
+use Text::BibTeX;
+use Text::BibTeX::Name;
+use Getopt::Std;
+use URI::Escape;
+use LWP::UserAgent;
+use TeX::Encode;
+
+my $USAGE="USAGE: $0 [-o output] file\n";
+my $VERSION = <<END;
+bibzbladd v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+my %opts;
+getopts('o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+################################################################
+# Defaults and parameters
+################################################################
+
+my $inputfile = shift;
+
+my $outputfile = $inputfile;
+
+$outputfile =~ s/\.([^\.]*)$/_zbl.$1/;
+
+if ($opts{o}) {
+ $outputfile = $opts{o};
+}
+
+my $input = new Text::BibTeX::File "$inputfile" or
+ die "Cannot BibTeX file $inputfile\n";
+my $output = new Text::BibTeX::File "> $outputfile" or
+ die "Cannot write to $outputfile\n";
+
+
+# Creating the HTTP parameters
+my $mirror =
+ "http://www.zentralblatt-math.org/MIRROR/zmath/en/search/";
+my $userAgent = LWP::UserAgent->new;
+
+# Processing the input
+while (my $entry = new Text::BibTeX::Entry $input) {
+ if (!$entry->parse_ok()) {
+ print STDERR "Cannot understand entry: ";
+ $entry->print(*STDERR);
+ print STDERR "Skipping this entry\n";
+ next;
+ }
+ if (!(($entry->metatype() eq BTE_REGULAR))) {
+ $entry->write($output);
+ next;
+ }
+ if ($entry->exists('zblnumber')) {
+ $entry->write($output);
+ next;
+ }
+
+
+ # Now we have an entry with no Zbl. Let us get to work.
+ my $zbl = GetZbl($entry, $userAgent, $mirror);
+ if (length($zbl)) {
+ $entry->set('zblnumber',$zbl);
+ }
+ $entry->write($output);
+
+}
+
+$input->close();
+$output->close();
+exit 0;
+
+###############################################################
+# Getting one Zbl
+###############################################################
+
+sub GetZbl {
+ my $entry=shift;
+ my $userAgent=shift;
+ my $mirror=shift;
+
+ my @query;
+
+ my @names=$entry->names ('author');
+ if (scalar(@names)) {
+ foreach my $name (@names) {
+ my @lastnames = $name->part ('last');
+ if (scalar(@lastnames)) {
+ foreach my $lastname (@lastnames) {
+ push @query, "au:$lastname";
+ }
+ }
+ }
+ }
+ if (my $title = $entry->get('title')) {
+ push @query, "ti:$title";
+ }
+
+ if (my $year = $entry->get('year')) {
+ push @query, "py:$year";
+ }
+
+ if (my $year = $entry->get('year')) {
+ push @query, "py:$year";
+ }
+
+ my $type = $entry->type;
+ if ($type eq 'article') {
+ push @query, "dt:j";
+ }
+ if ($type eq 'book') {
+ push @query, "dt:b";
+ }
+ if ($type eq 'inproceedings' || $type eq 'incollection') {
+ push @query, "dt:a";
+ }
+
+ my $source = "";
+ if ($type eq 'article') {
+ if ($entry->get('journal')) {
+ $source .= $entry->get('journal');
+ }
+ if (my $vol=$entry->get('volume')) {
+ $source .= ",$vol";
+ }
+ if (my $pages=$entry->get('pages')) {
+ $source .= ",$pages";
+ }
+ } else {
+ if (my $bt=$entry->get('booktitle')) {
+ $source .= "$bt";
+ }
+ }
+
+ if ($source) {
+ push @query, "so:$source";
+ }
+
+
+ my $qstring = join(" & ", @query);
+# print STDERR "$qstring\n";
+
+ my $form;
+
+ $form->{name}='form';
+ $form->{q} = $qstring;
+ $form->{type} = "ascii";
+ $form->{submit} = 'Search';
+
+ my $response = $userAgent->post($mirror, $form);
+ if ($response->decoded_content =~ /^an:\s*Zbl\s*(\S+)\s*$/m) {
+ return $1;
+ } else {
+ return ("");
+ }
+}
+
diff --git a/Master/texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl b/Master/texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl
new file mode 100755
index 00000000000..5ceee5f13df
--- /dev/null
+++ b/Master/texmf-dist/scripts/crossrefware/ltx2crossrefxml.pl
@@ -0,0 +1,460 @@
+#!/usr/bin/env perl
+
+=pod
+
+=head1 NAME
+
+ltx2crossrefxml.pl - a tool for creation of XML files for submitting to crossref.
+
+=head1 SYNOPSIS
+
+ltx2crossrefxml [B<-c> I<config_file>] [B<-o> I<output>] I<latex_file> I<latex_file> ...
+
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<-c> I<config_file>
+
+Configuration file. If this file is absent, some defaults are used.
+See below for its format.
+
+
+=item B<-o> I<output>
+
+Output file. If this option is not used, the XML is output to stdout.
+
+=back
+
+=head1 DESCRIPTION
+
+The script takes a number of latex files and produces an XML file
+ready for submission to Crossref. Each file must be previously processed
+by LaTeX with the newest C<resphilosophica> package: the package creates
+the file C<.rti> wtih the information about the bibliography.
+
+The processing of reference list is at present rather limited: only so
+called unstructured references are produced.
+
+=head1 CONFIGURATION FILE FORMAT
+
+The configuration file is mostly self-explanatory: it has comments
+(starting with C<#>) and assginments in the form
+
+ $field = value ;
+
+=head1 EXAMPLES
+
+ ltx2crossrefxml.pl ../paper1/paper1.tex ../paper2/paper2.tex -o result.xml
+
+ ltx2crossrefxml.pl -c myconfig.cnf paper.tex -o paper.xml
+
+=head1 AUTHOR
+
+Boris Veytsman
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2012 Boris Veytsman
+
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+L<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
+extent permitted by law.
+
+
+=cut
+
+ use strict;
+ use POSIX qw(strftime);
+ use Text::BibTeX;
+ use Text::BibTeX::Name;
+ use TeX::Encode;
+ use Encode;
+ use HTML::Entities;
+ use XML::Entities;
+ use File::Basename;
+ use File::Spec;
+ my $USAGE="USAGE: $0 [-c config] [-o output] file1 file2 ...\n";
+my $VERSION = <<END;
+ltx2crossrefxml v1.0
+This is free software. You may redistribute copies of it under the
+terms of the GNU General Public License
+http://www.gnu.org/licenses/gpl.html. There is NO WARRANTY, to the
+extent permitted by law.
+$USAGE
+END
+ use Getopt::Std;
+ my %opts;
+ getopts('c:o:hV',\%opts) or die $USAGE;
+
+if ($opts{h} || $opts{V}){
+ print $VERSION;
+ exit 0;
+}
+
+ ################################################################
+ # Defaults and parameters
+ ################################################################
+
+ *OUT=*STDOUT;
+
+ if (defined($opts{o})) {
+ open (OUT, ">$opts{o}") or die "Cannot open file $opts{o} for writing\n";
+ }
+
+
+ our $depositorName='DEPOSITOR_NAME';
+ our $depositorEmail='DEPOSITOR_EMAIL';
+ our $registrant='REGISTRANT';
+ our $fullTitle = "FULL TITLE";
+ our $abbrevTitle = "ABBR. Title.";
+ our $issn = "1234-5678";
+ our $coden = "CODEN";
+ our $batchId="ltx2crossref$$";
+ our $timestamp=strftime("%Y%m%d%H%M%S", gmtime);
+
+
+ if ($opts{c}) {
+ if (-r $opts{c}) {
+ require $opts{c};
+ } else {
+ die "Cannot read options $opts{c}. $USAGE";
+ }
+ }
+
+
+
+ PrintHead();
+
+ #
+ # The hash %papers. Keys year->vol->issue->number
+ #
+ my %papers;
+
+ foreach my $file (@ARGV) {
+ AddPaper($file);
+ }
+
+ foreach my $year (keys %papers) {
+ foreach my $volume (keys %{$papers{$year}}) {
+ foreach my $issue (keys %{$papers{$year}->{$volume}}) {
+ PrintIssueHead($year, $volume, $issue);
+ my $paperList = $papers{$year}->{$volume}->{$issue};
+ foreach my $paper (@{$paperList}) {
+ PrintPaper($paper);
+ }
+ }
+ }
+
+ }
+
+ PrintTail();
+
+ exit(0);
+
+
+#####################################################
+# Printing the head and the tail
+#####################################################
+
+sub PrintHead {
+
+
+ print OUT <<END;
+<doi_batch xmlns="http://www.crossref.org/schema/4.3.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="4.3.0" xsi:schemaLocation="http://www.crossref.org/schema/4.3.0 http://www.crossref.org/schema/deposit/crossref4.3.0.xsd">
+ <head>
+ <doi_batch_id>$batchId</doi_batch_id>
+ <timestamp>$timestamp</timestamp>
+ <depositor>
+ <name>$depositorName</name>
+ <email_address>$depositorEmail</email_address>
+ </depositor>
+ <registrant>$registrant</registrant>
+ </head>
+ <body>
+ <journal>
+ <journal_metadata language="en">
+ <full_title>$fullTitle</full_title>
+ <abbrev_title>$abbrevTitle</abbrev_title>
+ <issn>$issn</issn>
+ <coden>$coden</coden>
+ </journal_metadata>
+END
+
+}
+
+sub PrintTail {
+ print OUT <<END;
+ </journal>
+ </body>
+</doi_batch>
+END
+
+return;
+}
+
+
+#######################################################
+# Adding one paper
+#######################################################
+
+sub AddPaper {
+ my $file = shift;
+ my ($name,$path,$suffix) = fileparse($file, '\.[^\.]*$');
+ my $rpifile = File::Spec->catfile($path, "$name.rpi");
+ open (RPI, $rpifile) or die
+ "Cannot find $rpifile. Did you process $file?\n";
+ my %data;
+ while (<RPI>) {
+ chomp;
+ if (/^%([^=]*)\s*=\s*(.*)\s*$/) {
+ $data{$1}=$2;
+ }
+ }
+ close RPI;
+ my @bibliography;
+ foreach my $bibfile ($file, File::Spec->catfile($path, "$name.bbl")) {
+ @bibliography = (@bibliography,
+ AddBibliography($bibfile));
+ }
+ $data{'bibliography'}=\@bibliography;
+ push @{$papers{$data{year}}->{$data{volume}}->{$data{issue}}}, \%data;
+}
+
+##############################################################
+# Reading a list of papers and adding it to the
+# bibliography
+##############################################################
+
+sub AddBibliography {
+ my $bibfile = shift;
+ open (BIB, $bibfile) or return;
+ my $insidebibliography = 0;
+ my $currpaper="";
+ my @result;
+ my $key;
+ while (<BIB>) {
+ chomp;
+ if (/^\s*\\bibitem(?:\[.*\])?+\{(.+)\}/) {
+ if ($insidebibliography) {
+ if ($currpaper) {
+ my %paperhash;
+ $paperhash{$key}=$currpaper;
+ push @result, \%paperhash;
+ }
+ }
+ $key = $1;
+ $currpaper="";
+ $insidebibliography=1;
+ next;
+ }
+ if (/^\s*\\end\{thebibliography\}/) {
+ if ($currpaper) {
+ my %paperhash;
+ $paperhash{$key}=$currpaper;
+ push @result, \%paperhash;
+ }
+ $currpaper="";
+ $insidebibliography=0;
+ next;
+ }
+ if ($insidebibliography) {
+ $currpaper .= " $_";
+ }
+ }
+ close BIB;
+ return @result;
+}
+
+#################################################################
+# Printing information about one issue
+#################################################################
+
+sub PrintIssueHead {
+ my ($year, $volume, $issue) = @_;
+ print OUT <<END;
+ <journal_issue>
+ <publication_date media_type="print">
+ <year>$year</year>
+ </publication_date>
+ <journal_volume>
+ <volume>$volume</volume>
+ </journal_volume>
+ <issue>$issue</issue>
+ </journal_issue>
+END
+}
+
+###############################################################
+# Printing information about one paper
+###############################################################
+sub PrintPaper {
+ my $paper = shift;
+ my $title=SanitizeText($paper->{title});
+ my $url=GetURL($paper);
+ print OUT <<END;
+ <journal_article publication_type="full_text">
+ <titles>
+ <title>
+ $title
+ </title>
+ </titles>
+ <contributors>
+END
+my @authors = split /\s*\\and\s*/, $paper->{authors};
+ my $seq='first';
+ foreach my $author (@authors) {
+ print OUT <<END;
+ <person_name sequence="$seq" contributor_role="author">
+END
+$seq='additional';
+ PrintAuthor($author);
+ print OUT <<END;
+ </person_name>
+END
+
+ }
+
+ print OUT <<END;
+ </contributors>
+ <publication_date media_type="print">
+ <year>$paper->{year}</year>
+ </publication_date>
+ <pages>
+ <first_page>$paper->{startpage}</first_page>
+ <last_page>$paper->{endpage}</last_page>
+ </pages>
+ <doi_data>
+ <doi>$paper->{doi}</doi>
+ <timestamp>$timestamp</timestamp>
+ <resource>$url</resource>
+ </doi_data>
+END
+
+if (scalar(@{$paper->{bibliography}})) {
+ print OUT <<END;
+ <citation_list>
+END
+ foreach my $citation (@{$paper->{bibliography}}) {
+ PrintCitation($citation);
+ }
+ print OUT <<END;
+ </citation_list>
+END
+}
+
+ print OUT <<END;
+ </journal_article>
+END
+
+
+}
+
+
+###############################################################
+# Sanitization of a text string
+###############################################################
+sub SanitizeText {
+ my $string = shift;
+ # There is a bug in the decode function, which we need to work
+ # around: it adds space to constructions like \o x
+ $string =~ s/(\\[a-zA-Z])\s+/$1/g;
+ $string =~ s/\\newblock//g;
+ $string =~ s/\\bgroup//g;
+ $string =~ s/\\egroup//g;
+ $string =~ s/\\scshape//g;
+ $string =~ s/\\urlprefix//g;
+ $string =~ s/\\emph//g;
+ $string =~ s/\\textbf//g;
+ $string =~ s/\\enquote//g;
+ $string =~ s/\\url/URL: /g;
+ $string =~ s/\\doi/DOI: /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/\$//g;
+ $string = decode('latex', $string);
+ $string =~ s/\\[a-zA-Z]+/ /g;
+ $string =~ s/\\\\/ /g;
+ $string =~ s/[\[\{\}\]]/ /g;
+ $string = encode_entities($string);
+ $string = XML::Entities::numify('all', $string);
+ $string =~ s/amp;//g;
+ $string =~ s/~/ /g;
+ $string =~ s/\s*([\.;,])/$1/g;
+ return $string;
+}
+
+################################################################
+# Printing one author
+################################################################
+sub PrintAuthor {
+ my $author=shift;
+
+ my $person=new Text::BibTeX::Name ($author);
+
+ if ($person->part('first')) {
+ my @tokens = $person->part('first');
+ my $line = join(" ", @tokens);
+ $line = SanitizeText($line);
+ print OUT <<END;
+ <given_name>$line</given_name>
+END
+
+ }
+
+ if ($person->part('last')) {
+ my $line = SanitizeText($person->part('last'));
+ print OUT <<END;
+ <surname>$line</surname>
+END
+
+ }
+
+ if ($person->part('jr')) {
+ my $line = SanitizeText($person->part('jr'));
+ print OUT <<END;
+ <suffix>$line</suffix>
+END
+
+ }
+
+}
+
+#############################################################
+# Printing citations
+#############################################################
+sub PrintCitation {
+ my $paperhash=shift;
+ foreach my $key (keys (%{$paperhash})) {
+ my $citation=$paperhash->{$key};
+ $citation=SanitizeText($citation);
+
+ print OUT <<END;
+ <citation key="$key">
+ <unstructured_citation>
+ $citation
+ </unstructured_citation>
+ </citation>
+END
+}
+
+}
+
+##############################################################
+# Calculating URL
+##############################################################
+
+sub GetURL {
+ my $paper = shift;
+
+ my $result;
+ if ($paper->{paperUrl}) {
+ $result= $paper->{paperUrl}
+ } else {
+ my $doi=$paper->{doi};
+ $result= 'http://www.pdcnet.org/oom/service?url_ver=Z39.88-2004&rft_val_fmt=&rft.imuse_synonym=resphilosophica&rft.DOI='.$doi.'&svc_id=info:www.pdcnet.org/collection';
+ }
+ $result =~ s/&/&#38;/g;
+ return $result;
+}
diff --git a/Master/texmf-dist/tex/latex/crossrefware/bibdoiadd.cfg b/Master/texmf-dist/tex/latex/crossrefware/bibdoiadd.cfg
new file mode 100644
index 00000000000..48dd0b244c4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/crossrefware/bibdoiadd.cfg
@@ -0,0 +1,9 @@
+$mode = 'paid'; # Other option is 'free'
+$email = 'user@company.domain';
+$username = 'XXXXXX'; # For paid users
+$password = 'XXXXXX'; # For paid users
+
+
+# Last line must be 1;
+
+1;
diff --git a/Master/texmf-dist/tex/latex/crossrefware/ltx2crossrefxml.cfg b/Master/texmf-dist/tex/latex/crossrefware/ltx2crossrefxml.cfg
new file mode 100644
index 00000000000..e6a1459e180
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/crossrefware/ltx2crossrefxml.cfg
@@ -0,0 +1,22 @@
+#
+# Configuration file for ltx2crossrefxml.pl
+#
+
+# Name of the depositor
+$depositorName='NAME';
+
+# Email
+$depositorEmail='EMAIL';
+
+# Organization
+$registrant='ORGANIZATION';
+
+# The rest is self-evident
+$fullTitle = "TITLE";
+$abbrevTitle = "TTL";
+$issn = "NNNN-NNNNNN";
+$coden = "CODEN";
+
+
+# The last line must be 1;
+1; \ No newline at end of file
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index 77e31aa83fa..54bc764db88 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -149,7 +149,7 @@ my @TLP_working = qw(
countriesofeurope counttexruns courier-scaled courseoutline coursepaper
coverpage covington
cprotect
- crbox crop crossreference crossword crosswrd cryst
+ crbox crop crossreference crossrefware crossword crosswrd cryst
cs csbulletin cslatex csplain csquotes csquotes-de csvsimple csvtools cstex
ctanify ctanupload ctable ctex ctex-faq
cursolatex cuisine
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 6ba1a8e3e45..c187df5091e 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -2509,6 +2509,7 @@ $standardxmt='\.xmt';
'bundledoc' => '(arlatex|bundledoc)$',
'checkcites' => '\.lua$',
'convbkmk' => '\.rb$',
+ 'crossrefware' => '\.pl$',
'ctanify' => '^ctanify$',
'ctanupload' => '\.pl$',
'de-macro' => 'de-macro',
@@ -2598,6 +2599,7 @@ $standardxmt='\.xmt';
# packages which have man pages to install.
%specialmans = (
'bundledoc' => '\.1$',
+ 'crossrefware' => '\.1$',
'ctanify' => '\.1$',
'dosepsbin' => 'dosepsbin.man',
'epstopdf' => 'r?epstopdf.1|epstopdf.man1.pdf', # don't keep pdf
@@ -3095,7 +3097,7 @@ sub runins {
print "\t RUNINS $thispatt\n";
for (grep (/$thispatt/, @filenames)) {
# do not infinite loop on docstrip "output directory", e.g., fltpoint.
- &runjob ("yes | sed 10q | env MKTEXTFM=1 MKTEXMF=1 MKTEXPK=0 $insrunner $_");
+ &runjob ("yes | sed 10q | env MKTEXTFM=0 MKTEXMF=0 MKTEXPK=0 $insrunner $_");
# in the case of fullblck (et al.?), the .dtx creates the .ins (so the
# .ins is not in @filenames), and the .ins creates the .sty.
diff --git a/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc
index 835c61e6d6b..8b1280a68e7 100644
--- a/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-bibtexextra.tlpsrc
@@ -59,6 +59,7 @@ depend chembst
depend chscite
depend collref
depend compactbib
+depend crossrefware
depend custom-bib
depend din1505
depend dk-bib
diff --git a/Master/tlpkg/tlpsrc/crossrefware.tlpsrc b/Master/tlpkg/tlpsrc/crossrefware.tlpsrc
new file mode 100644
index 00000000000..6929fb622ea
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/crossrefware.tlpsrc
@@ -0,0 +1,8 @@
+binpattern f bin/${ARCH}/bibdoiadd
+docpattern +f texmf-dist/doc/man/man1/bibdoiadd.*
+#
+binpattern f bin/${ARCH}/bibzbladd
+docpattern +f texmf-dist/doc/man/man1/bibzbladd.*
+#
+binpattern f bin/${ARCH}/ltx2crossrefxml
+docpattern +f texmf-dist/doc/man/man1/ltx2crossrefxml.*