# -*- mode: Perl -*-
# /=====================================================================\ #
# | thmtools.sty | #
# | 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. | #
# |---------------------------------------------------------------------| #
# | 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;
#======================================================================
# Style options:
# Handled:
# headfont
# headpunct
# notefont
# bodyfont
# Semi-done:
# headformat : margin, swapnumber OR code containing \NUMBER, \NAME and \NOTE
# Ignored (should it be ?):
# spaceabove, spacebelow, postheadspace
# Not done yet
# notebraces
# headindent
# Theorem options:
# Handled:
# title=name=heading
# numbered : yes, no, unless unique
# style : name of \newtheoremstyle or \declaretheoremstyle
# sibling=numberlike=sharenumber
# parent=numberwithin=within
# refname, Refname => name used for autoref, cref
# Ignored (should it be?):
# postheadspace
# preheadhook, postheadhook
# prefoothook, postfoothook
# thmbox : L,M,S
# Not done yet:
# shaded : kv of textwiddth, bgcolor, rulecolor, rulewidth, margin
# See ntheorem for an idea how to deal with framing, colors, etc?
snapshotTheoremParameters(qw(
\thm@headfont \thm@notefont \thm@bodyfont \thm@headpunct \thm@styling \thm@headstyling));
# should nu
sub thmtools_style {
my ($name, $kv) = @_;
my %parameters = ();
if (my $headfont = $kv && $kv->getValue('headfont')) {
$parameters{'\thm@headfont'} = $headfont; }
if (my $headpunct = $kv && $kv->getValue('headpunct')) {
$parameters{'\thm@headpunct'} = $headpunct; }
if (my $notefont = $kv && $kv->getValue('notefont')) {
$parameters{'\thm@notefont'} = $notefont; }
if (my $bodyfont = $kv && $kv->getValue('bodyfont')) {
$parameters{'\thm@bodyfont'} = $bodyfont; }
if (my $headformat = ToString(($kv && $kv->getValue('headformat')) || '')) {
$parameters{'\thm@swap'} = $headformat eq 'swapnumber'; }
saveTheoremStyle($name, %parameters);
return; }
DefPrimitive('\declaretheorem OptionalKeyVals {}', sub {
my ($stomach, $kv, $thmset) = @_;
# Activate any requested style
my $name = ToString($thmset);
if (my $style = ToString($kv && $kv->getValue('style')) || 'plain') {
useTheoremStyle($style); }
thmtools_style($name, $kv);
useTheoremStyle($name);
my $type = ($kv
&& ($kv->getValue('title') || $kv->getValue('name') || $kv->getValue('heading')))
|| Tokens(T_CS('\MakeUppercase'), $thmset);
my $numbered = $kv && $kv->getValue('numbered');
my $flag = ToString($numbered) eq 'no';
my $other = $kv
&& ($kv->getValue('sibling') || $kv->getValue('numberlike') || $kv->getValue('sharenumber'));
my $within = $kv
&& ($kv->getValue('parent') || $kv->getValue('numberwithin') || $kv->getValue('within'));
if (my $refname = $kv && $kv->getValue('refname')) {
my ($s, $p) = map { Tokens(@$_); } SplitTokens(stripBraces($refname), T_OTHER(','));
DefMacroI('\\' . $name . 'autorefname', undef, $s);
DefMacroI('\\cref@' . $name . '@name', undef, $s);
DefMacroI('\\cref@' . $name . '@name@plural', undef, $p); }
if (my $refname = $kv && $kv->getValue('Refname')) {
my ($s, $p) = map { Tokens(@$_); } SplitTokens(stripBraces($refname), T_OTHER(','));
DefMacroI('\\Cref@' . $name . '@name', undef, $s);
DefMacroI('\\Cref@' . $name . '@name@plural', undef, $p); }
defineNewTheorem($stomach, $flag, $thmset, $other, $type, $within);
return; });
DefPrimitive('\declaretheoremstyle OptionalKeyVals {}', sub {
thmtools_style($_[2], $_[1]); });
#DefMacro('\enc@theorem
DefMacroI('\listtheoremname', undef, 'List of Theorems');
DefConstructor('\listoftheorems OptionalKeyVals',
"<ltx:TOC lists='lot' scope='global'><ltx:title>#name</ltx:title></ltx:TOC>",
properties => sub { (name => Digest(T_CS('\listtheoremname'))); });
#======================================================================
1;