# -*- mode: Perl -*-
# /=====================================================================\ #
# | revtex4 support | #
# | Implementation for LaTeXML | #
# |=====================================================================| #
# | Part of LaTeXML: | #
# | Public domain software, produced as part of work done by the | #
# | United States Government & not subject to copyright in the US. | #
# |---------------------------------------------------------------------| #
# | Thanks to Catalin David <c.david@jacobs-university.de> | #
# | of the arXMLiv group for initial implementation | #
# | http://arxmliv.kwarc.info/ | #
# | Released to the Public Domain | #
# |---------------------------------------------------------------------| #
# | Bruce Miller <bruce.miller@nist.gov> #_# | #
# | http://dlmf.nist.gov/LaTeXML/ (o o) | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;
RequirePackage('hyperref');
RequirePackage('natbib'); # not necessarily loaded?
RequirePackage('revsymb');
RequirePackage('url');
RequirePackage('longtable');
# Not sure this strictly required
RequirePackage('dcolumn');
# Aligned to RevTeX4 Authors guide (auguide)
#======================================================================
# 4. The Front Matter
#======================================================================
# 4.3
DefMacro('\title[]{}', '\@add@frontmatter{ltx:title}{#2}');
DefMacro('\doauthor{}{}{}', '#1 #2 #3'); # -- ??
DefMacro('\address', '\affiliation');
# DefMacro('\affiliation','');
DefConstructor('\@@@affiliation{}', "^ <ltx:contact role='affiliation'>#1</ltx:contact>");
DefMacro('\affiliation{}', '\@add@to@frontmatter{ltx:creator}{\@@@affiliation{#1}}');
DefMacro('\altaddress', '\altaffiliation');
DefMacro('\altaffiliation', '\affiliation');
DefMacro('\andname', 'and');
DefMacro('\collaboration', ''); # Should have a look at this too
DefMacro('\noaffiliation', Tokens());
DefConstructor('\@@@email{}', "^ <ltx:contact role='email'>#1</ltx:contact>");
DefMacro('\email [] Semiverbatim', '\@add@to@frontmatter{ltx:creator}{\@@@email{#2}}');
DefConstructor('\@@@homepage{}', "^ <ltx:contact role='url'>#1</ltx:contact>");
DefMacro('\homepage Semiverbatim', '\@add@to@frontmatter{ltx:creator}{\@@@homepage{#1}}');
DefMacro('\firstname', ''); # \let\firstname\@firstofone ??
DefConstructor('\surname{}', "#1");
# 4.4
DefMacro('\abstractname', 'Abstract');
# 4.5
DefMacro('\pacs{}', '\@add@frontmatter{ltx:classification}[scheme=pacs]{#1}');
# 4.6
DefMacro('\keywords{}', '\@add@frontmatter{ltx:keywords}{#1}');
# 4.7
DefMacro('\preprint{}', '\@add@frontmatter{ltx:note}[role=preprint]{#1}');
# Extra stuff
DefMacro('\blankaffiliation', '');
DefMacro('\checkindate', '\today');
DefMacro('\received[]{}', '\@add@frontmatter{ltx:date}[role=received]{#2}');
DefMacro('\revised[]{}', '\@add@frontmatter{ltx:date}[role=revised]{#2}');
DefMacro('\accepted[]{}', '\@add@frontmatter{ltx:date}[role=accepted]{#2}');
DefMacro('\published[]{}', '\@add@frontmatter{ltx:date}[role=published]{#2}');
#======================================================================
# 5. The body of the paper
#======================================================================
# 5.3
DefMacro('\widetext', '');
DefMacro('\endwidetext', '');
# These are called obsolete, but I can't even find them in earlier RevTeX's!
DefMacro('\narrowtext', '');
DefMacro('\endnarrowtext', '');
DefMacro('\mediumtext', '');
DefMacro('\endmediumtext', '');
# 5.5
# Normally, we'd define the acknowledgements environment simply as:
# DefEnvironment('{acknowledgements}',
# "<ltx:acknowledgements>#body</ltx:acknowledgements>");
# However, people seem to insist on "misusing" it, by just saying
# \acknowledgements... which actually "works".
# So, we just open it, and let it autoclose.
DefConstructor('\acknowledgments', "<ltx:acknowledgements name='#name'>",
properties => sub { (name => Digest(T_CS('\acknowledgmentsname'))); });
DefConstructor('\endacknowledgments', "</ltx:acknowledgements>");
DefMacro('\acknowledgmentsname', 'Acknowledgements');
Let('\acknowledgements', '\acknowledgments');
Let('\endacknowledgements', '\endacknowledgments');
Tag("ltx:acknowledgements", autoClose => 1);
# Extra stuff
DefMacro('\thesection', '\Roman{section}'); # Apparently the desired style.
DefMacro('\thepagegrid', 'one');
DefMacro('\onecolumngrid', '');
DefMacro('\twocolumngrid', '');
DefMacro('\restorecolumngrid', '');
DefPrimitive('\twocolumn', undef);
DefConstructor('\rotatebox{Number}{}', '#2'); # dummy defn, unless graphics loaded
DefMacro('\pagesofar', '');
# endnotes handled like footnotes
DefConstructor('\endnote[]{}',
"<ltx:note role='endnote' mark='#refnum'>#2</ltx:note>",
mode => 'text',
properties => sub {
($_[1] ? (refnum => $_[1]) : RefStepCounter('footnote')) });
DefConstructor('\endnotemark[]',
"<ltx:note role='endnotemark' mark='#refnum'></ltx:note>",
mode => 'text',
properties => sub {
($_[1] ? (refnum => $_[1]) : RefStepCounter('footnote')) });
DefConstructor('\endnotetext[]{}',
"<ltx:note role='endnotetext' mark='#refnum'>#2</ltx:note>",
mode => 'text',
properties => sub {
($_[1] ? (refnum => $_[1]) : (refnum => Digest(T_CS("\\thefootnote")))); });
#======================================================================
# 6. Math and Equations
#======================================================================
# 6.5
# recommends amsmath's {subequations}
# Extra stuff
Let('\case', '\frac');
Let('\slantfrac', '\frac');
DefConstructor('\text{}', "<ltx:text>#1</ltx:text>", mode => 'text');
# RevTeX3 (obsolete in RevTeX4)
DefConstructor('\bm{}', '#1', bounded => 1, requireMath => 1, font => { forcebold => 1 });
DefConstructor('\bbox{}', '#1', bounded => 1, requireMath => 1, font => { forcebold => 1 });
DefConstructor('\pmb{}', '#1', bounded => 1, requireMath => 1,
font => { forcebold => 1, family => 'blackboard',
series => 'medium', shape => 'upright' });
DefConstructor('\eqnum {}', '',
afterDigest => sub {
AssignValue(EQUATIONROW_NUMBER => ToString($_[1]), 'global'); },
mode => 'text');
# Redefined in revtex3_support
DefMacro('\mathletters', '');
DefMacro('\endmathletters', '');
#======================================================================
# 7. Footnotes
#======================================================================
#======================================================================
# 8. Citations and References
#======================================================================
DefMacro('\onlinecite', '\citealp');
Let('\textcite', '\citet');
# RevTeX3; Obsolete for RevTeX4 (but semi-implemented there)
# Should be a simple environment, but tends to be misused, so define separately
DefConstructor('\references',
"<ltx:bibliography xml:id='#id' "
. "bibstyle='#bibstyle' citestyle='#citestyle' sort='#sort'>"
. "<ltx:title font='#titlefont' _force_font='true'>#title</ltx:title>"
. "<ltx:biblist>",
afterDigest => sub { beginBibliography($_[1]); });
DefConstructor('\endreferences',
"</ltx:biblist></ltx:bibliography>");
# bibliography and biblist are already set as autoClose.
#======================================================================
# 9. Figures and Artwork
#======================================================================
#======================================================================
# 10. Tables
#======================================================================
# Used to put double rules before & after a tabular.
DefEnvironment('{ruledtabular}', '#body');
# No idea what this is really for, but this seems to be the jist of it.
DefEnvironment('{quasitable}', '#body',
beforeDigest => sub {
Let("\\begin{tabular}", "\\begin{longtable}");
Let("\\end{tabular}", "\\end{longtable}");
Let("\\tabular", "\\longtable");
Let("\\endtabular", "\\endlongtable"); });
DefMacro('\squeezetable', ''); #presentational
# Extra stuff
DefMacro('\toprule', '\hline\hline');
DefMacro('\colrule', '\hline');
DefMacro('\botrule', '\hline\hline');
DefMacro('\frstrut', '');
DefMacro('\lrstrut', '');
Let('\tableftsep', '\tabcolsep');
Let('\tabmidsep', '\tabcolsep');
Let('\tabrightsep', '\tabcolsep');
Let('\tablenote', '\footnote');
Let('\tablenotemark', '\footnotemark');
Let('\tablenotetext', '\footnotetext');
# RevTeX3 (obsolete in RevTeX4)
Let('\tableline', '\colrule');
# This seems to be implied.
RawTeX('\newcolumntype{d}{D{.}{.}{-1}}');
#======================================================================
# 11. Placement of Figures, Tables and Other Floats
#======================================================================
DefPrimitive('\printfigures OptionalMatch:*', undef);
DefPrimitive('\printtables OptionalMatch:*', undef);
DefMacro('\oneapage', '');
DefMacro('\printendnotes', '');
#======================================================================
# 12. Rotating Floats
#======================================================================
# Rotates the page
DefEnvironment('{turnpage}', '#body');
#======================================================================
# 13. RevTeX 4 symbols and the revsymb package
#======================================================================
#======================================================================
# 14. Other RevTeX 4 Features
#======================================================================
#======================================================================
# XX. Extra stuff
#======================================================================
Let('\MakeTextLowercase', '\lowercase');
Let('\MakeTextUppercase', '\uppercase');
DefMacro('\NoCaseChange', '');
# Macro & Control stuff.
# Are these really intended for authors to use?
DefMacro('\absbox', ''); #what does \newbox\absbox mean?
DefMacro('\addstuff{}{}', '');
DefMacro('\appdef{}{}', '');
DefMacro('\gappdef{}{}', '');
DefMacro('\prepdef{}{}', '');
DefMacro('\lineloop{}', '');
DefMacro('\loopuntil{}', '');
DefMacro('\loopwhile{}', '');
DefMacro('\traceoutput', '');
DefMacro('\tracingplain', '');
DefMacro('\removephantombox', '');
DefMacro('\removestuff', '');
DefMacro('\replacestuff{}{}', '');
DefMacro('\say[]', '\typeout{<\noexpand#1=\meaning#1>}');
DefMacro('\saythe[]', '\typeout{<\noexpand#1=\the#1>}');
# Various extra i18n stuff.
DefMacro('\copyrightname', '??'); # ?? is that ok? that is what the .sty says, but...
DefMacro('\journalname', '??');
DefMacro('\lofname', 'List of Figures');
DefMacro('\lotname', 'List of Tables');
DefMacro('\notesname', 'Notes');
DefMacro('\numbername', 'number');
DefMacro('\ppname', 'pp');
DefMacro('\tocname', 'Contents');
DefMacro('\volumename', 'volume');
# Apparently some sort of document information?
DefMacro('\volumenumber{}', '#1');
DefMacro('\volumeyear{}', '#1');
DefMacro('\issuenumber{}', '#1');
DefMacro('\bibinfo{}{}', '#2');
DefMacro('\eprint{}', 'eprint #1');
DefMacro('\eid{}', '#1');
DefMacro('\startpage{}', '\pageref{FirstPage}{#1}');
DefMacro('\endpage', '\pageref{LastPage}{#1}');
# Other pointless stuff.
DefMacro('\flushing', '');
DefMacro('\triggerpar', '\par');
DefMacro('\fullinterlineskip', '');
DefRegister('\footbox' => Box());
DefRegister('\intertabularlinepenalty' => Number('100'));
# These are called obsolete, but I can't even find them in earlier RevTeX's!
DefMacro('\FL', '');
DefMacro('\FR', '');
DefMacro('\draft', '');
DefMacro('\tighten', '');
#======================================================================
# The following really should only be defined for aps substyles
# which include pra, etc.
# I'll just define them all, and hope for no conflicts(?)
DefMacro('\ao', 'Appl.~Opt.~');
DefMacro('\ap', 'Appl.~Phys.~');
DefMacro('\apl', 'Appl.~Phys.~Lett.~');
DefMacro('\apj', 'Astrophys.~J.~');
DefMacro('\bell', 'Bell Syst.~Tech.~J.~');
DefMacro('\jqe', 'IEEE J.~Quantum Electron.~');
DefMacro('\assp', 'IEEE Trans.~Acoust.~Speech Signal Process.~');
DefMacro('\aprop', 'IEEE Trans.~Antennas Propag.~');
DefMacro('\mtt', 'IEEE Trans.~Microwave Theory Tech.~');
DefMacro('\iovs', 'Invest.~Opthalmol.~Vis.~Sci.~');
DefMacro('\jcp', 'J.~Chem.~Phys.~');
DefMacro('\jmo', 'J.~Mod.~Opt.~');
DefMacro('\josa', 'J.~Opt.~Soc.~Am.~');
DefMacro('\josaa', 'J.~Opt.~Soc.~Am.~A ');
DefMacro('\josab', 'J.~Opt.~Soc.~Am.~B ');
DefMacro('\jpp', 'J.~Phys.~(Paris) ');
DefMacro('\nat', 'Nature (London) ');
DefMacro('\oc', 'Opt.~Commun.~');
DefMacro('\ol', 'Opt.~Lett.~');
DefMacro('\pl', 'Phys.~Lett.~');
DefMacro('\pra', 'Phys.~Rev.~A ');
DefMacro('\prb', 'Phys.~Rev.~B ');
DefMacro('\prc', 'Phys.~Rev.~C ');
DefMacro('\prd', 'Phys.~Rev.~D ');
DefMacro('\pre', 'Phys.~Rev.~E ');
DefMacro('\prl', 'Phys.~Rev.~Lett.~');
DefMacro('\rmp', 'Rev.~Mod.~Phys.~');
DefMacro('\pspie', 'Proc.~Soc.~Photo-Opt.~Instrum.~Eng.~');
DefMacro('\sjqe', 'Sov.~J.~Quantum Elecron.~');
DefMacro('\vr', 'Vision Res.~');
#======================================================================
1;