# -*- CPERL -*- package LaTeXML::Package::Pool; use strict; use LaTeXML::Package; RawTeX('\newif\ifnotes\notesfalse'); RawTeX('\newif\ifproblems\problemsfalse'); LoadClass('omdoc'); RequirePackage('stex'); RequirePackage('latexml'); RequirePackage('amssymb'); RequirePackage('graphicx'); RequirePackage('tikz'); RequirePackage('amsmath'); DefRegister('\slidewidth' => Dimension('13.5cm')); DefRegister('\slideheight' => Dimension('9cm')); DefEnvironment('{note}','#body'); DefEnvironment('{frame}[]', "" . "#body\n" ."\n\n", afterDigestBegin=>sub { $_[1]->setProperty(theory=>LookupValue('current_module')); }); DefConstructor('\frametitle{}', "\n#1"); DefEnvironment('{problems}','#body'); #DefMacro('\defemph{}','{\textcolor{magenta}{#1}}'); #DefMacro('\notemph{}','{\textcolor{magenta}{#1}}'); DefMacro('\textwarning',""); DefEnvironment('{titleslide}',""); DefEnvironment('{titleslide}',"#body"); DefEnvironment('{ttitle}', "\n#body"); DefConstructor('\hateq',"=\x{03C2}"); DefConstructor('\textleadsto',"=\x{219D}"); DefEnvironment('{columns}','#body'); DefEnvironment('{column}{}','#body'); DefConstructor('\uncover','#1'); #Define a Beamer Overlay Parameter type DefParameterType('BeamerOverlay', sub { my ($gullet) = @_; my $tok = $gullet->readXToken; if (ref $tok && ToString($tok) eq '<') { $gullet->readUntil(T_OTHER('>')); } else { $gullet->unread($tok) if ref $tok; undef; }}, reversion=> sub { (T_OTHER('<'), $_[0]->revert, T_OTHER('>')); }); #Take the "from" field of the overlay range sub overlayFrom { return "" unless defined $_[0]; my $overlay=ToString($_[0]); $overlay =~ /^(\d+)/; $1;} #Reuse the CMP itemizations, only adjust the \item constructors. DefMacro('\beamer@group@item[] OptionalBeamerOverlay IfBeginFollows', sub { my($gullet,$tag,$overlay,$needwrapper)=@_; $overlay=$overlay||T_OTHER(""); ( T_CS('\group@item@maybe@unwrap'), ($needwrapper ? (Invocation(T_CS('\beamer@group@item@wrap'),$tag,$overlay)->unlist) : ()) ); }); DefConstructor('\beamer@group@item@wrap {} OptionalBeamerOverlay', "" . "?#1(#1)()" . "", beforeDigest=>sub { Let('\group@item@maybe@unwrap','\group@item@unwrap'); #$_[0]->bgroup; useCMPItemizations(); return; }, properties=>sub{ RefStepItemCounter(); }); DefConstructor('\beamer@itemize@item[] OptionalBeamerOverlay', "" . "?#1(#1)()", properties=>sub{ RefStepItemCounter(); }); DefConstructor('\beamer@enumerate@item[] OptionalBeamerOverlay', "" . "?#1(#1)()", properties=>sub{ RefStepItemCounter(); }); DefConstructor('\beamer@description@item[] OptionalBeamerOverlay', "" . "?#1(#1)()", # trust di and dt to autoclose properties=>sub{ RefStepItemCounter(); }); #We ALWAYS use the beamer itemizations for the slides: Let('\CMP@itemize@item'=>'\beamer@itemize@item'); Let('\CMP@enumerate@item'=> '\beamer@enumerate@item'); Let('\CMP@description@item'=> '\beamer@description@item'); Let('\group@item' =>'\beamer@group@item'); Let('\itemize@item'=>'\beamer@group@item'); Let('\enumerate@item'=>'\beamer@group@item'); Let('\description@item'=>'\beamer@group@item'); Let('\only'=>'\beamer@group@item'); DefMacro('\putgraphicsat{}{}{}','\mygraphics[#2]{#3}'); DefMacro('\putat{}{}','#2'); 1;