⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmac.m

📁 早期freebsd实现
💻 M
📖 第 1 页 / 共 4 页
字号:
.\"-------------------------------------- .\" 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 + -