[INHERIT('UTILITYOPS','ARGOPS','BASICFILEOPS', 'TREEANDLISTOPS','FLAGOPS'), environment('latexops')] MODULE LATEXOPS; TYPE countparametertype = (numericcounter, lowercasechars, uppercasechars ); parameterchangestates = (nochange, altered, assigned); pagestyletype = (empty, plain, headings, myheadings); liststatetype = (nostate, itemize, enumerate); VAR LOG : [EXTERNAL] TEXT; pagestyle : [EXTERNAL] pagestyletype; datestring : [EXTERNAL] pckstr; title, subtitle : [EXTERNAL] argarray; fill : [EXTERNAL] boolean; centering : [EXTERNAL] boolean; flushright : [EXTERNAL] boolean; minipageactive : [EXTERNAL] boolean; inmarginpar : [EXTERNAL] boolean; infootnote : [EXTERNAL] boolean; underlineactive : [EXTERNAL] enhancmentstates; boldactive : [EXTERNAL] enhancmentstates; listnestlevel : [EXTERNAL] integer; PROCEDURE startlatex( var outfile : text; outputfont : integer ; outputstyle: pckstr ); const minfont = 10; maxfont = 12; var pt : integer; begin pt := outputfont; if (pt < minfont) or (pt > maxfont) then pt := minfont; writeln(outfile,'%'); if pt = 10 then writeln(outfile,'\documentstyle{',outputstyle,'}') else writeln(outfile,'\documentstyle[',pt:2,'pt]{',outputstyle,'}'); writeln(outfile,'%'); writeln(outfile,'% (put preamble statements here) '); writeln(outfile,'%'); writeln(outfile,'\begin{document}'); writeln(outfile,'%') end; [GLOBAL] PROCEDURE closeanyopenbrackets( var outfile : text ); var i : integer; begin if not fill then writeln(outfile,'} % - end of obeylines and obeyspaces group'); if centering then writeln(outfile,'\end{centering}'); if flushright then writeln(outfile,'\end{flushright}'); if minipageactive then writeln(outfile,'\end{minipage}'); if inmarginpar then writeln(outfile,'} % - end of margin par '); if infootnote then writeln(outfile,'} % - end of footnote'); if inliteral then writeln(outfile,'\end{verbatim}'); for i := 1 to listnestlevel do writeln(outfile,'\end{itemize} % - RNOTOTEX forced list close'); stopunderline( outfile ); stopbold( outfile ) end; [GLOBAL] PROCEDURE endlatex( var outfile : text ); begin closeanyopenbrackets( outfile ); writeln(outfile,'%'); writeln(outfile,'% (put postamble statements here) '); writeln(outfile,'%'); writeln(outfile,'\end{document}') end; [GLOBAL] PROCEDURE adjustpagestyle( var f : text; newstyle : pagestyletype); begin pagestyle := newstyle; case pagestyle of empty : writeln(f,'\pagestyle{empty}'); plain : writeln(f,'\pagestyle{plain}'); headings : writeln(f,'\pagestyle{headings}'); myheadings : begin writeln(f,'\pagestyle{myheadings}'); write(f,'\markright{'); writeargarray(f, title); writeargarray(f, subtitle); write(f, datestring ); writeln(f,'}') end end; case pagestyle of empty : writeln(log,'\pagestyle{empty}'); plain : writeln(log,'\pagestyle{plain}'); headings : writeln(log,'\pagestyle{headings}'); myheadings : begin writeln(log,'\pagestyle{myheadings}'); write(log,'\markright{'); writeargarray(log, title); writeargarray(log, subtitle); write(log, datestring ); writeln(log,'}') end end end; [GLOBAL] PROCEDURE writecharwidth( var f : text; nchars : integer); const widthofcharincm = 0.254; { 10 chars per inch, 2.54 cm per inch } maxwidth = 20.0; minwidth = -20.0; var cm : real; begin cm := nchars * widthofcharincm; if cm > maxwidth then begin writeln(log,'[too many chars to skip, ',nchars,' = ',cm:10:2,'cm]'); cm := 1.0 end; if cm < minwidth then begin writeln(log,'[too many chars to skip ',nchars,' = ',cm:10:2,'cm]'); cm := -1.0 end; write(f, cm:6:2, 'cm '); write(log, cm:6:2,'cm ') end; [GLOBAL] PROCEDURE writecharheight( var f : text; nlines : integer ); const heightoftextincm = 0.425; { 6 lines per inch, 2.54 cm per inch } maxheight = 25.0; minheight = -25.0; var cm : real; begin cm := nlines * heightoftextincm; if cm > maxheight then begin writeln(log,'[too many lines to skip, ',nlines,' = ',cm:10:2,'cm]'); cm := 1.0 end; if cm < minheight then begin writeln(log,'[too many lines to skip ',nlines,' = ',cm:10:2,'cm]'); cm := -1.0 end; write(f, cm:6:2,'cm '); write(log, cm:6:2,'cm ') end; [GLOBAL] PROCEDURE adjustlength( var outfile : text; modified : parameterchangestates; lengthvalue : integer; adjustmentvalue : integer; charwidth : boolean; latexname : pckstr ); begin case modified of nochange : nullstatement; altered : begin write(outfile,'\addtolength{',latexname,'}{'); if charwidth then writecharwidth(outfile, adjustmentvalue) else writecharheight(outfile, adjustmentvalue); writeln(outfile,'}') end; assigned : begin write(outfile,'\setlength{',latexname,'}{'); if charwidth then writecharwidth(outfile, lengthvalue) else writecharheight(outfile, lengthvalue); writeln(outfile,'}') end end; case modified of nochange : noconversion; altered : begin write(log,'\addtolength{',latexname,'}{'); if charwidth then writecharwidth(log, adjustmentvalue) else writecharheight(log, adjustmentvalue); writeln(log,'}') end; assigned : begin write(log,'\setlength{',latexname,'}{'); if charwidth then writecharwidth(log, lengthvalue) else writecharheight(log, lengthvalue); writeln(log,'}') end end end; [GLOBAL] PROCEDURE adjustcounter( var outfile : text; modified : parameterchangestates; countervalue : integer; adjustmentvalue : integer; latexname : pckstr ); begin case modified of nochange : nullstatement; altered : writeln(outfile,'\addtocounter{',latexname,'}{',adjustmentvalue,'}'); assigned : writeln(outfile,'\setcounter{',latexname,'}{',countervalue,'}') end; case modified of nochange : noconversion; altered : writeln(log,'\addtocounter{',latexname,'}{',adjustmentvalue,'}'); assigned : writeln(log,'\setcounter{',latexname,'}{',countervalue,'}') end end; [GLOBAL] PROCEDURE adjuststyle(var outfile : text; s : styletype; latexname : pckstr ); begin case s of undetermined : nullstatement; decimal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); octal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); hexidecimal : writeln(outfile,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); romanupper : writeln(outfile,'\renewcommand{\the',latexname,'}{\Roman{',latexname,'}}'); romanlower : writeln(outfile,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); romanmixed : writeln(outfile,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); letterupper : writeln(outfile,'\renewcommand{\the',latexname,'}{\Alpha{',latexname,'}}'); letterlower : writeln(outfile,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); lettermixed : writeln(outfile,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); nostyle : nullstatement end; case s of undetermined : noconversion; decimal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); octal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); hexidecimal : writeln(log,'\renewcommand{\the',latexname,'}{\arabic{',latexname,'}}'); romanupper : writeln(log,'\renewcommand{\the',latexname,'}{\Roman{',latexname,'}}'); romanlower : writeln(log,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); romanmixed : writeln(log,'\renewcommand{\the',latexname,'}{\roman{',latexname,'}}'); letterupper : writeln(log,'\renewcommand{\the',latexname,'}{\Alpha{',latexname,'}}'); letterlower : writeln(log,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); lettermixed : writeln(log,'\renewcommand{\the',latexname,'}{\alpha{',latexname,'}}'); nostyle : noconversion end end; END.