#  /====================================================================\
# | iopart.cls for LaTeXML                                               |
# | Generated by texscan --stub --base=article.cls iopart.cls            |
#  >====================================================================<
# | Released to public domain.                                           |
# | Bruce Miller <bruce.miller@nist.gov>                                 |
# | http://dlmf.nist.gov/LaTeXML/                                        |
# | This code was derived from work by                                   |
# |   the arXMLiv group; http://arxmliv.kwarc.org/                       |
#  \====================================================================/
use strict;
use LaTeXML::Package;

RawTeX(<<'EOTeX');
\newif\ifletter\letterfalse
\newif\ifnumbysec\numbysecfalse
\newif\ifiopams\iopamsfalse
EOTeX

DefMacroI('\eqnobysec',undef,'\numbysectrue\@addtoreset{equation}{section}');
DefMacroI('\theequation',undef,'\ifnumbysec\arabic{section}.\arabic{equation}\else\arabic{equation}\fi');
#======================================================================
# Frontmatter

DefMacro('\title[]{}',
	 '\ifx.#1.\else\@add@frontmatter{ltx:toctitle}{#1}\fi'
	 .'\@add@frontmatter{ltx:title}{#2}');
Let('\paper', '\title');

DefMacro('\@articletype', '');
DefMacro('\article[]{}{}', 
	 '\ifx.#1.\else\@add@frontmatter{ltx:toctitle}{#1}\fi'
	 .'\ifx.#2.\else\@add@frontmatter{ltx:classification}[role=type]{#2}\fi'
	 .'\@add@frontmatter{ltx:title}{#3}');

DefMacro('\letter{}',   '\article[Letter to the Editor]{Letter to the Editor}{#1}\lettertrue');
DefMacro('\review[]{}', '\article[#1]{Review Article}{#2}');
DefMacro('\topical[]{}','\article[#1]{Topical Review}{#2}');
DefMacro('\comment[]{}','\article[#1]{Comment}{#2}');
DefMacro('\rapid[]{}',  '\article[#1]{Rapid Communication}{#2}');
DefMacro('\note[]{}',   '\article[#1]{Note}{#2}');
DefMacro('\prelim[]{}', '\article[#1]{Preliminary Communication}{#2}');

DefConstructor('\@address{}',"^ <ltx:contact role='address'>#1</ltx:contact>", bounded=>1);
DefMacro('\address{}','\@add@to@frontmatter{ltx:creator}{\@address{#1}}');

DefMacro('\ead Semiverbatim','\@add@to@frontmatter{ltx:creator}{\@email{#1}}');
DefConstructor('\@email{}',"^ <ltx:contact role='email'>#1</ltx:contact>");
Let(T_CS('\mailto'),T_CS('\ead'));

#DefMacro('\eads DigestedBody','#1');
DefMacro('\eads {}','#1');

DefMacro('\pacno{}', '\@add@frontmatter{ltx:classification}[role=pacs]{#1}');
DefMacro('\pacs{}', '\@add@frontmatter{ltx:classification}[role=pacs]{#1}');
DefMacro('\ams{}', '\@add@frontmatter{ltx:classification}[role=ams]{#1}');

our @journals=('Institute of Physics Publishing',
	       'J. Phys.\ A: Math.\ Gen.\ ',
	       'J. Phys.\ B: At.\ Mol.\ Opt.\ Phys.\ ',
	       'J. Phys.:\ Condens. Matter\ ',
	       'J. Phys.\ G: Nucl.\ Part.\ Phys.\ ',
	       'Inverse Problems\ ',
	       'Class. Quantum Grav.\ ',
	       'Network: Comput.\ Neural Syst.\ ',
	       'Nonlinearity\ ',
	       'J. Opt. B: Quantum Semiclass. Opt.\ ',
	       'Waves Random Media\ ',
	       'J. Opt. A: Pure Appl. Opt.\ ',
	       'Phys. Med. Biol.\ ',
	       'Modelling Simul.\ Mater.\ Sci.\ Eng.\ ',
	       'Plasma Phys. Control. Fusion\ ',
	       'Physiol. Meas.\ ',
	       'Combust. Theory Modelling\ ',
	       'High Perform.\ Polym.\ ',
	       'Public Understand. Sci.\ ',
	       'Rep.\ Prog.\ Phys.\ ',
	       'J.\ Phys.\ D: Appl.\ Phys.\ ',
	       'Supercond.\ Sci.\ Technol.\ ',
	       'Semicond.\ Sci.\ Technol.\ ',
	       'Nanotechnology\ ',
	       'Measur.\ Sci.\ Technol.\ ',
	       'Plasma.\ Sources\ Sci.\ Technol.\ ',
	       'Smart\ Mater.\ Struct.\ ',
	       'J.\ Micromech.\ Microeng.\ ',
	       'Distrib.\ Syst.\ Engng\ ',
	       'Bioimaging\ ',
	       'J.\ Radiol. Prot.\ ',
	       'Europ. J. Phys.\ ',
	       'J. Opt. A: Pure Appl. Opt.\ ',
	       'New. J. Phys.\ ');
