📄 tmac.m
字号:
.\"-------------------------------------- .\" pre-space.ie \\n[hd*level]<=\\n[Hps] .SP \\n[Hps2]u.el .SP \\n[Hps1]u.\".par@reset-num \\n[hd*level]\" reset numbered paragraph.\" start diversion to measure size of header.di hd*div\\*[hd*mark]\\$2\\$3\\*[hd*suf-space].br.di.rm hd*div.ne \\n[hd*need]u+\\n[dn]u+.5p \" this is the needed space for a header.if \\n[hd*htype] .na \" no adjust if run-in.\".\" size and font calculations.hd@split hd*font \\n[hd*level] HF \\*[HF]\" get font for this level.ft \\*[hd*font]\" set new font.hd@split hd*new-ps \\n[hd*level] HP \\*[HP]\" get point size.ie (\\*[hd*new-ps]=0):(\w@\\*[hd*new-ps]@=0) \{\. if \\n[hd*htype] \{\. if '\\*[hd*font]'3' \{\. ps -1. vs -1. \}. if '\\*[hd*font]'B' \{\. ps -1. vs -1. \}. \}.\}.el \{\. ps \\*[hd*new-ps]. vs \\*[hd*new-ps]+2.\}.\".\"---------- user macro HY ------------- .\" user macro to reset indents.if d HY .HY \\n[hd*level] \\n[hd*arg1] "\\$2\\$3".\"-------------------------------------- .nr hd*mark-size \w@\\*[hd*mark]@.if (\\n[hd*level]<=\\n[Hc])&\\n[hd*htype] .ce\" center if level<=Hc.\".\" finally, output the header\\*[hd*mark]\&\c.\" and the rest of the header.ie \\n[hd*htype] \{\\\$2\\$3. br.\}.el \\$2\\$3\\*[hd*suf-space]\&\c.ft 1.\" restore pointsize and vertical size..ps \\n[@ps].vs \\n[@vs].\".\" table of contents.if (\\n[hd*level]<=\\n[Cl])&\w@\\$2@ \{\. ie \\n[Sectp] \{\. toc@save \\n[hd*level] "\\*[hd*toc-mark]" "\\$2" \\*[hd*sect-pg]. \}. el .toc@save \\n[hd*level] "\\*[hd*toc-mark]" "\\$2" \\n[%].\}.\" set adjust to previous value.SA.\" do break or space.if \\n[hd*htype] .br.if \\n[hd*htype]>1 .SP \\n[Lsp]u.if \\n[hd*htype] \{\. \" indent if Hi=1 and Pt=1. if (\\n[Hi]=1)&(\\n[Pt]=1) .ti +\\n[Pi]n. \" indent size of mark if Hi=2. if \\n[hd*htype]&(\\n[Hi]>1) .ti +\\n[hd*mark-size]u.\}.nr par@ind-flag 0 \" no indent on .P if Pt=2.\".\" check if it is time to reset footnotes.if (\\n[hd*level]=1)&\\n[ft*clear-at-header] .nr ft*nr 0 1.\".\" check if it is time to reset indexes.if (\\n[hd*level]=1)&\\n[Sectf] \{\. nr lix*fg-nr 0 1. nr lix*tb-nr 0 1. nr lix*ec-nr 0 1. nr lix*ex-nr 0 1.\}.\"---------- user macro HZ ----------.if d HZ .HZ \\n[hd*level] \\n[hd*arg1] "\\$2\\$3".nr hd*last-pos \\n[nl].nr hd*last-hpos \\n[.k].nr par@ind-flag 0...\"--------.de HM.nr hd*i 0 1.while \\n+[hd*i]<8 .af H\\n[hd*i] \\$[\\n[hd*i]] 1...\"----------------------.\" set page-nr, called from header .\" .de hd@set-page.if !r hd*h1-page .nr hd*h1-page \\n[%].\".ie \\n[Sectp] .nr P \\n[%]-\\n[hd*h1-page]+1.el .nr P \\n[%].\".\" Set section-page-string.ds hd*sect-pg \\n[H1]-\\n[P]...\"########### module pg ####################.\" set end of text trap.wh 0 pg@header.em pg@end-of-text.\".ie \n[N]=4 .ds pg*header ''''.el .ds pg*header ''- % -''.ds pg*even-footer.ds pg*odd-footer.ds pg*even-header.ds pg*odd-header.ds pg*footer.\".nr pg*top-margin 0.nr pg*foot-margin 0.nr pg*block-size 0.nr pg*footer-size 5\" 1v+footer+even/odd footer+2v.nr pg*header-size 7\" 3v+header+even/odd header+2v.nr pg*extra-footer-size 0.nr pg*extra-header-size 0.nr ft*note-size 0.nr pg*cur-column 0.nr pg*cols-per-page 1.nr pg*cur-po \n[@po].nr pg*head-mark 0.\".nr pg*ps \n[@ps].nr pg*vs \n[@vs].\"-------------------------.\" footer traps: set, enable and disable.de pg@set-new-trap.nr pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v+\\n[pg*extra-footer-size]u).if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v) = \\n[pg*foot-trap].\" last-pos points to the position of the footer and bottom .\" block below foot-notes..nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]v)...de pg@enable-trap.wh \\n[pg*foot-trap]u pg@footer.if \\n[D]>2 .tm pg@enable-trap .t=\\n[.t] nl=\\n[nl]...de pg@disable-trap.ch pg@footer...\" move to new trap (if changed)..de pg@move-trap.pg@disable-trap.pg@set-new-trap.pg@enable-trap...de pg@enable-top-trap.\" set trap for pageheader..nr pg*top-enabled 1...de pg@disable-top-trap.\" remove trap for pageheader..nr pg*top-enabled 0...\" no header on the next page.de PGNH.nr pg*top-enabled -1...\" set first trap for pagefooter.pg@enable-top-trap.pg@set-new-trap.pg@enable-trap.\"-------------------------.\" stop output and begin on next page. Fix footnotes and all that..de pg@next-page.\".debug next-page.ne 999i \" activate trap.\" .pg@footer...\"-------------------------.\" support for PX and TP.als }t pg*header.als }e pg*even-header.als }o pg*odd-header.\"------------------------------------------------------------.\" HEADER.de pg@header.if \\n[D]>1 .tm Page# \\n[%] (\\n[.F]:\\n[c.]).if \\n[Idxf] \{\.tl '<pagenr\ \\n[%]>'''.\}.\" assign current page-number to P.hd@set-page.\".\" suppress pageheader if pagenumber == 1 and N == [124].if \\n[pg*top-enabled] \{\. if \\n[pg*extra-header-size] 'sp \\n[pg*extra-header-size]u. if \\n[pg*top-margin] 'sp \\n[pg*top-margin]u. ev pg*tl-ev. pg@set-env. ie !d TP \{\' sp 3. lt \\n[@ll]u. ie ((\\n[%]=1)&(\\n[N]=1):(\\n[N]=2)) .sp. el .tl \\*[pg*header]. ie o .tl \\*[pg*odd-header]. el .tl \\*[pg*even-header]' sp 2. \}. el .TP. ev. \" why no-space??. if d PX \{\. ns. PX. rs. \}. \" check for pending footnotes . ft@check-old. \". \" back to normal text processing. \" .pg@enable-trap. \" mark for multicolumn. nr pg*head-mark \\n[nl]u. \" set multicolumn. \" . pg@set-po. \" print floating displays. ds@print-float 4. tbl@top-hook. ns.\}.if \\n[pg*top-enabled]<0 .nr pg*top-enabled 1.nr hd*cur-bline \\n[nl] \" .H needs to know if output has occured...\"---------------------------------------------------------.\" FOOTER.de pg@footer.ec.if \\n[D]>2 .tm Footer# \\n[%] (\\n[.F]:\\n[c.]).pg@disable-trap.\".debug footer.tbl@bottom-hook.\" increment pageoffset for MC.\" move to the exact start of footer.'sp |\\n[pg*foot-trap]u+1v.\".if \\n[D]>3 .tm FOOTER after .sp.\" print footnotes.if d ft*div .ft@print.\".pg@inc-po.if !\\n[pg*cur-column] .pg@print-footer.\" next column.pg@set-po.pg@enable-trap.if \\n[@verbose-flag] .eo \" to help VERBON/VERBOFF...\"-------------------------.de pg@print-footer.\" jump to the position just below the foot-notes.'sp |\\n[pg*last-pos]u+1v.\" check if there are any bottom block.if d pg*block-div .pg@block.\".\" print the footer and eject new page.ev pg*tl-ev.pg@set-env.lt \\n[@ll]u.ie o .tl \\*[pg*odd-footer].el .tl \\*[pg*even-footer].ie (\\n[%]=1)&(\\n[N]=1) .tl \\*[pg*header].el .tl \\*[pg*footer].ev.ie (\\n[ds*fnr]>=\\n[ds*o-fnr]):\\n[ft*exist] \{\. ev ne' bp. ev.\}.el 'bp...\"-------------------------.\".\" Initialize the title environment.de pg@set-env'na'nh'in 0'ti 0'ps \\n[pg*ps]'vs \\n[pg*vs]...\"-------------------------.de PH.ds pg*header "\\$1.pg@set-new-size...de PF.ds pg*footer "\\$1.pg@set-new-size...de OH.ds pg*odd-header "\\$1.pg@set-new-size...de EH.ds pg*even-header "\\$1.pg@set-new-size...de OF.ds pg*odd-footer "\\$1.pg@set-new-size...de EF.ds pg*even-footer "\\$1.pg@set-new-size...de pg@clear-hd.ds pg*even-header.ds pg*odd-header.ds pg*header...de pg@clear-ft.ds pg*even-footer.ds pg*odd-footer.ds pg*footer...de pg@set-new-size.nr pg*ps \\n[@ps].nr pg*vs \\n[@vs].pg@move-trap...\"-------------------------.\" end of page processing.de pg@footnotes.\".debug footnotes.\" output footnotes. set trap for block.\"...\"-------------------------.\" print bottom block.de pg@block.ev pg*block-ev'nf'in 0.ll 100i.pg*block-div.br.ev...\"-------------------------.\" define bottom block.de BS.misc@ev-keep pg*block-ev.init@reset.br.di pg*block-div...\"-------------------------.de BE.br.di.nr pg*block-size \\n[dn]u.ev.pg@move-trap...\"-------------------------.\" print out all pending text.de pg@end-of-text.if \\n[D]>2 .tm ---------- End of text processing ----------------.ds@eot-print.ref@eot-print...\"-------------------------.\" set top and bottom margins .de VM.if \\n[.$]=0 \{\. nr pg*extra-footer-size 0. nr pg*extra-header-size 0.\}.if \\n[.$]>0 .nr pg*extra-header-size (v;\\$1).if \\n[.$]>1 .nr pg*extra-footer-size (v;\\$2).if \\n[D]>2 \{\. tm extra top \\n[pg*extra-footer-size]. tm extra bottom \\n[pg*extra-header-size].\}.pg@move-trap...\"---------------------.\" multicolumn output. .de pg@set-po.if \\n[pg*cols-per-page]>1 \{\. ll \\n[pg*column-size]u.\}...de pg@inc-po.if \\n[pg*cols-per-page]>1 \{\. ie \\n+[pg*cur-column]>=\\n[pg*cols-per-page] \{\. nr pg*cur-column 0 1. nr pg*cur-po \\n[@po]u. po \\n[@po]u. ll \\n[@ll]u. \}. el \{\. nr pg*cur-po +(\\n[pg*column-size]u+\\n[pg*column-sep]u). po \\n[pg*cur-po]u' sp |\\n[pg*head-mark]u. tbl@top-hook. \}.\}...de 1C.br.if \\n[pg*cols-per-page]<=1 .@error "1C: multicolumn mode not active".nr pg*cols-per-page 1.nr pg*column-sep 0.nr pg*column-size \\n[@ll].nr pg*cur-column 0 1.nr pg*cur-po \\n[@po]u.PGFORM.\".pg@next-page.SK...de 2C.br.nr pg*head-mark \\n[nl]u.if \\n[pg*cols-per-page]>1 .@error "2C: multicolumn mode already active".nr pg*cols-per-page 2.nr pg*column-sep \\n[@ll]/15.nr pg*column-size (\\n[@ll]u*7)/15.nr pg*cur-column 0 1.nr pg*cur-po \\n[@po]u.ll \\n[pg*column-size]u.lt \\n[pg*column-size]u...\" MC column-size [ column-separation ].de MC.br.nr pg*head-mark \\n[nl]u.if \\n[pg*cols-per-page]>1 .@error "MC: multicolumn mode already active".ie ''\\$1' .nr pg*column-size \\n[.l].el .nr pg*column-size (n;\\$1).ie ''\\$2' .nr pg*column-sep \\n[pg*column-size]/15.el .nr pg*column-sep (n;\\$2).\".nr pg*cols-per-page (u;\\n[.l]/(\\n[pg*column-size]+\\n[pg*column-sep]+1)).nr pg*cur-column 0 1.nr pg*cur-po \\n[@po]u.ll \\n[pg*column-size]u.lt \\n[pg*column-size]u...\" begin a new column.de NCOL.br.pg@footer...\" skip pages.de SK.br.bp.nr pg*i 0 1.\" force new page by writing something invisible..while \\n+[pg*i]<=(0\\$1) \{\\&. bp.\}...\"-------------------------------.\" MULB width1 space1 width2 space2 width3 space3 ....de MULB.br.nr pg*i 0 1.nr pg*mul-x 0 1.nr pg*mul-ind 0.nr pg*mul-last 0.while \\n[.$] \{\. nr pg*mul!\\n+[pg*i] (n;0\\$1). nr pg*muls!\\n[pg*i] (n;0\\$2). shift 2.\}.nr pg*mul-max-col \\n[pg*i].ds pg*mul-fam \\n[.fam].nr pg*mul-font \\n[.f].ev pg*mul-ev.fam \\*[pg*mul-fam].ft \\n[pg*mul-font].fi.hy 14.di pg*mul-div.MULN...\"-----------.de MULN.if \\n[pg*mul-x]>=\\n[pg*mul-max-col] .@error "MULN: Undefined columnwidth".br.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d].rt +0.in \\n[pg*mul-ind]u.ll (u;\\n[.i]+\\n[pg*mul!\\n+[pg*mul-x]])u.nr pg*mul-ind +(u;\\n[pg*mul!\\n[pg*mul-x]]+\\n[pg*muls!\\n[pg*mul-x]])...\"-----------.\" MULE.de MULE.br.if \\n[.d]>\\n[pg*mul-last] .nr pg*mul-last \\n[.d].di.ev.ne \\n[pg*mul-last]u.nf.mk.pg*mul-div.rt.sp \\n[pg*mul-last]u.fi...\"-----------.de OP.br.ie o .if !\\n[pg*head-mark]=\\n[nl] \{\. bp +1. bp +1.\}.el .bp...\"########### module footnotes ###################.nr ft*note-size 0.nr ft*busy 0.nr ft*nr 0 1.nr ft*wide 0.nr ft*hyphen 0\" hyphenation value.nr ft*adjust 1\" >0 if adjust true.nr ft*indent 1\" >0 if text indent true (not imp. $$$).nr ft*just 0\" 0=left justification, 1=right (not imp. $$$).nr ft*exist 0\" not zero if there are any footnotes to be printed.nr ft*clear-at-header 0\" >0 if footnotes should be reset at first level head..\".ds F \v'-.4m'\s-3\\n+[ft*nr]\s0\v'.4m'.\".\"-----------------.\" init footnote environment.de ft@init.\" indentcontrol not implemented $$$.\" label justification not implemented $$$'in 0'fi.ie \\n[ft*adjust] 'ad.el 'na.ie \\n[ft*hyphen] 'hy 14.el 'hy 0.ll \\n[@cur-ll]u.lt \\n[@cur-ll]u.ps (\\n[@ps]-2).vs (\\n[@vs]-1)...\"-----------------.\" set footnote format.\" no support for two column processing (yet). $$$.de FD.if \\n[.$]=0 .@error "FD: bad arg \\$1".ie \\n[.$]=2 .nr ft*clear-at-header 1.el .nr ft*clear-at-header 0.\".if !'\\$1'' \{\. ie \\$1>11 .nr ft*format 0. el .nr ft*format \\$1. \". nr ft*hyphen (\\n[ft*format]%2)*14. nr ft*format \\n[ft*format]/2. \". nr ft*adjust 1-(\\n[ft*format]%2). nr ft*format \\n[ft*format]/2. \". nr ft*indent 1-(\\n[ft*format]%2). nr ft*format \\n[ft*format]/2. \". nr ft*just \\n[ft*format]%2.\}...\"---------------.\" Footnote and display width control $$$.de WC.nr ft*i 0 1.while \\n+[ft*i]<=\\n[.$] \{\. ds ft*x \\$[\\n[ft*i]]. if '\\*[ft*x]'N' \{\. nr ft*wide 0. nr ft*first-fn 0. nr ds*wide 0. nr ds*float-break 1. \}. if '\\*[ft*x]'-WF' .nr ft*wide 0. if '\\*[ft*x]'WF' .nr ft*wide 1. if '\\*[ft*x]'-FF' .nr ft*first-fn 0. if '\\*[ft*x]'FF' .nr ft*first-fn 1. if '\\*[ft*x]'-WD' .nr ds*wide 0. if '\\*[ft*x]'WD' .nr ds*wide 1. if '\\*[ft*x]'-FB' .nr ds*float-break 0. if '\\*[ft*x]'FB' .nr ds*float-break 1.\}...\"-----------------.\" begin footnote.de FS.if \\n[ft*busy] .@error "FS: missing FE".nr ft*busy 1.ev ft*ev.ft@init.if !\\n[ft*wide] .pg@set-po.if !d ft*div .ft@init-footnote.di ft*tmp-div.nr ft*space (u;\\n[Fs]*\\n[Lsp]).sp \\n[ft*space]u.\" print mark.ie \\n[.$] .ds ft*mark \\$1.el .ds ft*mark \\n[ft*nr].\\*[ft*mark].in +.75c.sp -1.nr ft*exist 1...\"-----------------.\" init footnote diversion.de ft@init-footnote.di ft*div\l'20n'.br.di.nr ft*note-size \\n[dn]...\"-----------------.\" end footnote.de FE.nr ft*busy 0.br.di'in 0'nf.if \\n[@pl]u<\\n[dn]u .@error "FE: too big footnote".ie (\\n[pg*foot-trap]u-\\n[.d]u)<\\n[dn]u \{\. da ft*next-div. ft*tmp-div. br
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -