summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/logreq
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/logreq
Initial commit
Diffstat (limited to 'macros/latex/contrib/logreq')
-rw-r--r--macros/latex/contrib/logreq/README42
-rw-r--r--macros/latex/contrib/logreq/examples/01-basic.run.xml77
-rw-r--r--macros/latex/contrib/logreq/examples/01-basic.tex63
-rw-r--r--macros/latex/contrib/logreq/examples/02-index.run.xml117
-rw-r--r--macros/latex/contrib/logreq/examples/02-index.tex99
-rw-r--r--macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.run.xml95
-rw-r--r--macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.tex79
-rw-r--r--macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.run.xml183
-rw-r--r--macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.tex190
-rw-r--r--macros/latex/contrib/logreq/examples/05-biblatex+biber.run.xml86
-rw-r--r--macros/latex/contrib/logreq/examples/05-biblatex+biber.tex66
-rw-r--r--macros/latex/contrib/logreq/logreq.def35
-rw-r--r--macros/latex/contrib/logreq/logreq.sty237
13 files changed, 1369 insertions, 0 deletions
diff --git a/macros/latex/contrib/logreq/README b/macros/latex/contrib/logreq/README
new file mode 100644
index 0000000000..d4f2436e93
--- /dev/null
+++ b/macros/latex/contrib/logreq/README
@@ -0,0 +1,42 @@
+$Id: README,v 1.0 2010/08/04 18:56:41 lehman stable $
+
+ABOUT
+
+The logreq package helps to automate a typical LaTeX workflow that
+involves running LaTeX several times, running tools such as BibTeX
+or makeindex, and so on. It will log requests like "please rerun
+LaTeX" or "please run BibTeX on file X" to an external XML file
+which lists all open tasks in a machine-readable format. Compiler
+scripts and integrated LaTeX editing environments may parse this
+file to determine the next steps in the workflow in a way that is
+more efficient than parsing the main log file. In sum, the package
+will do two things: 1) enable package authors to use LaTeX commands
+to issue requests, 2) collect all requests from all packages and
+write them to an external XML file at the end of the document.
+
+LICENSE
+
+Copyright (c) 2010 Philipp Lehman. Permission is granted to copy,
+distribute and/or modify this software under the terms of the LaTeX
+Project Public License (LPPL), version 1.3. The LPPL maintenance
+status of this software is 'maintained'. The current maintainer is
+Philipp Lehman. This software is provided 'as is', without warranty
+of any kind, either expressed or implied, including, but not limited
+to, the implied warranties of merchantability and fitness for a
+particular purpose.
+
+REQUIREMENTS
+
+- e-TeX
+- etoolbox 1.9 or later
+- keyval
+
+DOCUMENTATION
+
+Unfortunately, there is no formal documentation for this package at
+the moment. For the time being, have a look at the examples which
+ship with the package and read this draft:
+
+https://sourceforge.net/apps/mediawiki/biblatex/index.php?title=Workflow_Automation
+
+A real manual will be added soon.
diff --git a/macros/latex/contrib/logreq/examples/01-basic.run.xml b/macros/latex/contrib/logreq/examples/01-basic.run.xml
new file mode 100644
index 0000000000..ca1eb870fb
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/01-basic.run.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <internal package="sample" priority="9" active="1">
+ <generic>latex</generic>
+ </internal>
+ <external package="natbib" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <infile>01-basic</infile>
+ </cmdline>
+ <provides type="dynamic">
+ <file>01-basic.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>01-basic.aux</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile1.bib</file>
+ <file>bibfile2.bib</file>
+ <file>bibfile3.bib</file>
+ </requires>
+ <requires type="static">
+ <file>plainnat.bst</file>
+ </requires>
+ </external>
+ <internal package="natbib" priority="9" active="1">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>01-basic.aux</file>
+ </provides>
+ <requires type="dynamic">
+ <file>01-basic.bbl</file>
+ </requires>
+ </internal>
+</requests>
diff --git a/macros/latex/contrib/logreq/examples/01-basic.tex b/macros/latex/contrib/logreq/examples/01-basic.tex
new file mode 100644
index 0000000000..ab22edd8c5
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/01-basic.tex
@@ -0,0 +1,63 @@
+\documentclass{minimal}
+\usepackage{logreq}
+
+% basic examples
+
+% shorthand for simple "rerun latex" requests
+% (for any package which requires another latex run)
+
+\ltxrequest{sample}{1}{}
+
+% typical bibtex request
+% (e.g., if natbib.sty were to support logreq)
+
+% sample code:
+
+% ...
+% \usepackage{natbib}
+% \begin{document}
+% ...
+% \bibliographystyle{plainnat}
+% \bibliography{bibfile1,bibfile2,bibfile3}
+% \end{document}
+
+% workflow:
+
+% latex file (-> both requests active)
+% bibtex file
+% latex file (-> latex request active, bibtex request inactive)
+% latex file (-> both requests inactive)
+
+\logrequest[package=natbib,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex}
+ \infile{\jobname}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.aux}
+ }
+ \requires[type=editable]{
+ \file{bibfile1.bib}
+ \file{bibfile2.bib}
+ \file{bibfile3.bib}
+ }
+ \requires[type=static]{
+ \file{plainnat.bst}
+ }
+}
+
+\ltxrequest{natbib}{1}{
+ \provides[type=dynamic]{
+ \file{\jobname.aux}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+}
+
+\begin{document}
+\end{document}
diff --git a/macros/latex/contrib/logreq/examples/02-index.run.xml b/macros/latex/contrib/logreq/examples/02-index.run.xml
new file mode 100644
index 0000000000..e03c0619f7
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/02-index.run.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <external package="index" priority="8" active="0">
+ <generic>makeindex</generic>
+ <cmdline>
+ <binary>makeindex</binary>
+ <option>-o example.ind</option>
+ <infile>02-index.idx</infile>
+ </cmdline>
+ <input>
+ <file>02-index.idx</file>
+ </input>
+ <output>
+ <file>02-index.ind</file>
+ </output>
+ <provides type="dynamic">
+ <file>02-index.ind</file>
+ </provides>
+ <requires type="dynamic">
+ <file>02-index.idx</file>
+ </requires>
+ </external>
+ <external package="index" priority="8" active="0">
+ <generic>makeindex</generic>
+ <cmdline>
+ <binary>makeindex</binary>
+ <option>-o example.nnd</option>
+ <infile>02-index.ndx</infile>
+ </cmdline>
+ <input>
+ <file>02-index.ndx</file>
+ </input>
+ <output>
+ <file>02-index.nnd</file>
+ </output>
+ <provides type="dynamic">
+ <file>02-index.nnd</file>
+ </provides>
+ <requires type="dynamic">
+ <file>02-index.ndx</file>
+ </requires>
+ </external>
+ <external package="index" priority="8" active="0">
+ <generic>makeindex</generic>
+ <cmdline>
+ <binary>makeindex</binary>
+ <option>-o example.tnd</option>
+ <infile>02-index.tdx</infile>
+ </cmdline>
+ <input>
+ <file>02-index.tdx</file>
+ </input>
+ <output>
+ <file>02-index.tnd</file>
+ </output>
+ <provides type="dynamic">
+ <file>02-index.tnd</file>
+ </provides>
+ <requires type="dynamic">
+ <file>02-index.tdx</file>
+ </requires>
+ </external>
+ <internal package="index" priority="9" active="0">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>02-index.idx</file>
+ <file>02-index.ndx</file>
+ <file>02-index.tdx</file>
+ </provides>
+ <requires type="dynamic">
+ <file>02-index.ind</file>
+ <file>02-index.nnd</file>
+ <file>02-index.tnd</file>
+ </requires>
+ </internal>
+</requests>
diff --git a/macros/latex/contrib/logreq/examples/02-index.tex b/macros/latex/contrib/logreq/examples/02-index.tex
new file mode 100644
index 0000000000..6444c2fd23
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/02-index.tex
@@ -0,0 +1,99 @@
+\documentclass{minimal}
+\usepackage{logreq}
+
+% indexing example
+% (e.g., if index.sty were to support logreq)
+
+% sample preamble:
+
+% \usepackage{index}
+% \newindex{default}{idx}{ind}{Subject Index}
+% \newindex{names}{ndx}{nnd}{Name Index}
+% \newindex{titles}{tdx}{tnd}{Title Index}
+
+% workflow:
+
+% latex file
+% makeindex -o file.ind file.idx (= makeindex file)
+% makeindex -o file.nnd file.ndx
+% makeindex -o file.tnd file.tdx
+% latex file
+
+\logrequest[package=index,priority=8,active=0]{%
+ \generic{makeindex}
+ \cmdline{
+ \binary{makeindex}
+ \option{-o example.ind}
+ \infile{\jobname.idx}
+ }
+ \input{
+ \file{\jobname.idx}
+ }
+ \output{
+ \file{\jobname.ind}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.ind}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.idx}
+ }
+}
+
+\logrequest[package=index,priority=8,active=0]{%
+ \generic{makeindex}
+ \cmdline{
+ \binary{makeindex}
+ \option{-o example.nnd}
+ \infile{\jobname.ndx}
+ }
+ \input{
+ \file{\jobname.ndx}
+ }
+ \output{
+ \file{\jobname.nnd}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.nnd}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.ndx}
+ }
+}
+
+\logrequest[package=index,priority=8,active=0]{%
+ \generic{makeindex}
+ \cmdline{
+ \binary{makeindex}
+ \option{-o example.tnd}
+ \infile{\jobname.tdx}
+ }
+ \input{
+ \file{\jobname.tdx}
+ }
+ \output{
+ \file{\jobname.tnd}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.tnd}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.tdx}
+ }
+}
+
+\ltxrequest{index}{0}{
+ \provides[type=dynamic]{
+ \file{\jobname.idx}
+ \file{\jobname.ndx}
+ \file{\jobname.tdx}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.ind}
+ \file{\jobname.nnd}
+ \file{\jobname.tnd}
+ }
+}
+
+\begin{document}
+\end{document}
diff --git a/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.run.xml b/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.run.xml
new file mode 100644
index 0000000000..4db0f6e350
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.run.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex8</binary>
+ <option>--wolfgang</option>
+ <option>--min_crossrefs 1</option>
+ <option>--csfile latin9.csf</option>
+ <infile>03-biblatex+bibtex8</infile>
+ </cmdline>
+ <input>
+ <file>03-biblatex+bibtex8.aux</file>
+ </input>
+ <output>
+ <file>03-biblatex+bibtex8.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>03-biblatex+bibtex8.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>03-biblatex+bibtex8.aux</file>
+ <file>03-biblatex+bibtex8-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile1</file>
+ <file>bibfile2</file>
+ <file>bibfile3</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ <file>latin9.csf</file>
+ </requires>
+ </external>
+ <internal package="biblatex" priority="9" active="1">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>03-biblatex+bibtex8.aux</file>
+ <file>03-biblatex+bibtex8-blx.bib</file>
+ </provides>
+ <requires type="dynamic">
+ <file>03-biblatex+bibtex8.bbl</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.def</file>
+ <file>authoryear.bbx</file>
+ <file>standard.bbx</file>
+ <file>authoryear.cbx</file>
+ <file>biblatex.cfg</file>
+ <file>american.lbx</file>
+ <file>english.lbx</file>
+ </requires>
+ </internal>
+</requests>
diff --git a/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.tex b/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.tex
new file mode 100644
index 0000000000..495ea364f7
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/03-biblatex+bibtex8.tex
@@ -0,0 +1,79 @@
+\documentclass{minimal}
+\usepackage{logreq}
+
+% biblatex example
+% (this is a mockup of code which will be used in biblatex >= 0.9b)
+
+% sample preamble:
+
+% \usepackage[latin9]{inputenc}
+% \usepackage[american]{babel}
+% \usepackage[style=authoryear,backend=bibtex8,mincrossrefs=1,bibencoding=inputenc]{biblatex}
+% \bibliography{bibfile1,bibfile2,bibfile3}
+
+% workflow:
+
+% latex file (-> both requests active)
+% bibtex file
+% latex file (-> both requests inactive)
+
+% additional bibtex passes may be required to resolve xrefs,
+% additional latex passes may be required to resolve labels;
+% i.e., the workflow may get as complex as this:
+
+% latex file (-> both requests active)
+% bibtex file
+% latex file (-> both requests active)
+% bibtex file
+% latex file (-> latex request active, bibtex request inactive)
+% latex file (-> both requests inactive)
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex8}
+ \option{--wolfgang}
+ \option{--min_crossrefs 1}
+ \option{--csfile latin9.csf}
+ \infile{\jobname}
+ }
+ \input{
+ \file{\jobname.aux}
+ }
+ \output{
+ \file{\jobname.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile1,bibfile2,bibfile3}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}
+ \file{latin9.csf}
+ }
+}
+
+\ltxrequest{biblatex}{1}{
+ \provides[type=dynamic]{
+ \file{\jobname.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=static]{
+ \let\do=\file
+ \docsvlist{biblatex.def,authoryear.bbx,standard.bbx,authoryear.cbx,
+ biblatex.cfg,american.lbx,english.lbx}
+ }
+}
+
+\begin{document}
+\end{document}
diff --git a/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.run.xml b/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.run.xml
new file mode 100644
index 0000000000..280f919945
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.run.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <option>--min_crossrefs 2</option>
+ <infile>04-biblatex+bibtex+refsections</infile>
+ </cmdline>
+ <input>
+ <file>04-biblatex+bibtex+refsections.aux</file>
+ </input>
+ <output>
+ <file>04-biblatex+bibtex+refsections.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>04-biblatex+bibtex+refsections.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>04-biblatex+bibtex+refsections.aux</file>
+ <file>04-biblatex+bibtex+refsections-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile1</file>
+ <file>bibfile2</file>
+ <file>bibfile3</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ </requires>
+ </external>
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <option>--min_crossrefs 2</option>
+ <infile>04-biblatex+bibtex+refsections1-blx</infile>
+ </cmdline>
+ <input>
+ <file>04-biblatex+bibtex+refsections1-blx.aux</file>
+ </input>
+ <output>
+ <file>04-biblatex+bibtex+refsections1-blx.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>04-biblatex+bibtex+refsections1-blx.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>04-biblatex+bibtex+refsections1-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile1</file>
+ <file>bibfile3</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ </requires>
+ </external>
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <option>--min_crossrefs 2</option>
+ <infile>04-biblatex+bibtex+refsections2-blx</infile>
+ </cmdline>
+ <input>
+ <file>04-biblatex+bibtex+refsections2-blx.aux</file>
+ </input>
+ <output>
+ <file>04-biblatex+bibtex+refsections2-blx.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>04-biblatex+bibtex+refsections2-blx.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>04-biblatex+bibtex+refsections2-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile4</file>
+ <file>bibfile6</file>
+ <file>bibfile2</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ </requires>
+ </external>
+ <external package="biblatex" priority="5" active="1">
+ <generic>bibtex</generic>
+ <cmdline>
+ <binary>bibtex</binary>
+ <option>--min_crossrefs 2</option>
+ <infile>04-biblatex+bibtex+refsections3-blx</infile>
+ </cmdline>
+ <input>
+ <file>04-biblatex+bibtex+refsections3-blx.aux</file>
+ </input>
+ <output>
+ <file>04-biblatex+bibtex+refsections3-blx.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>04-biblatex+bibtex+refsections3-blx.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>04-biblatex+bibtex+refsections3-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections-blx.bib</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile5</file>
+ <file>bibfile6</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.bst</file>
+ </requires>
+ </external>
+ <internal package="biblatex" priority="9" active="1">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>04-biblatex+bibtex+refsections.aux</file>
+ <file>04-biblatex+bibtex+refsections1-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections2-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections3-blx.aux</file>
+ <file>04-biblatex+bibtex+refsections-blx.bib</file>
+ </provides>
+ <requires type="dynamic">
+ <file>04-biblatex+bibtex+refsections.bbl</file>
+ <file>04-biblatex+bibtex+refsections1-blx.bbl</file>
+ <file>04-biblatex+bibtex+refsections2-blx.bbl</file>
+ <file>04-biblatex+bibtex+refsections3-blx.bbl</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.def</file>
+ <file>numeric.bbx</file>
+ <file>standard.bbx</file>
+ <file>numeric.cbx</file>
+ <file>biblatex.cfg</file>
+ <file>american.lbx</file>
+ <file>english.lbx</file>
+ </requires>
+ </internal>
+</requests>
diff --git a/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.tex b/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.tex
new file mode 100644
index 0000000000..cf7b3f509b
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/04-biblatex+bibtex+refsections.tex
@@ -0,0 +1,190 @@
+\documentclass{minimal}
+\usepackage{logreq}
+
+% biblatex example
+% (this is a mockup of code which will be used in biblatex >= 0.9b)
+
+% sample code:
+
+% \usepackage{biblatex}
+% \bibliography{bibfile1,bibfile2,bibfile3}
+% \begin{document}
+% ...
+% \begin{refsection}[bibfile1,bibfile3]
+% ...
+% \end{refsection}
+% ...
+% \begin{refsection}[bibfile4,bibfile6,bibfile2]
+% ...
+% \end{refsection}
+% ...
+% \begin{refsection}[bibfile5,bibfile6]
+% ...
+% \end{refsection}
+% \end{document}
+
+% workflow:
+
+% latex file (-> all requests active)
+% bibtex file
+% bibtex file1-blx
+% bibtex file2-blx
+% bibtex file3-blx
+% latex file (-> all requests inactive)
+
+% additional bibtex passes may be required to resolve xrefs,
+% additional latex passes may be required to resolve labels;
+% i.e., the workflow may get as complex as this:
+
+% latex file (-> all requests active)
+% bibtex file
+% bibtex file1-blx
+% bibtex file2-blx
+% bibtex file3-blx
+% latex file (-> all requests inactive)
+% bibtex file
+% bibtex file1-blx
+% bibtex file2-blx
+% bibtex file3-blx
+% latex file (-> latex request active, bibtex requests inactive)
+% latex file (-> both requests inactive)
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex}
+ \option{--min_crossrefs 2}
+ \infile{\jobname}
+ }
+ \input{
+ \file{\jobname.aux}
+ }
+ \output{
+ \file{\jobname.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile1,bibfile2,bibfile3}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}
+ }
+}
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex}
+ \option{--min_crossrefs 2}
+ \infile{\jobname1-blx}
+ }
+ \input{
+ \file{\jobname1-blx.aux}
+ }
+ \output{
+ \file{\jobname1-blx.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname1-blx.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname1-blx.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile1,bibfile3}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}
+ }
+}
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex}
+ \option{--min_crossrefs 2}
+ \infile{\jobname2-blx}
+ }
+ \input{
+ \file{\jobname2-blx.aux}
+ }
+ \output{
+ \file{\jobname2-blx.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname2-blx.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname2-blx.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile4,bibfile6,bibfile2}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}
+ }
+}
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{bibtex}
+ \cmdline{
+ \binary{bibtex}
+ \option{--min_crossrefs 2}
+ \infile{\jobname3-blx}
+ }
+ \input{
+ \file{\jobname3-blx.aux}
+ }
+ \output{
+ \file{\jobname3-blx.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname3-blx.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname3-blx.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile5,bibfile6}
+ }
+ \requires[type=static]{
+ \file{biblatex.bst}
+ }
+}
+
+\ltxrequest{biblatex}{1}{
+ \provides[type=dynamic]{
+ \file{\jobname.aux}
+ \file{\jobname1-blx.aux}
+ \file{\jobname2-blx.aux}
+ \file{\jobname3-blx.aux}
+ \file{\jobname-blx.bib}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bbl}
+ \file{\jobname1-blx.bbl}
+ \file{\jobname2-blx.bbl}
+ \file{\jobname3-blx.bbl}
+ }
+ \requires[type=static]{
+ \let\do=\file
+ \docsvlist{biblatex.def,numeric.bbx,standard.bbx,numeric.cbx,
+ biblatex.cfg,american.lbx,english.lbx}
+ }
+}
+
+\begin{document}
+\end{document}
diff --git a/macros/latex/contrib/logreq/examples/05-biblatex+biber.run.xml b/macros/latex/contrib/logreq/examples/05-biblatex+biber.run.xml
new file mode 100644
index 0000000000..6d18d9b94d
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/05-biblatex+biber.run.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" standalone="yes"?>
+<!-- logreq request file -->
+<!-- logreq version 1.0 / dtd version 1.0 -->
+<!-- Do not edit this file! -->
+<!DOCTYPE requests [
+ <!ELEMENT requests (internal | external)*>
+ <!ELEMENT internal (generic, (provides | requires)*)>
+ <!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
+ <!ELEMENT cmdline (binary, (option | infile | outfile)*)>
+ <!ELEMENT input (file)+>
+ <!ELEMENT output (file)+>
+ <!ELEMENT provides (file)+>
+ <!ELEMENT requires (file)+>
+ <!ELEMENT generic (#PCDATA)>
+ <!ELEMENT binary (#PCDATA)>
+ <!ELEMENT option (#PCDATA)>
+ <!ELEMENT infile (#PCDATA)>
+ <!ELEMENT outfile (#PCDATA)>
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST requests
+ version CDATA #REQUIRED
+ >
+ <!ATTLIST internal
+ package CDATA #REQUIRED
+ priority (9) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST external
+ package CDATA #REQUIRED
+ priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
+ active (0 | 1) #REQUIRED
+ >
+ <!ATTLIST provides
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST requires
+ type (static | dynamic | editable) #REQUIRED
+ >
+ <!ATTLIST file
+ type CDATA #IMPLIED
+ >
+]>
+<requests version="1.0">
+ <external package="biblatex" priority="5" active="1">
+ <generic>biber</generic>
+ <cmdline>
+ <binary>biber</binary>
+ <infile>05-biblatex+biber</infile>
+ </cmdline>
+ <input>
+ <file>05-biblatex+biber.bcf</file>
+ </input>
+ <output>
+ <file>05-biblatex+biber.bbl</file>
+ </output>
+ <provides type="dynamic">
+ <file>05-biblatex+biber.bbl</file>
+ </provides>
+ <requires type="dynamic">
+ <file>05-biblatex+biber.bcf</file>
+ </requires>
+ <requires type="editable">
+ <file>bibfile1</file>
+ <file>bibfile2</file>
+ <file>bibfile3</file>
+ </requires>
+ </external>
+ <internal package="biblatex" priority="9" active="1">
+ <generic>latex</generic>
+ <provides type="dynamic">
+ <file>05-biblatex+biber.bcf</file>
+ </provides>
+ <requires type="dynamic">
+ <file>05-biblatex+biber.bbl</file>
+ </requires>
+ <requires type="static">
+ <file>biblatex.def</file>
+ <file>numeric.bbx</file>
+ <file>standard.bbx</file>
+ <file>numeric.cbx</file>
+ <file>biblatex.cfg</file>
+ <file>american.lbx</file>
+ <file>english.lbx</file>
+ </requires>
+ </internal>
+</requests>
diff --git a/macros/latex/contrib/logreq/examples/05-biblatex+biber.tex b/macros/latex/contrib/logreq/examples/05-biblatex+biber.tex
new file mode 100644
index 0000000000..a3e558dea1
--- /dev/null
+++ b/macros/latex/contrib/logreq/examples/05-biblatex+biber.tex
@@ -0,0 +1,66 @@
+\documentclass{minimal}
+\usepackage{logreq}
+
+% biblatex example
+% (this is a mockup of code which will be used in biblatex >= 0.9b)
+
+% sample preamble:
+
+% \usepackage[backend=biber]{biblatex}
+% \bibliography{bibfile1,bibfile2,bibfile3}
+
+% workflow:
+
+% latex file (-> both requests active)
+% biber file
+% latex file (-> both requests inactive)
+
+% The Biber (> 0.5.3) workflow will be straightforward even if
+% there are refsection environments, but additional latex passes
+% may be required to resolve labels:
+
+% latex file (-> both requests active)
+% bibtex file
+% latex file (-> latex request active, biber request inactive)
+% latex file (-> both requests inactive)
+
+\logrequest[package=biblatex,priority=5,active=1]{
+ \generic{biber}
+ \cmdline{
+ \binary{biber}
+ \infile{\jobname}
+ }
+ \input{
+ \file{\jobname.bcf}
+ }
+ \output{
+ \file{\jobname.bbl}
+ }
+ \provides[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bcf}
+ }
+ \requires[type=editable]{
+ \let\do=\file
+ \docsvlist{bibfile1,bibfile2,bibfile3}
+ }
+}
+
+\ltxrequest{biblatex}{1}{
+ \provides[type=dynamic]{
+ \file{\jobname.bcf}
+ }
+ \requires[type=dynamic]{
+ \file{\jobname.bbl}
+ }
+ \requires[type=static]{
+ \let\do=\file
+ \docsvlist{biblatex.def,numeric.bbx,standard.bbx,numeric.cbx,
+ biblatex.cfg,american.lbx,english.lbx}
+ }
+}
+
+\begin{document}
+\end{document}
diff --git a/macros/latex/contrib/logreq/logreq.def b/macros/latex/contrib/logreq/logreq.def
new file mode 100644
index 0000000000..f114e40159
--- /dev/null
+++ b/macros/latex/contrib/logreq/logreq.def
@@ -0,0 +1,35 @@
+% $Id: logreq.def,v 1.0 2010/08/04 16:12:57 lehman stable $
+
+\renewcommand*{\LogreqDTDVersion}{1.0}
+\ProvidesFile{logreq.def}
+[\lrq@rcsid $Id: logreq.def,v 1.0 2010/08/04 16:12:57 lehman stable $
+ logreq spec v\LogreqDTDVersion]
+
+\DeclareLogreqContainer{requests}{(internal | external)*}
+\DeclareLogreqContainer{internal}{(generic, (provides | requires)*)}
+\DeclareLogreqContainer{external}{(generic, cmdline?, input?, output?, (provides | requires)*)}
+\DeclareLogreqContainer{cmdline}{(binary, (option | infile | outfile)*)}
+\DeclareLogreqContainer{input}{(file)+}
+\DeclareLogreqContainer{output}{(file)+}
+\DeclareLogreqContainer{provides}{(file)+}
+\DeclareLogreqContainer{requires}{(file)+}
+
+\DeclareLogreqElement{generic}{(#PCDATA)}
+\DeclareLogreqElement{binary}{(#PCDATA)}
+\DeclareLogreqElement{option}{(#PCDATA)}
+\DeclareLogreqElement{infile}{(#PCDATA)}
+\DeclareLogreqElement{outfile}{(#PCDATA)}
+\DeclareLogreqElement{file}{(#PCDATA)}
+
+\DeclareLogreqAttribute{requests}{version}{CDATA #REQUIRED}
+\DeclareLogreqAttribute{internal}{package}{CDATA #REQUIRED}
+\DeclareLogreqAttribute{internal}{priority}{(9) #REQUIRED}
+\DeclareLogreqAttribute{internal}[1]{active}{(0 | 1) #REQUIRED}
+\DeclareLogreqAttribute{external}{package}{CDATA #REQUIRED}
+\DeclareLogreqAttribute{external}{priority}{(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED}
+\DeclareLogreqAttribute{external}[1]{active}{(0 | 1) #REQUIRED}
+\DeclareLogreqAttribute{provides}{type}{(static | dynamic | editable) #REQUIRED}
+\DeclareLogreqAttribute{requires}{type}{(static | dynamic | editable) #REQUIRED}
+\DeclareLogreqAttribute{file}{type}{CDATA #IMPLIED}
+
+\endinput
diff --git a/macros/latex/contrib/logreq/logreq.sty b/macros/latex/contrib/logreq/logreq.sty
new file mode 100644
index 0000000000..f64a97f552
--- /dev/null
+++ b/macros/latex/contrib/logreq/logreq.sty
@@ -0,0 +1,237 @@
+% $Id: logreq.sty,v 1.0 2010/08/04 16:12:57 lehman stable $
+
+% Copyright (c) 2010 Philipp Lehman.
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3.
+%
+% The LPPL maintenance status of this software is 'maintained'.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\def\lrq@rcsid$#1: #2 #3 #4 #5${#4 v#3}
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{logreq}
+[\lrq@rcsid $Id: logreq.sty,v 1.0 2010/08/04 16:12:57 lehman stable $
+ xml request logger]
+\RequirePackage{etoolbox}
+\RequirePackage{keyval}
+
+\let\lrq@tempa\@empty
+\def\do#1{%
+ \edef\lrq@tempa{\lrq@tempa
+ \catcode\number`#1=\the\catcode`#1\relax}%
+ \@makeother#1}
+\do\<\do\>\do\?\do\!\do\/\do\=\do\"
+\let\do\noexpand
+\AtEndOfPackage{\lrq@tempa\undef\lrq@tempa}
+
+\def\lrq@version$#1: #2 ${#2}
+\edef\lrq@version{\lrq@version$Revision: 1.0 $}
+
+\newcount\lrq@indent
+\def\lrq@nl{^^J}
+\def\lrq@tab{\lrq@tab@i\lrq@indent}
+\def\lrq@tab@i#1{%
+ \ifnumgreater{#1}\z@
+ {\space\space
+ \expandafter\lrq@tab@i
+ \expandafter{\the\numexpr#1-\@ne}}
+ {}}
+\let\lrq@hook@data\@empty
+\def\lrq@hook@init{%
+ \lrq@indent\@ne
+ \let\comment\lrq@xml@comment}
+
+\def\lrq@xml@sig{<!-- logreq request file -->}
+\edef\lrq@xml@ver{<!-- logreq version \lrq@version\space / dtd version \noexpand\LogreqDTDVersion\space -->}
+
+\def\lrq@xml@comment#1{%
+ \xappto\lrq@hook@data{\lrq@tab<!-- #1 -->\lrq@nl}}
+
+\def\lrq@xml@container#1#2#3{%
+ \begingroup
+ \lrq@parseattributes{#1}{#2}%
+ \xappto\lrq@hook@data{\lrq@tab<#1\lrq@attribs>\lrq@nl}%
+ \advance\lrq@indent\@ne#3\advance\lrq@indent\m@ne
+ \xappto\lrq@hook@data{\lrq@tab</#1>\lrq@nl}%
+ \endgroup}
+
+\def\lrq@xml@element#1#2#3{%
+ \begingroup
+ \lrq@parseattributes{#1}{#2}%
+ \xappto\lrq@hook@data{\lrq@tab<#1\lrq@attribs>#3</#1>\lrq@nl}%
+ \endgroup}
+
+\def\lrq@xml@setup{%
+ \begingroup
+ \lrq@indent\@ne
+ \let\do\lrq@dtd@doelement
+ \dolistloop\lrq@lst@elm
+ \xdef\lrq@hook@data{%
+ <?xml version="1.0" standalone="yes"?>\lrq@nl
+ \lrq@xml@sig\lrq@nl
+ \lrq@xml@ver\lrq@nl
+ <!-- Do not edit this file! -->\lrq@nl
+ <!DOCTYPE requests [\lrq@nl\lrq@hook@dtd]>\lrq@nl
+ <requests version="\LogreqDTDVersion">\lrq@nl\lrq@hook@data</requests>}%
+ \endgroup
+}
+
+\def\lrq@dtd@doelement#1{%
+ \ifcsdef{lrq@lst@att@#1}%
+ {\xappto\lrq@hook@dtd{\lrq@tab<!ATTLIST #1\lrq@nl}%
+ \begingroup
+ \lrq@indent\tw@
+ \let\do\lrq@dtd@doattribute
+ \dolistcsloop{lrq@lst@att@#1}%
+ \endgroup
+ \xappto\lrq@hook@dtd{\lrq@tab>\lrq@nl}}
+ {}}
+
+\def\lrq@dtd@doattribute#1{%
+ \xappto\lrq@hook@dtd{\lrq@tab#1\lrq@nl}}
+
+\def\lrq@writeout{%
+ \PackageInfo{logreq}{%
+ Writing requests to '\@reqoutput'\@gobble}%
+ \begingroup
+ \openin\@mainaux\@reqoutput\relax
+ \ifeof\@mainaux
+ \lrq@writeout@ii
+ \else
+ \endlinechar\m@ne
+ \readline\@mainaux to \lrq@tempa
+ \ifeof\@mainaux
+ \lrq@writeout@ii
+ \else
+ \readline\@mainaux to \lrq@tempa
+ \edef\lrq@xml@sig{\detokenize\expandafter{\lrq@xml@sig}}%
+ \ifx\lrq@xml@sig\lrq@tempa
+ \readline\@mainaux to \lrq@tempa
+ \edef\lrq@xml@ver{\noexpand\detokenize{\lrq@xml@ver}}%
+ \edef\lrq@xml@ver{\lrq@xml@ver}%
+ \ifx\lrq@xml@ver\lrq@tempa
+ \else
+ \PackageWarning{logreq}{%
+ File '\@reqoutput' created\MessageBreak
+ by different version of logreq.\MessageBreak
+ Overwriting file}%
+ \fi
+ \lrq@writeout@ii
+ \else
+ \lrq@writeout@i
+ \PackageError{logreq}
+ {File '\@reqoutput' not created by logreq}
+ {This file was apparently not created by logreq.\MessageBreak
+ I'm aborting now}%
+ \fi
+ \fi
+ \fi}
+
+\def\lrq@writeout@i{%
+ \closein\@mainaux
+ \endgroup}
+
+\def\lrq@writeout@ii{%
+ \lrq@writeout@i
+ \lrq@xml@setup
+ \immediate\openout\@mainaux\@reqoutput\relax
+ \immediate\write\@mainaux{\lrq@hook@data}%
+ \immediate\closeout\@mainaux}
+
+\AtEndDocument{\AfterEndDocument{\lrq@writeout}}
+
+\protected\def\lrq@container{\lrq@parser\lrq@xml@container}
+\protected\def\lrq@element{\lrq@parser\lrq@xml@element}
+
+\def\lrq@parser#1#2{%
+ \@ifnextchar[%]
+ {\lrq@parser@i{#1}{#2}}
+ {\lrq@parser@i{#1}{#2}[]}}
+
+\def\lrq@parser@i#1#2[#3]#4{%
+ #1{#2}{#3}{#4}}
+
+% {<element>}{<dtd spec>}
+
+\newrobustcmd*{\DeclareLogreqContainer}{\lrq@defparser\lrq@container}
+\@onlypreamble\DeclareLogreqContainer
+
+\newrobustcmd*{\DeclareLogreqElement}{\lrq@defparser\lrq@element}
+\@onlypreamble\DeclareLogreqElement
+
+\def\lrq@defparser#1{%
+ \begingroup\@makeother\#%
+ \lrq@defparser@i{#1}}
+
+\def\lrq@defparser@i#1#2#3{%
+ \endgroup
+ \eappto\lrq@hook@init{%
+ \def\expandafter\noexpand\csname#2\endcsname{%
+ \noexpand#1{#2}}}%
+ \listadd\lrq@lst@elm{#2}%
+ \begingroup
+ \lrq@indent\@ne
+ \xappto\lrq@hook@dtd{\lrq@tab<!ELEMENT #2 \detokenize{#3}>\lrq@nl}%
+ \endgroup}
+
+% {<element>}[<default>]{<attribute>}{<dtd spec>}
+
+\newrobustcmd*{\DeclareLogreqAttribute}[1]{%
+ \@ifnextchar[%]
+ {\lrq@defattibute{#1}}
+ {\lrq@defattibute{#1}[]}}
+\@onlypreamble\DeclareLogreqAttribute
+
+\def\lrq@defattibute#1[#2]#3{%
+ \ifblank{#2}
+ {\define@key{lrq@att@#1}{#3}}
+ {\define@key{lrq@att@#1}{#3}[#2]}%
+ {\eappto\lrq@attribs{ #3="##1"}}%
+ \begingroup\@makeother\#%
+ \lrq@defattibute@i{#1}{#3}}
+
+\def\lrq@defattibute@i#1#2#3{%
+ \endgroup
+ \listcseadd{lrq@lst@att@#1}{#2 #3}}
+
+\def\lrq@parseattributes#1#2{%
+ \let\lrq@attribs\@empty
+ \setkeys{lrq@att@#1}{#2}}
+
+% {<macro>}{<attributes>}{<request>}
+
+\protected\def\lrq@request#1#2#3{%
+ \begingroup
+ \setbox\@tempboxa=\hbox{%
+ \let\if@safe@actives\iftrue
+ \let\protect\string
+ \lrq@hook@init
+ #1[#2]{#3}}%
+ \endgroup}
+
+% package interface
+
+% {<package>}{<active>}{<request>}
+
+\newrobustcmd*{\ltxrequest}[3]{%
+ \lrq@request\internal{package={#1},priority=9,active={#2}}{\generic{latex}#3}}
+
+% [package=<package>,priority=<priority>,active=<0|1>]{<request>}
+
+\newrobustcmd*{\logrequest}[2][]{%
+ \lrq@request\external{#1}{#2}}
+
+% initialization
+
+\newcommand*{\@reqoutput}{\jobname.run.xml}
+\newcommand*{\LogreqDTDVersion}{}
+\input{logreq.def}
+
+\endinput