DefMacro('\journal','Institute of Physics Publishing');
DefMacro('\submitted','\submitto{\journal}');
DefMacro('\submitto{}','\def\journal{#1}\@add@to@frontmatter{ltx:note}[role=submitted]{#1}');
DefPrimitive('\jl{}',sub {
	       if(my $j = $journals[ToString($_[1])]){
		 DefMacroI('\journal',undef,Tokenize($j)); }});

#======================================================================
# Math

DefMath('\rmd',     "\x{2146}", role=>'DIFFOP', meaning=>'differential-d');
DefMath('\rme',     "\x{2147}", role=>'ID', meaning=>'exponential-e');
DefMath('\rmi',     "\x{2148}", role=>'ID', meaning=>'imaginary-i');
Let(T_CS('\e'),T_CS('\rme'));

DefConstructorI('\bcal', undef,'', font=>{family=>'caligraphic', series=>'bold', forcebold=>1});
DefConstructorI('\bi',   undef,'', font=>{family=>'italic',      series=>'bold', forcebold=>1});

DefMacro('\fl',Tokens());	# ?
DefMacro('\case{}{}','{\textstyle\frac{#1}{#2}}');
DefMath('\Tr','\mathrm{Tr}', role=>'PREFIX', meaning=>'trace');
DefMath('\tr','\mathrm{tr}', role=>'PREFIX', meaning=>'trace');

DefMath('\Or','\mathrm{O}', role=>"OPERATOR", meaning=>'Big-O');
DefMath('\tdot Digested',       "\x{2026}", operator_role=>'OVERACCENT');
DefMath('\lshad', "\x{27E6}", role=>'OPEN');
DefMath('\rshad', "\x{27E7}", role=>'CLOSE');

DefMacroI('\dsty',undef,'\displaystyle');
DefMacroI('\tsty',undef,'\textstyle');
DefMacroI('\ssty',undef,'\scriptstyle');
DefMacroI('\sssty',undef,'\scriptscriptstyle');

RawTeX('\def\pt(#1){({\it #1\/})}');

# Can't really handle \llap in any sensible way...
DefMacro('\lo',    '\llap{${}#1{}$}');
DefMacro('\eql',   '\llap{${}={}$}');
DefMacro('\lsim',  '\llap{${}\sim{}$}');
DefMacro('\lsimeq','\llap{${}\simeq{}$}');
DefMacro('\lequiv','\llap{${}\equiv{}$}');

DefConstructorI('\opencircle',      undef,"\x{25CB}");
DefConstructorI('\opensquare',      undef,"\x{25A1}");
DefConstructorI('\opentriangle',    undef,"\x{25B3}");
DefConstructorI('\opentriangledown',undef,"\x{25BD}");
DefConstructorI('\opendiamond',     undef,"\x{25C6}");
DefConstructorI('\fullcircle',      undef,"\x{25CF}");
DefConstructorI('\fullsquare',      undef,"\x{25A0}");
DefMacroI('\dotted',          undef,'\ensuremath{{\mathinner{\cdotp\cdotp\cdotp\cdotp\cdotp\cdotp}}}');
DefMacroI('\dashed',          undef,'{\protect\mbox{-\; -\; -\; -}}');
DefMacroI('\broken',          undef,'{\protect\mbox{-- -- --}}');
DefMacroI('\longbroken',      undef,'{\protect\mbox{--- --- ---}}');
DefMacroI('\chain',           undef,'{\protect\mbox{--- $\cdot$ ---}}');
DefMacroI('\dashddot',        undef,'{\protect\mbox{--- $\cdot$ $\cdot$ ---}}');
DefMacroI('\full',            undef,'{\protect\mbox{------}}');

