# -*- mode: Perl -*-
# /=====================================================================\ #
# | deluxetable.sty.ltxml | #
# |=====================================================================| #
# | 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 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;
#======================================================================
# 2.15.1 The deluxetable Environment
# \begin{deluxetable}{cols}
# preamble
# \startdata
# data
# \enddata
# \tablenotetext,\tablecomments,\tablerefs
# \end{deluxetable}
DefMacro('\dummytable', '\refstepcounter{table}');
DefMacroI('\deluxetable', '{}',
'\set@deluxetable@template{#1}\def\@deluxetable@header{}\begin{table}');
DefMacro('\enddeluxetable', '\spew@tblnotes\end{table}');
DefMacroI('\csname deluxetable*\endcsname', '{}',
'\set@deluxetable@template{#1}\def\@deluxetable@header{}\begin{table}');
DefMacro('\csname enddeluxetable*\endcsname', '\spew@tblnotes\end{table}');
DefMacro('\set@deluxetable@template AlignmentTemplate', sub {
AssignValue('@deluxetable@template', $_[1]); });
DefMacro('\startdata', '\bgroup\@deluxetable@bindings\@@deluxetabular\@start@alignment\hline\hline\@deluxetable@header');
DefMacro('\enddata', '\\\\\hline\@finish@alignment\@end@deluxetabular\egroup');
DefPrimitive('\@deluxetable@bindings', sub {
tabularBindings(LookupValue('@deluxetable@template')); });
DefConstructor('\@@deluxetabular DigestedBody',
'#1',
reversion => '\begin{tabular}[#1]{#2}#3\end{tabular}',
beforeDigest => sub { $_[0]->bgroup; },
mode => 'text');
DefPrimitive('\@end@deluxetabular', sub { $_[0]->egroup; });
#======================================================================
# 2.15.2 Preamble to the deluxetable
# add the internal registers, just in case, ignored for now.
DefRegisterI(T_CS('\pt@width'), undef, Dimension(6));
DefRegisterI(T_CS('\pt@line'), undef, Dimension(0));
DefRegisterI(T_CS('\pt@column'), undef, Dimension(0));
DefRegisterI(T_CS('\pt@nlines'), undef, Dimension(0));
DefRegisterI(T_CS('\pt@ncol'), undef, Dimension(0));
DefRegisterI(T_CS('\pt@page'), undef, Dimension(0));
DefMacro('\tabletypesize{}', ''); # Ignorable
DefMacro('\rotate', ''); # Ignorable ?
DefMacro('\tabletail{}', ''); # analog to head? but its ignored!!
DefMacro('\tablewidth{Dimension}', '\pt@width=#1\relax'); # Ignorable?
DefMacro('\tableheadfrac{}', ''); # Ignorable
DefMacro('\tablenum{}', '\def\thetable{#1}');
# Note: This needs an UnRefStepCounter('table');
DefMacro('\tablecolumns{Number}', ''); # Ignorable ???
Let('\tablecaption', '\caption');
DefMacro('\tablehead{}',
'\def\@deluxetable@header{\@tabular@begin@heading#1\\\\\hline\@tabular@end@heading}');
DefMacro('\colhead{}', '\multicolumn{1}{c}{#1}');
DefMacro('\twocolhead{}', '\multicolumn{2}{c}{\hss #1 \hss}');
DefMacro('\nocolhead{}', '\multicolumn{1}{h}{#1}');
DefMacro('\dcolhead{}', '\multicolumn{1}{c}{$\relax#1$}');
DefMacro('\nl', '\\\\[0pt]'); # Obsolete form
DefMacro('\nextline', '\\\\[0pt]'); # Obsolete form
DefMacro('\tablevspace{}', '\noalign{\vskip#1}'); # Obsolete form
DefMacro('\tablebreak', '\\\\[0pt]'); # Obsolete form
#======================================================================
# 2.15.3 Content of deluxetable
DefMacro('\tablebreak', ''); # Ignorable; we're not splitting tables.
DefMacro('\nodata', ''); # Ignorable
DefMacro('\cutinhead{}', '\hline\multicolumn{\@alignment@ncolumns}{c}{#1}\\\\\hline');
DefMacro('\sidehead{}', '\hline\multicolumn{\@alignment@ncolumns}{l}{#1}\\\\\hline');
DefMacro('\tableline', '\hline');
# A good article to test these macros on is arXiv:astro-ph/0001334
DefConstructor('\tablenotemark{}',
"<ltx:note role='footnotemark' mark='#1'></ltx:note>",
mode => 'text');
DefConstructor('\tablenotetext{}{}',
"<ltx:note role='footnotetext' mark='#1'>#2</ltx:note>",
mode => 'text');
# hardcoding \textwidth instead of doing the \pt@width arithmetic, which would need more work.
# the important bit is timing \spew@tblnotes correctly, so that the notes are
# flushed at the end of the figure, after the table is closed.
DefMacro('\tablerefs{}', sub {
AddToMacro(T_CS('\tblnote@list'),
Invocation(T_CS('\@tableref'), $_[1])->unlist(),
TokenizeInternal('\let\email\@@email')->unlist()); });
DefMacro('\@tableref{}', '\par
\vspace*{3ex}%
{\parbox{\textwidth}{\hskip1em\rmfamily References. --- #1}\par}}');
DefMacro('\tablecomments{}', sub {
AddToMacro(T_CS('\tblnote@list'),
Invocation(T_CS('\@tablecom'), $_[1])->unlist());
});
DefMacro('\@tablecom{}', '\par
\vspace*{3ex}%
{\parbox{\textwidth}{\hskip1em\rmfamily Note. --- #1}\par}');
DefMacro('\spew@tblnotes',
'\@tablenotes{\tblnote@list}\global\let\tblnote@list\@empty');
DefMacro('\@tablenotes{}', '\par
\vspace{4.5ex}\footnoterule\vspace{.5ex}%
{\footnotesize #1}');
#======================================================================
# Other esoterica
# Not sure here, probably needs some css magic?
DefMacro('\ulap{}', '#1');
DefMacro('\dlap{}', '#1');
# MISSING, but any usage here would fail, anyway...
# \appdef, \appgdef, \prepdef
AtBeginDocument(<<'EoTeX');
\let\tblnote@list\@empty
\let\pt@caption\@empty
\let\pt@head\@empty
\let\pt@tail\@empty
\pt@width\textwidth
\def\pt@headfrac{.1}
EoTeX
#======================================================================
1;