diff options
author | Karl Berry <karl@freefriends.org> | 2009-11-28 01:34:49 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-11-28 01:34:49 +0000 |
commit | 174ebb955a1d029b8cf859d31a933fbf09b89463 (patch) | |
tree | 9dc999a2dc034f6d403bd834705ad2be8f3f708b /Master/texmf-dist | |
parent | 943aad72bf75cc0f512715ca64181c089a32ec11 (diff) |
new script bibexport 2.20 (11oct09)
git-svn-id: svn://tug.org/texlive/trunk@16219 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/bibtex/bst/bibexport/expkeys.bst | 47 | ||||
-rw-r--r-- | Master/texmf-dist/bibtex/bst/bibexport/export.bst | 456 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/bibexport/README | 24 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/bibexport/bibexport.pdf | bin | 0 -> 153962 bytes | |||
-rwxr-xr-x | Master/texmf-dist/scripts/bibexport/bibexport.sh | 178 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/bibexport/bibexport.dtx | 1072 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/bibexport/bibexport.ins | 69 |
7 files changed, 1846 insertions, 0 deletions
diff --git a/Master/texmf-dist/bibtex/bst/bibexport/expkeys.bst b/Master/texmf-dist/bibtex/bst/bibexport/expkeys.bst new file mode 100644 index 00000000000..4c7c2ae6299 --- /dev/null +++ b/Master/texmf-dist/bibtex/bst/bibexport/expkeys.bst @@ -0,0 +1,47 @@ +%% +%% This is file `expkeys.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% bibexport.dtx (with options: `expkeys') +%% +%% (c) 2005/02/27 Nicolas Markey <markey at lsv dot ens-cachan dot fr> +%% All rights reserved. +%% +%% This work may be distributed and/or modified under the conditions of +%% the LaTeX Project Public License, either version 1.3 of this license +%% or (at your option) any later version. The latest version of the +%% license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +ENTRY{}{}{} +READ +FUNCTION{export.key} +{ + "\citation{" cite$ "}" * * write$ newline$ +} +ITERATE{export.key} +%% +%% +%% End of file `expkeys.bst'. diff --git a/Master/texmf-dist/bibtex/bst/bibexport/export.bst b/Master/texmf-dist/bibtex/bst/bibexport/export.bst new file mode 100644 index 00000000000..11e3de2b995 --- /dev/null +++ b/Master/texmf-dist/bibtex/bst/bibexport/export.bst @@ -0,0 +1,456 @@ +%% +%% This is file `export.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% bibexport.dtx (with options: `export') +%% +%% (c) 2005/02/27 Nicolas Markey <markey at lsv dot ens-cachan dot fr> +%% All rights reserved. +%% +%% This work may be distributed and/or modified under the conditions of +%% the LaTeX Project Public License, either version 1.3 of this license +%% or (at your option) any later version. The latest version of the +%% license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2003/12/01 or later. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +FUNCTION{left.width}{#18} +FUNCTION{right.width}{#55} +FUNCTION{url.right.width}{#61} +FUNCTION{left.short.width}{#10} %% for @preamble +FUNCTION{right.long.width}{#63} +FUNCTION{left.delim}{"{"} +FUNCTION{right.delim}{"}"} +ENTRY{ + address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + abstract + doi + eid + isbn + issn + language + url +}{}{} +FUNCTION{not} +{ + {#0} + {#1} + if$ +} +FUNCTION{and} +{ + 'skip$ + {pop$ #0} + if$ +} +FUNCTION{or} +{ + {pop$ #1} + 'skip$ + if$ +} +INTEGERS{left.length right.length} +STRINGS{ s t } +FUNCTION{space.complete} +{ + 'left.length := + duplicate$ text.length$ left.length swap$ - + {duplicate$ #0 >} + { + swap$ " " * swap$ #1 - + } + while$ + pop$ +} +FUNCTION{split.string} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #1 substring$ " " = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + duplicate$ s swap$ #1 swap$ substring$ + swap$ + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +FUNCTION{split.url} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #1 substring$ "/" = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + duplicate$ s swap$ #1 swap$ substring$ + swap$ #1 + + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +FUNCTION{split.name} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #5 substring$ " and " = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + #4 + duplicate$ s swap$ #1 swap$ substring$ + swap$ + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +FUNCTION{field.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.string 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{abbrv.export} +{ + duplicate$ missing$ + 'skip$ + { + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.string 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{name.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.name 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{url.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + url.right.width split.url 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +MACRO{jan}{"export-jan"} +MACRO{feb}{"export-feb"} +MACRO{mar}{"export-mar"} +MACRO{apr}{"export-apr"} +MACRO{may}{"export-may"} +MACRO{jun}{"export-jun"} +MACRO{jul}{"export-jul"} +MACRO{aug}{"export-aug"} +MACRO{sep}{"export-sep"} +MACRO{oct}{"export-oct"} +MACRO{nov}{"export-nov"} +MACRO{dec}{"export-dec"} +MACRO{acmcs}{"export-acmcs"} +MACRO{acta}{"export-acta"} +MACRO{cacm}{"export-cacm"} +MACRO{ibmjrd}{"export-ibmjrd"} +MACRO{ibmsj}{"export-ibmsj"} +MACRO{ieeese}{"export-ieeese"} +MACRO{ieeetc}{"export-ieeetc"} +MACRO{ieeetcad}{"export-ieeetcad"} +MACRO{ipl}{"export-ipl"} +MACRO{jacm}{"export-jacm"} +MACRO{jcss}{"export-jcss"} +MACRO{scp}{"export-scp"} +MACRO{sicomp}{"export-sicomp"} +MACRO{tocs}{"export-tocs"} +MACRO{tods}{"export-tods"} +MACRO{tog}{"export-tog"} +MACRO{toms}{"export-toms"} +MACRO{toois}{"export-poois"} +MACRO{toplas}{"export-toplas"} +MACRO{tcs}{"export-tcs"} +INTEGERS{ intxt } +FUNCTION{remove.exports.from.months} +{ + #0 'intxt := + duplicate$ missing$ + 'skip$ + {'t := + "" + {t #1 #1 substring$ "" = not} + { + t #1 #7 substring$ "export-" = + {intxt + {right.delim * #0 'intxt :=} + 'skip$ + if$ + duplicate$ "" = + 'skip$ + {" # " *} + if$ + t #8 #3 substring$ * + t #11 global.max$ substring$ 't :=} + {intxt + 'skip$ + {duplicate$ "" = + {} + {" # " *} + if$ + left.delim * #1 'intxt :=} + if$ + t #1 #1 substring$ * + t #2 global.max$ substring$ 't :=} + if$ + } + while$ + intxt + {right.delim *} + 'skip$ + if$ + } + if$ +} +FUNCTION{remove.export.from.journals} +{ + duplicate$ missing$ + 'skip$ + { + duplicate$ #1 #7 substring$ "export-" = + {#8 global.max$ substring$} + {left.delim swap$ + right.delim * *} + if$ + } + if$ +} +FUNCTION{entry.export.standard} +{ + "address" address field.export + "author" author name.export + "booktitle" booktitle field.export + "chapter" chapter field.export + "crossref" crossref field.export + "edition" edition field.export + "editor" editor name.export + "howpublished" howpublished field.export + "institution" institution field.export + "journal" journal remove.export.from.journals abbrv.export + "key" key field.export + "month" month remove.exports.from.months abbrv.export + "note" note field.export + "number" number field.export + "organization" organization field.export + "pages" pages field.export + "publisher" publisher field.export + "school" school field.export + "series" series field.export + "type" type field.export + "title" title field.export + "volume" volume field.export + "year" year field.export +} +FUNCTION{entry.export.extra} +{ + "abstract" abstract field.export + "doi" doi field.export + "eid" eid field.export + "isbn" isbn field.export + "issn" issn field.export + "language" language field.export + "url" url url.export +} +FUNCTION{entry.export} +{ + entry.export.standard + entry.export.extra +} +FUNCTION{export} +{ + "@" type$ * "{" * cite$ * "," * write$ newline$ + entry.export + "}" write$ newline$ newline$ +} +FUNCTION{preamble} +{ +preamble$ duplicate$ "" = + 'pop$ + { + ",-------------------." write$ newline$ + "| PREAMBLE |" write$ newline$ + "`-------------------'" write$ newline$ newline$ + "@preamble{ " swap$ + quote$ swap$ * quote$ * + {duplicate$ "" = not} + { + right.long.width split.string 't := + * + write$ newline$ + "" left.short.width space.complete t + } + while$ + "}" write$ newline$ newline$ + pop$ pop$ + } +if$ +} +FUNCTION{header} +{ +newline$ +} +FUNCTION{entries.header} +{ +preamble$ "" = + 'skip$ + { + ",-------------------." write$ newline$ + "| BIBTEX ENTRIES |" write$ newline$ + "`-------------------'" write$ newline$ newline$ + } +if$ +} +FUNCTION{article}{export} +FUNCTION{book}{export} +FUNCTION{booklet}{export} +FUNCTION{conference}{export} +FUNCTION{habthesis}{export} +FUNCTION{inbook}{export} +FUNCTION{incollection}{export} +FUNCTION{inproceedings}{export} +FUNCTION{journals}{export} +FUNCTION{manual}{export} +FUNCTION{mastersthesis}{export} +FUNCTION{misc}{export} +FUNCTION{phdthesis}{export} +FUNCTION{proceedings}{export} +FUNCTION{techreport}{export} +FUNCTION{unpublished}{export} +READ +EXECUTE{header} +EXECUTE{preamble} +EXECUTE{entries.header} +ITERATE{export} +%% +%% +%% End of file `export.bst'. diff --git a/Master/texmf-dist/doc/latex/bibexport/README b/Master/texmf-dist/doc/latex/bibexport/README new file mode 100644 index 00000000000..66f286ff05f --- /dev/null +++ b/Master/texmf-dist/doc/latex/bibexport/README @@ -0,0 +1,24 @@ +bibexport.sh -- extract BibTeX entries out of .bib file(s). + (N. Markey -- <markey(at)lsv.ens-cachan.fr>) + version 2.20 -- 2009/10/11 + +This is a shell script using BibTeX to extract .bib entries +that are \cite'd in a document. It also permits to expand a +BibTeX file, i.e. to develop abbreviations (except standard +ones) and crossrefs. + + +----------------------------------------------------------- + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3 of this license or (at your option) any later +version. The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of +LaTeX version 2003/12/01 or later. +This work has the LPPL status "maintained". +The current maintainer of this work is Nicolas Markey. + + + diff --git a/Master/texmf-dist/doc/latex/bibexport/bibexport.pdf b/Master/texmf-dist/doc/latex/bibexport/bibexport.pdf Binary files differnew file mode 100644 index 00000000000..1689a31b05c --- /dev/null +++ b/Master/texmf-dist/doc/latex/bibexport/bibexport.pdf diff --git a/Master/texmf-dist/scripts/bibexport/bibexport.sh b/Master/texmf-dist/scripts/bibexport/bibexport.sh new file mode 100755 index 00000000000..07ae9bc2d8e --- /dev/null +++ b/Master/texmf-dist/scripts/bibexport/bibexport.sh @@ -0,0 +1,178 @@ +#!/bin/sh +## +## This is file `bibexport.sh', +## generated with the docstrip utility. +## +## The original source files were: +## +## bibexport.dtx (with options: `script') +## +## (c) 2005/02/27 Nicolas Markey <markey at lsv dot ens-cachan dot fr> +## All rights reserved. +## +## This work may be distributed and/or modified under the conditions of +## the LaTeX Project Public License, either version 1.3 of this license +## or (at your option) any later version. The latest version of the +## license is in +## +## http://www.latex-project.org/lppl.txt +## +## and version 1.3 or later is part of all distributions of LaTeX +## version 2003/12/01 or later. +## +## \CharacterTable +## {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +## Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +## Digits \0\1\2\3\4\5\6\7\8\9 +## Exclamation \! Double quote \" Hash (number) \# +## Dollar \$ Percent \% Ampersand \& +## Acute accent \' Left paren \( Right paren \) +## Asterisk \* Plus \+ Comma \, +## Minus \- Point \. Solidus \/ +## Colon \: Semicolon \; Less than \< +## Equals \= Greater than \> Question mark \? +## Commercial at \@ Left bracket \[ Backslash \\ +## Right bracket \] Circumflex \^ Underscore \_ +## Grave accent \` Left brace \{ Vertical bar \| +## Right brace \} Tilde \~} +## +function usage() +{ +echo "bibexport: a tool to extract BibTeX entries out of .bib files. +usage: $0 [-h|v] [-n] [-b bst] [-a [-e file]...] [-o file] file... + -a, --all export the entire .bib files + -b, --bst specifies the .bst style file [default: export.bst] + -c, --crossref include entries that are crossref'd [default: yes] + -e file, --extra file extra .bib files to be used (for crossrefs) + -n, --no-crossref don't include crossref'd entries [default: no] + -o file write output to file [default: bibexport.bib] + -p, --preamble write a preamble at beginning of output + -t, --terse operate silently + -h, --help print this message and exit + -v, --version print version number and exit"; +exit 0; +} +VERSION="2.20"; +VDATE="2009/10/11"; +CROSSREF="1"; +FILE=""; +EXT=".aux"; +EXTRA=""; +EXTRABIB=""; +SPACE=" "; +BST="export"; +TERSE=""; +NOBANNER="true"; +ARGS=$@; +if [ $# -eq 0 ]; then + usage; +fi +while [ $# != 0 ]; do + case $1 in + -a|--all) + EXT=""; SPACE=""; + shift ;; + -b|--bst) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bst`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bst`"; + fi + BST="${DOLLARTWO}"; + shift 2;; + -e|--extra) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bib`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bib`"; + fi + EXTRA="${EXTRA}${DOLLARTWO},"; + EXTRABIB="${EXTRABIB},${DOLLARTWO}.bib"; + shift 2;; + -o|--output-file) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bib`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bib`"; + fi + OUTPUT="${DOLLARTWO}.bib"; + shift 2 ;; + -c|--crossref|--crossrefs|--with-crossref|--with-crossrefs) + CREF="1" ; + shift ;; + -n|--no-crossref|--without-crossref) + CREF="20000" ; + shift ;; + -v|--version) + echo "This is bibexport v${VERSION} (released ${VDATE})"; exit 0;; + -p|--preamble) + NOBANNER="false"; + shift ;; + -t|--terse) + TERSE=" -terse "; + shift ;; + -*) + usage;; + *) + if [ "`dirname $1`" = "." ]; then + DOLLARONE="`basename $1 ${EXT}`"; + else + DOLLARONE="`dirname $1`/`basename $1 ${EXT}`"; + fi + FILE="${FILE}${SPACE}${DOLLARONE}${EXT}"; + if [ -z "${SPACE}" ]; then + SPACE=","; + fi; + shift;; + esac +done +FINALFILE=${OUTPUT}; +if [ ! "${FINALFILE}" ]; then + FINALFILE="bibexport.bib"; +fi +TMPFILE="bibexp.`date +%s`"; +if [ -z "${EXT}" ]; then + if [ -z "${EXTRA}" ]; then + cat > ${TMPFILE}.aux <<EOF +\citation{*} +\bibdata{${FILE}} +\bibstyle{${BST}} +EOF + else + cat > ${TMPFILE}.aux <<EOF +\citation{*} +\bibdata{${FILE}} +\bibstyle{expkeys} +EOF + bibtex -min-crossrefs=${CREF} -terse ${TMPFILE}; + mv -f ${TMPFILE}.bbl ${TMPFILE}.aux; + cat >> ${TMPFILE}.aux <<EOF +\bibdata{${EXTRA}${FILE}${EXTRABIB}} +\bibstyle{${BST}} +EOF + fi +else + cat ${FILE} | sed -e "s/bibstyle{.*}/bibstyle{${BST}}/" > ${TMPFILE}.aux; +fi +bibtex -min-crossrefs=${CREF} ${TERSE} ${TMPFILE} +echo "" > ${FINALFILE} +if [ ! "${NOBANNER}" = "true" ]; then + echo -ne "@comment{generated using bibexport:\n" >> ${FINALFILE}; + echo -ne " creation date:\t`date +\"%c\"`\n" >> ${FINALFILE}; + echo -ne " command:\t\t$0 ${ARGS}\n" >> ${FINALFILE}; + echo -ne " bibexport-version:\tv${VERSION} (${VDATE})\n" >> ${FINALFILE}; + echo -ne " bibexport-maintainer:\tmarkey(at)lsv.ens-cachan.fr\n" >> ${FINALFILE}; + sed -ie "s/}/)/g" ${FINALFILE}; + echo -ne "}\n\n\n" >> ${FINALFILE}; +fi +if [ ! "x${CREF}" = "x1" ]; then + sed -r -e \ + "/^ *[cC][rR][oO][sS][sS][rR][eE][fF] *= *[^,]+,?$/d" \ + ${TMPFILE}.bbl >> ${FINALFILE}; +else + cat ${TMPFILE}.bbl >> ${FINALFILE}; +fi +rm -f ${TMPFILE}.bbl ${TMPFILE}.aux ${TMPFILE}.blg +## +## +## End of file `bibexport.sh'. diff --git a/Master/texmf-dist/source/latex/bibexport/bibexport.dtx b/Master/texmf-dist/source/latex/bibexport/bibexport.dtx new file mode 100644 index 00000000000..d1530fcb7d6 --- /dev/null +++ b/Master/texmf-dist/source/latex/bibexport/bibexport.dtx @@ -0,0 +1,1072 @@ +% \iffalse meta-comment +% +% Copyright +%<*driver> +\documentclass{ltxdoc} +\usepackage{doc} + +\def\script#1{\texttt{#1}} +\def\ext#1{\texttt{.#1}} +\def\var#1{\texttt{\$#1}} +\def\entry#1{\texttt{@#1}} +\def\lang#1{\textsc{#1}} +\def\bst#1{\textsf{#1.bst}} +\def\BibTeX{Bib\TeX} + +%%%\AtBeginDocument{\CodelineIndex\EnableCrossrefs} +%%%\AtEndDocument{\PrintIndex} +\begin{document} + \def\docdate{2009/10/11} + \def\fileversion{2.20} + \def\filedate{2009/10/11} + \DocInput{bibexport.dtx} +\end{document} +%</driver> +% +% \fi +% \CheckSum{26} +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +% +% \title{The \script{bibexport.sh} script} +% \author{Nicolas Markey} +% \date{\filedate} +% \maketitle +% \StopEventually{} +% +% \begin{abstract} +% \script{bibexport.sh} is a small shell script, relying on \BibTeX, that +% extracts entries of one or several \ext{bib} file(s). It will expand +% abbreviations and cross-references, except standard month and journal +% abbreviations. The output is indented as neatly as possible, yielding a +% readable \ext{bib} file even if the original one was not. +% \end{abstract} +% +% +% \section{Exporting \ext{bib} files} +% +% \subsection{Why and how?} +% +% \BibTeX{} aims at allowing for the use of one single \ext{bib} file, +% containing many entries, from which \BibTeX{} extracts only the +% \verb+\cite+d ones. When sending a document to someone else, this +% requires either to send the whole file, or to extract some entries +% from the \ext{bib} file. +% +% \BibTeX{} also has a mechanism for using abbreviations and +% cross-references. When extracting entries of a large \ext{bib} file, +% it can be interesting to develop those abbreviations, in order to get a +% clean, self-contained \ext{bib} file. Also, it may be useful to develop +% cross-references in a \ext{bib} file, independently of any document. +% +% \medskip +% \script{bibexport} can either extract entries that are cited in a document, +% or all the entries of one or several \ext{bib} files. It will always develop +% cross-references and abreviations, except standard abbreviations for months or +% some journals, that are defined in standard \BibTeX{} styles. This script +% uses \BibTeX{}. This has both pros and cons: +% \begin{itemize} +%\item[$+$] it is very simple. Basicaly, the script simply calls \BibTeX{}, and the +% \ext{bst} file just outputs the name and the content of each field. +%\item[$+$] since it uses \BibTeX, we are sure that it will handle everything +% "properly", \emph{i.e.} in the same way as they will be handled when cited in +% a \LaTeX{} document; +%\item[$=$] \BibTeX{} has some strict limitations (especially "no more than 78 consecutive +% non-space characters") that we must be aware of. On the other hand, any such +% problem occuring within the script would also occur when compiling a +% document; +%\item[$-$] abbreviations and cross-references will \emph{always} be +% developped. It could be argued that this is also a positive point, but +% having the choice would have been better. +%\item[$-$] Many people seem to find \BibTeX's internal language clumsy, and thus +% the script could be difficult to adapt to special needs. However, this is +% \emph{really} not that difficult, as will be explained later on. And please, +% don't hesitate to ask for improvements. +% \end{itemize} +% +% \subsection{Related scripts} +% +% Several other tools exist for achieving this task: +% \begin{itemize} +%\item \verb+aux2bib+, written by Ralf Treinen, relies on \verb+bib2bib+, +% which is a \lang{CaML} program for selecting some entries in one or several \ext{bib} +% files. It does not expand anything, but includes all the necessary +% definitions and entries. +%\item \verb+bibextract.sh+, by Nelson Beebe. This script uses \lang{awk} for +% extracting some entries out of a \ext{bib} file. It is said to be +% noncompliant with cross-references. +%\item \bst{subset}, by David Kotz. \bst{export} develops the same ideas (but +% I discovered that only later on). \bst{subset} does not handle +% \entry{preamble}, neither does it "protect" standard abbreviations. +%\item Probalby some others... +% \end{itemize} +% +% \subsection{Some examples} +% +% \begin{itemize} +%\item extracting \verb+\cite+d references of a document, also including +% cross-references: +%\begin{center} +% \ttfamily bibexport -o {\itshape <result>}.bib {\itshape <file>}.aux +%\end{center} +%\item extracting \verb+\cite+d references of a document, without crossrefs, +% and using a special \ext{bst} file: +%\begin{center} +% \ttfamily bibexport -b {\itshape <style>}.bst -o {\itshape <result>}.bib {\itshape <file>}.aux +%\end{center} +%\item export all the entries of two \ext{bib} files (including crossrefed entries): +%\begin{center} +% \ttfamily bibexport -a -o {\itshape <result>}.bib {\itshape <file1>}.bib {\itshape <file2>}.bib +%\end{center} +%\item export all the entries of two \ext{bib} files (without crossrefs): +%\begin{center} +% \ttfamily bibexport -a -n -o {\itshape <result>}.bib {\itshape <file1>}.bib +% {\itshape <file2>}.bib +%\end{center} +% In fact, the only difference between this and the previous one is that +% \texttt{crossref} field will be filtered out at the end of the script. +%\item export all the entries of two \ext{bib} files, using an extra file +% containing cross-referenced entries (which should not be included): +%\begin{center} +% \ttfamily bibexport -a -e {\itshape <crossref>}.bib -n -o {\itshape +% <result>}.bib \textbackslash\par {\itshape <file1>}.bib {\itshape <file2>}.bib +%\end{center} +%\end{itemize} +% +% \subsection{Exporting extra fields} +% +% By~default, \script{bibexport.sh} exports only "standard" fields +% (those defined and used in \bst{plain}), as~well as a few +% others. It~is very easy to modify it in order to export other fields: +% it~suffices to modify \bst{export} as follows: +% \begin{itemize} +% \item in the \texttt{ENTRY} list, add the name of the field you would +% like to export. Notice that \texttt{ENTRY} takes three space-separated +% lists as arguments; you must add extra fields in the first argument +% (actually, the last two are empty). +% \item in the function \texttt{entry.export.extra}, add a line of the +% form +% \begin{center} +% \ttfamily +% "myfield" myfield field.export +% \end{center} +% where \texttt{myfield} is the name of the extra field you want to +% export. +% \end{itemize} +% +% \subsection*{Acknowledgements} +% I thank \'Eric Colin de Verdi\`ere and Richard Mathar +% for suggesting several improvements or corrections. +% +% \section{The code} +% \subsection{The shell script} +% \subsubsection{Initialization} +% +%\begin{macro}{usage()} +% We first define how the script should be used: +% \begin{macrocode} +%<*script> +function usage() +{ +echo "bibexport: a tool to extract BibTeX entries out of .bib files. +usage: $0 [-h|v] [-n] [-b bst] [-a [-e file]...] [-o file] file... + -a, --all export the entire .bib files + -b, --bst specifies the .bst style file [default: export.bst] + -c, --crossref include entries that are crossref'd [default: yes] + -e file, --extra file extra .bib files to be used (for crossrefs) + -n, --no-crossref don't include crossref'd entries [default: no] + -o file write output to file [default: bibexport.bib] + -p, --preamble write a preamble at beginning of output + -t, --terse operate silently + -h, --help print this message and exit + -v, --version print version number and exit"; +exit 0; +} +%</script> +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{VERSION} +%\begin{macro}{VDATE} +%\begin{macro}{CREF} +%\begin{macro}{FILE} +%\begin{macro}{EXT} +%\begin{macro}{EXTRA} +%\begin{macro}{EXTRABIB} +%\begin{macro}{SPACE} +%\begin{macro}{BST} +%\begin{macro}{TERSE} +%\begin{macro}{NOBANNER} +%\begin{macro}{ARGS} +% We define the default value of some variables: +% \begin{itemize} +% \item \var{VERSION}: the version number, +% \item \var{VDATE}: the release date, +% \item \var{CREF}: the value of \verb+-min-crossrefs+, +% \item \var{FILE}: the input file(s), +% \item \var{EXT}: the extension (\ext{aux} or \ext{bib}) of input files, +% \item \var{EXTRA}: list of possible extra \ext{bib} files without extension, +% \item \var{EXTRABIB}: list of possible extra \ext{bib} files with extension, +% \item \var{SPACE}: file name separator (can be \textvisiblespace, comma or empty), +% \item \var{BST}: the \ext{bst} file to be used, +% \item \var{TERSE}: tells \BibTeX{} to run silently, +% \item \var{NOBANNER}: don't print the initial comment, +% \item \var{ARGS}: the list of aruments passed to \texttt{bibexport.sh}. +% \end{itemize} +% \begin{macrocode} +%<*script> +VERSION="2.20"; +VDATE="2009/10/11"; +CROSSREF="1"; +FILE=""; +EXT=".aux"; +EXTRA=""; +EXTRABIB=""; +SPACE=" "; +BST="export"; +TERSE=""; +NOBANNER="true"; +ARGS=$@; +%</script> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% +% \subsubsection{Handling arguments} +% +% If no argument have been supplied, we call \script{usage()}. +% +% \begin{macrocode} +%<*script> +if [ $# -eq 0 ]; then + usage; +fi +%</script> +% \end{macrocode} +% +% Otherwise, we enter a \verb+while+-loop for handling the whole list of arguments: +% \begin{macrocode} +%<*script> +while [ $# != 0 ]; do + case $1 in +%</script> +% \end{macrocode} +%\begin{itemize} +%\item \verb+-a+ or \verb+--all+: export all the bibliography. This +% means that we input \ext{bib} files. +% \begin{macrocode} +%<*script> + -a|--all) + EXT=""; SPACE=""; + shift ;; +%</script> +% \end{macrocode} +%\item \verb+-b+ or \verb+--bst+: specifies the style file. It seems +% that \BibTeX{} does not like the \texttt{./\textit{style}.bst} +% syntax, and we have to handle that case separately. +% \begin{macrocode} +%<*script> + -b|--bst) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bst`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bst`"; + fi + BST="${DOLLARTWO}"; + shift 2;; +%</script> +% \end{macrocode} +%\item \verb+-e+ or \verb+--extra+: when we want to export all the +% entries of a \ext{bib} file, we can specify an extra \ext{bib} file +% that would contain entries that we don't want to export, but that +% are needed, \emph{e.g.} for crossrefs. +% \begin{macrocode} +%<*script> + -e|--extra) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bib`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bib`"; + fi + EXTRA="${EXTRA}${DOLLARTWO},"; + EXTRABIB="${EXTRABIB},${DOLLARTWO}.bib"; + shift 2;; +%</script> +% \end{macrocode} +%\item \verb+-o+ or \verb+--output+: the name of the output file. +% \begin{macrocode} +%<*script> + -o|--output-file) + if [ "`dirname $2`" = "." ]; then + DOLLARTWO="`basename $2 .bib`"; + else + DOLLARTWO="`dirname $2`/`basename $2 .bib`"; + fi + OUTPUT="${DOLLARTWO}.bib"; + shift 2 ;; +%</script> +% \end{macrocode} +%\item \verb+-c+ or \verb+--crossref+ (or others): this options means +% that we want crossrefs to be included. Note that for any entry, +% field inheritage will be performed. +% \begin{macrocode} +%<*script> + -c|--crossref|--crossrefs|--with-crossref|--with-crossrefs) + CREF="1" ; + shift ;; +%</script> +% \end{macrocode} +%\item \verb+-n+ or \verb+--no-crossref+: don't include crossref'ed +% entries. +% \begin{macrocode} +%<*script> + -n|--no-crossref|--without-crossref) + CREF="20000" ; + shift ;; +%</script> +% \end{macrocode} +%\item \verb+-v+ or \verb+--version+ for version number: +% \begin{macrocode} +%<*script> + -v|--version) + echo "This is bibexport v${VERSION} (released ${VDATE})"; exit 0;; +%</script> +% \end{macrocode} +%\item \verb+-p+ or \verb+--preamble+ for inserting some informations +% at the beginning of the output file: +% \begin{macrocode} +%<*script> + -p|--preamble) + NOBANNER="false"; + shift ;; +%</script> +% \end{macrocode} +%\item \verb+-t+ or \verb+--terse+ for asking \BibTeX{} to run silently: +% \begin{macrocode} +%<*script> + -t|--terse) + TERSE=" -terse "; + shift ;; +%</script> +% \end{macrocode} +%\item other dash-options are erroneous (except \verb+-h+, but...): +% \begin{macrocode} +%<*script> + -*) + usage;; +%</script> +% \end{macrocode} +%\item there should only remain file names: we add those names to the +% list of files. +% \begin{macrocode} +%<*script> + *) + if [ "`dirname $1`" = "." ]; then + DOLLARONE="`basename $1 ${EXT}`"; + else + DOLLARONE="`dirname $1`/`basename $1 ${EXT}`"; + fi + FILE="${FILE}${SPACE}${DOLLARONE}${EXT}"; + if [ -z "${SPACE}" ]; then + SPACE=","; + fi; + shift;; +%</script> +% \end{macrocode} +% \end{itemize} +% That's all folks: +% \begin{macrocode} +%<*script> + esac +done +%</script> +% \end{macrocode} +% +% \subsubsection{The core of the script} +% +% We first set the name of the result and intermediary files: +% \begin{macrocode} +%<*script> +FINALFILE=${OUTPUT}; +if [ ! "${FINALFILE}" ]; then + FINALFILE="bibexport.bib"; +fi +TMPFILE="bibexp.`date +%s`"; +%</script> +% \end{macrocode} +% +% We then create the \ext{aux} file for the main run of \BibTeX. Note +% that this could call \BibTeX, with the \bst{expkeys} file, in the +% case where we want to export all entries of a \ext{bib} file but not +% crossrefs. Note how, in that case, we trick \BibTeX for inputing +% extra files twice: we include then with their short name first (with +% no extension), and then with the full name. We \emph{need} to do that, +% since \verb+string+ abbreviations must be defined first, while +% crossrefs must occur after having been referenced. +% +% \begin{macrocode} +%<*script> +if [ -z "${EXT}" ]; then + if [ -z "${EXTRA}" ]; then + cat > ${TMPFILE}.aux <<EOF +\citation{*} +\bibdata{${FILE}} +\bibstyle{${BST}} +EOF + else + cat > ${TMPFILE}.aux <<EOF +\citation{*} +\bibdata{${FILE}} +\bibstyle{expkeys} +EOF + bibtex -min-crossrefs=${CREF} -terse ${TMPFILE}; + mv -f ${TMPFILE}.bbl ${TMPFILE}.aux; + cat >> ${TMPFILE}.aux <<EOF +\bibdata{${EXTRA}${FILE}${EXTRABIB}} +\bibstyle{${BST}} +EOF + fi +else + cat ${FILE} | sed -e "s/bibstyle{.*}/bibstyle{${BST}}/" > ${TMPFILE}.aux; +fi +%</script> +% \end{macrocode} +% +% This was the hard part. We now call \BibTeX, clean and rename the +% output file, and remove intermediary files: +% +% \begin{macrocode} +%<*script> +bibtex -min-crossrefs=${CREF} ${TERSE} ${TMPFILE} +echo "" > ${FINALFILE} +if [ ! "${NOBANNER}" = "true" ]; then + echo -ne "@comment{generated using bibexport:\n" >> ${FINALFILE}; + echo -ne " creation date:\t`date +\"%c\"`\n" >> ${FINALFILE}; + echo -ne " command:\t\t$0 ${ARGS}\n" >> ${FINALFILE}; + echo -ne " bibexport-version:\tv${VERSION} (${VDATE})\n" >> ${FINALFILE}; + echo -ne " bibexport-maintainer:\tmarkey(at)lsv.ens-cachan.fr\n" >> ${FINALFILE}; + sed -ie "s/}/)/g" ${FINALFILE}; + echo -ne "}\n\n\n" >> ${FINALFILE}; +fi +if [ ! "x${CREF}" = "x1" ]; then + sed -r -e \ + "/^ *[cC][rR][oO][sS][sS][rR][eE][fF] *= *[^,]+,?$/d" \ + ${TMPFILE}.bbl >> ${FINALFILE}; +else + cat ${TMPFILE}.bbl >> ${FINALFILE}; +fi +rm -f ${TMPFILE}.bbl ${TMPFILE}.aux ${TMPFILE}.blg +%</script> +% \end{macrocode} +% +% +% \subsection{The \bst{expkeys} file} +% +% The only role of that file is to export the list of entries to be +% exported. It is used when we export all the entries of \ext{bib} +% files, except those of \emph{extra} \ext{bib} files. +% Thus: +% \begin{macrocode} +%<*expkeys> +ENTRY{}{}{} +READ +FUNCTION{export.key} +{ + "\citation{" cite$ "}" * * write$ newline$ +} +ITERATE{export.key} +%</expkeys> +% \end{macrocode} +% +% \subsection{The \bst{export} file} +% +% \subsubsection{Some configuration values} +% \begin{macro}{left.width} +% \begin{macro}{right.width} +% \begin{macro}{url.right.width} +% \begin{macro}{left.short.width} +% \begin{macro}{right.short.width} +% \begin{macro}{left.delim} +% \begin{macro}{right.delim} +% We define here the indentation values, and the field +% delimiters. \emph{short} width are used for \entry{preamble}. +% \begin{macrocode} +%<*export> +FUNCTION{left.width}{#18} +FUNCTION{right.width}{#55} +FUNCTION{url.right.width}{#61} +FUNCTION{left.short.width}{#10} %% for @preamble +FUNCTION{right.long.width}{#63} +FUNCTION{left.delim}{"{"} +FUNCTION{right.delim}{"}"} +%FUNCTION{left.delim}{quote$} +%FUNCTION{right.delim}{quote$} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% \subsubsection{Entries} +% We use standard entries here. Of course, more entries could be added +% for special \ext{bib} files. Those extra entries will also have to +% be added in the main exporting function. +% \begin{macro}{ENTRY} +% \begin{macrocode} +%<*export> +ENTRY{ +% Standard fields: + address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year +% Special (but still somewhat standard) fields (natbib, germbib, ...): + abstract + doi + eid + isbn + issn + language + url +}{}{} +%</export> +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Basic functions} +% +% No comment. +%\begin{macro}{or} +%\begin{macro}{and} +%\begin{macro}{not} +% \begin{macrocode} +%<*export> +FUNCTION{not} +{ + {#0} + {#1} + if$ +} +FUNCTION{and} +{ + 'skip$ + {pop$ #0} + if$ +} +FUNCTION{or} +{ + {pop$ #1} + 'skip$ + if$ +} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +% \subsubsection{Splitting strings} +% +% We design functions for splitting strings, so that the final +% \ext{bib} file will be cleanly indented. +% \begin{macro}{space.complete} +% \begin{macro}{split.string} +% \begin{macro}{split.url} +% \begin{macro}{split name} +% \begin{macrocode} +%<*export> +INTEGERS{left.length right.length} +STRINGS{ s t } +FUNCTION{space.complete} +{ + 'left.length := + duplicate$ text.length$ left.length swap$ - + {duplicate$ #0 >} + { + swap$ " " * swap$ #1 - + } + while$ + pop$ +} +FUNCTION{split.string} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #1 substring$ " " = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + duplicate$ s swap$ #1 swap$ substring$ + swap$ + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +FUNCTION{split.url} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #1 substring$ "/" = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + duplicate$ s swap$ #1 swap$ substring$ + swap$ #1 + + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +FUNCTION{split.name} +{ + 'right.length := + duplicate$ right.length #1 + #1 substring$ "" = + {""} + { + 's := + right.length + {duplicate$ duplicate$ s swap$ #5 substring$ " and " = not and} + {#1 -} + while$ + duplicate$ #2 < + { + pop$ " " s * "" + } + { + #4 + duplicate$ s swap$ #1 swap$ substring$ + swap$ + s swap$ global.max$ substring$ + } + if$ + } + if$ +} +%</export> +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \subsubsection{Exporting fields} +% +% Here, we have four exporting functions, since we also have to deal +% with abbreviations: +%\begin{macro}{field.export} +%\begin{macro}{abbrv.export} +%\begin{macro}{name.export} +%\begin{macro}{url.export} +% \begin{macrocode} +%<*export> +FUNCTION{field.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.string 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{abbrv.export} +{ + duplicate$ missing$ + 'skip$ + { + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.string 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{name.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + right.width split.name 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +FUNCTION{url.export} +{ + duplicate$ missing$ + 'skip$ + { + left.delim swap$ * right.delim * + swap$ + " " swap$ * " = " * left.width space.complete + swap$ "," * + {duplicate$ "" = not} + { + url.right.width split.url 't := + * + write$ newline$ + "" left.width space.complete t + } + while$ + } + if$ + pop$ pop$ +} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% \subsubsection{Handling abbreviations} +% +% Abbreviations are difficult to deal with if we wish to still use +% them, since \BibTeX will expand them before we can do anything. All we +% can do is to define them in a special way, in order to be able to get +% back to the abbreviations later on. This is precisely what we do: +%\begin{macro}{jan-dec} +%\begin{macro}{acmcs-tcs} +%\begin{macro}{remove.exports.from.months} +%\begin{macro}{remove.export.from.journal} +% \begin{macrocode} +%<*export> +MACRO{jan}{"export-jan"} +MACRO{feb}{"export-feb"} +MACRO{mar}{"export-mar"} +MACRO{apr}{"export-apr"} +MACRO{may}{"export-may"} +MACRO{jun}{"export-jun"} +MACRO{jul}{"export-jul"} +MACRO{aug}{"export-aug"} +MACRO{sep}{"export-sep"} +MACRO{oct}{"export-oct"} +MACRO{nov}{"export-nov"} +MACRO{dec}{"export-dec"} +MACRO{acmcs}{"export-acmcs"} +MACRO{acta}{"export-acta"} +MACRO{cacm}{"export-cacm"} +MACRO{ibmjrd}{"export-ibmjrd"} +MACRO{ibmsj}{"export-ibmsj"} +MACRO{ieeese}{"export-ieeese"} +MACRO{ieeetc}{"export-ieeetc"} +MACRO{ieeetcad}{"export-ieeetcad"} +MACRO{ipl}{"export-ipl"} +MACRO{jacm}{"export-jacm"} +MACRO{jcss}{"export-jcss"} +MACRO{scp}{"export-scp"} +MACRO{sicomp}{"export-sicomp"} +MACRO{tocs}{"export-tocs"} +MACRO{tods}{"export-tods"} +MACRO{tog}{"export-tog"} +MACRO{toms}{"export-toms"} +MACRO{toois}{"export-poois"} +MACRO{toplas}{"export-toplas"} +MACRO{tcs}{"export-tcs"} +INTEGERS{ intxt } +FUNCTION{remove.exports.from.months} +{ + #0 'intxt := + duplicate$ missing$ + 'skip$ + {'t := + "" + {t #1 #1 substring$ "" = not} + { + t #1 #7 substring$ "export-" = + {intxt + {right.delim * #0 'intxt :=} + 'skip$ + if$ + duplicate$ "" = + 'skip$ + {" # " *} + if$ + t #8 #3 substring$ * + t #11 global.max$ substring$ 't :=} + {intxt + 'skip$ + {duplicate$ "" = + {} + {" # " *} + if$ + left.delim * #1 'intxt :=} + if$ + t #1 #1 substring$ * + t #2 global.max$ substring$ 't :=} + if$ + } + while$ + intxt + {right.delim *} + 'skip$ + if$ + } + if$ +} +FUNCTION{remove.export.from.journals} +{ + duplicate$ missing$ + 'skip$ + { + duplicate$ #1 #7 substring$ "export-" = + {#8 global.max$ substring$} + {left.delim swap$ + right.delim * *} + if$ + } + if$ +} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% +% \subsubsection{Now, we export...} +% +% We gather everything. This is were special fields must be added for +% being exported: +%\begin{macro}{entry.export.standard} +%\begin{macro}{entry.export.extra} +%\begin{macro}{entry.export} +%\begin{macro}{export} +% \begin{macrocode} +%<*export> +FUNCTION{entry.export.standard} +{ + "address" address field.export + "author" author name.export + "booktitle" booktitle field.export + "chapter" chapter field.export + "crossref" crossref field.export + "edition" edition field.export + "editor" editor name.export + "howpublished" howpublished field.export + "institution" institution field.export + "journal" journal remove.export.from.journals abbrv.export + "key" key field.export + "month" month remove.exports.from.months abbrv.export + "note" note field.export + "number" number field.export + "organization" organization field.export + "pages" pages field.export + "publisher" publisher field.export + "school" school field.export + "series" series field.export + "type" type field.export + "title" title field.export + "volume" volume field.export + "year" year field.export +} +FUNCTION{entry.export.extra} +{ + "abstract" abstract field.export + "doi" doi field.export + "eid" eid field.export + "isbn" isbn field.export + "issn" issn field.export + "language" language field.export + "url" url url.export +} +FUNCTION{entry.export} +{ + entry.export.standard + entry.export.extra +} +FUNCTION{export} +{ + "@" type$ * "{" * cite$ * "," * write$ newline$ + entry.export + "}" write$ newline$ newline$ +} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% +% \subsubsection{Miscellanea} +% We also have to handle preamble, and to define functions for each +% entry type (we won't use them but otherwise, \BibTeX would complain). +% +%\begin{macro}{preamble} +%\begin{macro}{header} +%\begin{macro}{entries.headers} +%\begin{macro}{article-unpublished} +% \begin{macrocode} +%<*export> +FUNCTION{preamble} +{ +preamble$ duplicate$ "" = + 'pop$ + { + ",-------------------." write$ newline$ + "| PREAMBLE |" write$ newline$ + "`-------------------'" write$ newline$ newline$ + "@preamble{ " swap$ + quote$ swap$ * quote$ * + {duplicate$ "" = not} + { + right.long.width split.string 't := + * + write$ newline$ + "" left.short.width space.complete t + } + while$ + "}" write$ newline$ newline$ + pop$ pop$ + } +if$ +} +FUNCTION{header} +{ +%"** This file has been automatically generated by bibexport **" +%write$ newline$ +%"** See http://www.lsv.ens-cachan.fr/~markey/bibla.php **" +%write$ newline$ +%"** for more informations about bibexport. **" +%write$ newline$ +newline$ +} +FUNCTION{entries.header} +{ +preamble$ "" = + 'skip$ + { + ",-------------------." write$ newline$ + "| BIBTEX ENTRIES |" write$ newline$ + "`-------------------'" write$ newline$ newline$ + } +if$ +} +FUNCTION{article}{export} +FUNCTION{book}{export} +FUNCTION{booklet}{export} +FUNCTION{conference}{export} +FUNCTION{habthesis}{export} +FUNCTION{inbook}{export} +FUNCTION{incollection}{export} +FUNCTION{inproceedings}{export} +FUNCTION{journals}{export} +FUNCTION{manual}{export} +FUNCTION{mastersthesis}{export} +FUNCTION{misc}{export} +FUNCTION{phdthesis}{export} +FUNCTION{proceedings}{export} +FUNCTION{techreport}{export} +FUNCTION{unpublished}{export} +%</export> +% \end{macrocode} +%\end{macro} +%\end{macro} +%\end{macro} +%\end{macro} +% \subsubsection{Main program} +% +% We now can execute and iterate those functions: +% +% \begin{macrocode} +%<*export> +READ +EXECUTE{header} +EXECUTE{preamble} +EXECUTE{entries.header} +ITERATE{export} +%</export> +% \end{macrocode} +% +% \Finale +\endinput diff --git a/Master/texmf-dist/source/latex/bibexport/bibexport.ins b/Master/texmf-dist/source/latex/bibexport/bibexport.ins new file mode 100644 index 00000000000..084404ffb29 --- /dev/null +++ b/Master/texmf-dist/source/latex/bibexport/bibexport.ins @@ -0,0 +1,69 @@ +\NeedsTeXFormat{LaTeX2e}[1996/12/01] +\input docstrip + +{\catcode`\#=12 + \gdef\DoubleSharp{##} +} + +\let\MetaPrefix\DoubleSharp +\preamble + +(c) 2005/02/27 Nicolas Markey <markey at lsv dot ens-cachan dot fr> +All rights reserved. + +This work may be distributed and/or modified under the conditions of +the LaTeX Project Public License, either version 1.3 of this license +or (at your option) any later version. The latest version of the +license is in + + http://www.latex-project.org/lppl.txt + +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +\endpreamble +\postamble +\endpostamble +{\catcode`\#=12\relax + \let\olddefaultpreamble\defaultpreamble + \xdef\defaultpreamble{% + #!/bin/sh^^J% + \olddefaultpreamble} +} +\generate{\file{bibexport.sh}{\from{bibexport.dtx}{script}}} + +%% +%% +%% + +\let\MetaPrefix\DoubleperCent +\preamble + +(c) 2005/02/27 Nicolas Markey <markey at lsv dot ens-cachan dot fr> +All rights reserved. + +This work may be distributed and/or modified under the conditions of +the LaTeX Project Public License, either version 1.3 of this license +or (at your option) any later version. The latest version of the +license is in + + http://www.latex-project.org/lppl.txt + +and version 1.3 or later is part of all distributions of LaTeX +version 2003/12/01 or later. + +\endpreamble +\postamble +\endpostamble +\generate{\file{expkeys.bst}{\from{bibexport.dtx}{expkeys}}% + \file{export.bst}{\from{bibexport.dtx}{export}}} + +%% +%% +%% + +\Msg{** To finish the installation, put both .bst files in a } +\Msg{** place where BibTeX can find them, put the shell script} +\Msg{** where your shell can find it, and make it executable.} + +\end |