DefEnvironment('{numparts}',"<ltx:equationgroup refnum='#refnum' xml:id='#id'>#body</ltx:equationgroup>",
	       afterDigestBegin=>sub {
		 my($stomach,$whatsit)=@_;
		 my %eqn = RefStepCounter('equation');
		 AssignValue(SAVED_EQUATION_NUMBER=>LookupValue('\c@equation'));
		 $whatsit->setProperties(%eqn);
		 ResetCounter('equation');
		 DefMacro('\theequation',UnTeX($eqn{refnum}).'\alph{equation}');
		 DefMacro('\theequation@ID',UnTeX($eqn{id}).'.\@equation@ID');
	       },
	       afterDigest =>sub{ 
		 AssignValue('\c@equation',LookupValue('SAVED_EQUATION_NUMBER'),'global'); });

Let(T_CS('\pcal'),T_CS('\cal'));
Let(T_CS('\pmit'),T_CS('\mathnormal'));

# \eqnalign is much like eqnarray, but with 2 columns
# \eqnalignno is also, but with a 3rd column which contains the number!
# Let's see if this works at all...
DefMacro('\eqnalign{}',
	 '\@eqnarray@bindings\@@eqnarray'
	 .'\@equationgroup@number\@start@alignment'
	 .'#1'
	 .'\@finish@alignment\end@eqnarray');
DefMacro('\eqnalignno{}',
	 '\@eqnarray@bindings\@@eqnarray'
	 .'\@equationgroup@number\@start@alignment'
	 .'#1'
	 .'\@finish@alignment\end@eqnarray');

#======================================================================

DefMacro('\eref{}','(\ref{#1})');
DefMacro('\sref{}','section~\ref{#1}');
DefMacro('\fref{}','figure~\ref{#1}');
DefMacro('\tref{}','table~\ref{#1}');
DefMacro('\Eref{}','Equation (\ref{#1})');
DefMacro('\Sref{}','Section~\ref{#1}');
DefMacro('\Fref{}','Figure~\ref{#1}');
DefMacro('\Tref{}','Table~\ref{#1}');

#======================================================================
# Tables & Figures.

# This is liable to cause numbering clashes ???
DefMacroI('\noappendix', undef, 
	  '\setcounter{figure}{0}\setcounter{table}{0}'
	  .'\def\thetable{\arabic{table}}\def\thefigure{\arabic{figure}}');
DefMacroI('\Tables',undef,'\section*{Tables and table captions}\noappendix');
DefMacroI('\Figures',undef,'\section*{Figure captions}\noappendix');

DefMacro('\Figure{}','\begin{figure}\caption{#1}\end{figure}');
DefMacro('\Table{}', '\begin{table}\caption{#1}\begin{tabular}{@{}l*{15}{l}}');
DefMacroI('\endTable', undef, '\end{tabular}\end{table}');
Let(T_CS('\endtab'),T_CS('\endTable'));
DefMacro('\fulltable{}', '\begin{table}\caption{#1}\begin{tabular}{@{}l*{15}{l}}');
DefMacroI('\endfulltable',undef,'\end{tabular}\end{table}');
DefMacroI('\lineup',undef,'\def\0{\hbox{\phantom{\footnotesize\rm 0}}}\def\m{\hbox{\phantom{-}}}');

DefMacroI('\boldarrayrulewidth',undef,'1pt');
Let(T_CS('\bhline'),T_CS('\hline'));
DefMacroI('\br',undef,'\hline');
DefMacroI('\mr',undef,'\hline');

DefMacro('\centre{}{}', '\multispan{#1}{\hfill #2\hfill}');
DefMacro('\crule{}{}',  '\multispan{#1}{\hrulefill}');
DefMacro('\fcrule{}',   '\multispan{#1}{\hrulefill}'); # ?
#?
Let(T_CS('\ms'),T_CS('\,'));
Let(T_CS('\bs'),T_CS('\:'));
Let(T_CS('\ns'),T_CS('\!'));
Let(T_CS('\es'),T_CS('\:'));
Let(T_CS('\psemicolon'),T_CS('\;'));

DefMacro('\mat{}', '\underline{\underline{#1}}');

#======================================================================
# Bibliography
DefMacro('\Bibliography{}','\section*{References}\numrefs{#1}');
DefMacro('\References',    '\section*{References}\refs');
DefMacro('\numrefs{}',     '\begin{thebibliography}{#1}');
DefMacro('\endnumrefs',    '\end{thebibliography}');
Let(T_CS('\endbib'),T_CS('\endnumrefs'));

DefMacro('\thereferences',  '\begin{thebibliography}{}'); # ???
DefMacro('\endthereferences','\end{thebibliography}');

DefMacro('\harvard',    '\begin{thebibliography}{}'); # ???
DefMacro('\endharvard', '\end{thebibliography}');
DefMacro('\refs',       '\begin{thebibliography}{}'); # ???
DefMacro('\endrefs',    '\end{thebibliography}');

#======================================================================

DefConstructor('\ack',"<ltx:acknowledgements>");
DefConstructor('\ackn',"<ltx:acknowledgements>");
Tag("ltx:acknowledgements", autoClose=>1);

#======================================================================
# Abbreviations
DefMacro('\etal','\textit{et al\/}');
DefMacro('\dash','-----');

DefMacroI('\CQG',undef,'\textit{Class. Quantum Grav.}');
DefMacroI('\CTM',undef,'\textit{Combust. Theory Modelling\/}');
DefMacroI('\DSE',undef,'\textit{Distrib. Syst. Engng\/}');
DefMacroI('\EJP',undef,'\textit{Eur. J. Phys.}');
DefMacroI('\HPP',undef,'\textit{High Perform. Polym.}');
DefMacroI('\IP',undef,'\textit{Inverse Problems\/}');
DefMacroI('\JHM',undef,'\textit{J. Hard Mater.}');
DefMacroI('\JO',undef,'\textit{J. Opt.}');
DefMacroI('\JOA',undef,'\textit{J. Opt. A: Pure Appl. Opt.}');
DefMacroI('\JOB',undef,'\textit{J. Opt. B: Quantum Semiclass. Opt.}');
DefMacroI('\JPA',undef,'\textit{J. Phys. A: Math. Gen.}');
DefMacroI('\JPB',undef,'\textit{J. Phys. B: At. Mol. Phys.}');
DefMacroI('\jpb',undef,'\textit{J. Phys. B: At. Mol. Opt. Phys.}');
DefMacroI('\JPC',undef,'\textit{J. Phys. C: Solid State Phys.}');
DefMacroI('\JPCM',undef,'\textit{J. Phys.: Condens. Matter\/}');
DefMacroI('\JPD',undef,'\textit{J. Phys. D: Appl. Phys.}');
DefMacroI('\JPE',undef,'\textit{J. Phys. E: Sci. Instrum.}');
DefMacroI('\JPF',undef,'\textit{J. Phys. F: Met. Phys.}');
DefMacroI('\JPG',undef,'\textit{J. Phys. G: Nucl. Phys.}');
DefMacroI('\jpg',undef,'\textit{J. Phys. G: Nucl. Part. Phys.}');
DefMacroI('\MSMSE',undef,'\textit{Modelling Simulation Mater. Sci. Eng.}');
DefMacroI('\MST',undef,'\textit{Meas. Sci. Technol.}');
DefMacroI('\NET',undef,'\textit{Network: Comput. Neural Syst.}');
DefMacroI('\NJP',undef,'\textit{New J. Phys.}');
DefMacroI('\NL',undef,'\textit{Nonlinearity\/}');
DefMacroI('\NT',undef,'\textit{Nanotechnology}');
DefMacroI('\PAO',undef,'\textit{Pure Appl. Optics\/}');
DefMacroI('\PM',undef,'\textit{Physiol. Meas.}');
DefMacroI('\PMB',undef,'\textit{Phys. Med. Biol.}');
DefMacroI('\PPCF',undef,'\textit{Plasma Phys. Control. Fusion\/}');
DefMacroI('\PSST',undef,'\textit{Plasma Sources Sci. Technol.}');
DefMacroI('\PUS',undef,'\textit{Public Understand. Sci.}');
DefMacroI('\QO',undef,'\textit{Quantum Opt.}');
DefMacroI('\QSO',undef,'\textit{Quantum Semiclass. Opt.}');
DefMacroI('\RPP',undef,'\textit{Rep. Prog. Phys.}');
DefMacroI('\SLC',undef,'\textit{Sov. Lightwave Commun.}');
DefMacroI('\SST',undef,'\textit{Semicond. Sci. Technol.}');
DefMacroI('\SUST',undef,'\textit{Supercond. Sci. Technol.}');
DefMacroI('\WRM',undef,'\textit{Waves Random Media\/}');
DefMacroI('\JMM',undef,'\textit{J. of Michromech. and Microeng.\/}');
DefMacroI('\AC',undef,'\textit{Acta Crystallogr.}');
DefMacroI('\AM',undef,'\textit{Acta Metall.}');
DefMacroI('\AP',undef,'\textit{Ann. Phys., Lpz.}');
DefMacroI('\APNY',undef,'\textit{Ann. Phys., NY\/}');
DefMacroI('\APP',undef,'\textit{Ann. Phys., Paris\/}');
DefMacroI('\CJP',undef,'\textit{Can. J. Phys.}');
DefMacroI('\JAP',undef,'\textit{J. Appl. Phys.}');
DefMacroI('\JCP',undef,'\textit{J. Chem. Phys.}');
DefMacroI('\JJAP',undef,'\textit{Japan. J. Appl. Phys.}');
DefMacroI('\JP',undef,'\textit{J. Physique\/}');
DefMacroI('\JPhCh',undef,'\textit{J. Phys. Chem.}');
DefMacroI('\JMMM',undef,'\textit{J. Magn. Magn. Mater.}');
DefMacroI('\JMP',undef,'\textit{J. Math. Phys.}');
DefMacroI('\JOSA',undef,'\textit{J. Opt. Soc. Am.}');
DefMacroI('\JPSJ',undef,'\textit{J. Phys. Soc. Japan\/}');
DefMacroI('\JQSRT',undef,'\textit{J. Quant. Spectrosc. Radiat. Transfer\/}');
DefMacroI('\NC',undef,'\textit{Nuovo Cimento\/}');
DefMacroI('\NIM',undef,'\textit{Nucl. Instrum. Methods\/}');
DefMacroI('\NP',undef,'\textit{Nucl. Phys.}');
DefMacroI('\PL',undef,'\textit{Phys. Lett.}');
DefMacroI('\PR',undef,'\textit{Phys. Rev.}');
DefMacroI('\PRL',undef,'\textit{Phys. Rev. Lett.}');
DefMacroI('\PRS',undef,'\textit{Proc. R. Soc.}');
DefMacroI('\PS',undef,'\textit{Phys. Scr.}');
DefMacroI('\PSS',undef,'\textit{Phys. Status Solidi\/}');
DefMacroI('\PTRS',undef,'\textit{Phil. Trans. R. Soc.}');
DefMacroI('\RMP',undef,'\textit{Rev. Mod. Phys.}');
DefMacroI('\RSI',undef,'\textit{Rev. Sci. Instrum.}');
DefMacroI('\SSC',undef,'\textit{Solid State Commun.}');
DefMacroI('\ZP',undef,'\textit{ Z. Phys.}');  

DefMacroI('\JNE',undef,'\textit{J. Neural Eng.}');
DefMacroI('\PB',undef,'\textit{Phys. Biol.}');
DefMacroI('\SMS',undef,'\textit{Smart Mater. Struct.}');
#======================================================================
# Mystery items...

DefMacroI('\tqs',undef,'\hspace*{25pt}');
DefMacroI('\nosections',undef,Tokens()); # ?
DefMacroI('\indented',undef,'\itemize');
DefMacroI('\endindented',undef,'\enditemize');
DefMacroI('\varindent',undef,'\itemize');
DefMacroI('\endvarindent',undef,'\enditemize');

DefMacroI('\nonum',undef,'\par'); #  ?

#======================================================================
1;
