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

📄 tmac.groff_ms

📁 早期freebsd实现
💻 GROFF_MS
📖 第 1 页 / 共 3 页
字号:
.if \\n[.u] \{\.	\" Ensure that the first line of the footnote is on the same page.	\" as the reference.  I think this is minimal..	ev fn.	nr fn*need 1v.	ev.	ie \\n[pg@fn-flag] .nr fn*need +\\n[fn:PD].	el .nr fn*need +\\n[fn@sep-dist].	ne \\n[fn*need]u+\\n[.V]u>?0.\}.ev fn.par@reset-env.fn*start-div.par@reset.ie \\n[.$] .FP \\$@.el .@LP...de @FE.ie !\\n[fn*open] .@error FE without FS.el \{\.	nr fn*open 0.	br.	ev.	fn*end-div.\}...nr fn@have-overflow 0.\" called at the top of each column.de fn@top-hook.nr fn*max-width 0.nr fn*page-bottom-pos 0-\\n[FM]-\\n[pg@fn-bottom-margin].ch pg@bottom \\n[fn*page-bottom-pos]u.if \\n[fn@have-overflow] \{\.	nr fn@have-overflow 0.	fn*start-div.	ev nf.	fn@overflow-div.	ev.	fn*end-div.\}...\" This is called at the bottom of the column if pg@fn-flag is set..de fn@bottom-hook.nr pg@fn-flag 0.nr fn@have-overflow 0.nr fn@bottom-pos \\n[.p]-\\n[FM]-\\n[pg@fn-bottom-margin]+\\n[.v].ev fn.nr fn@bottom-pos -\\n[.v].ev.ie \\n[nl]+\\n[fn@sep-dist]+\n[.V]>\\n[fn@bottom-pos] \{\.	rn fn@div fn@overflow-div.	nr fn@have-overflow 1.\}.el \{\.	if \\n[pg@ncols]>1 \.		if \\n[fn*max-width]>\\n[pg@fn-colw] \.			nr pg@fn-bottom-margin \\n[.p]-\\n[FM]-\\n[nl]+1v.	wh \\n[fn@bottom-pos]u fn*catch-overflow.	fn@print-sep.	ev nf.	fn@div.	rm fn@div.	ev.	if '\\n(.z'fn@overflow-div' \{\.		di.		nr fn@have-overflow \\n[dn]>0.	\}.	ch fn*catch-overflow.\}...de fn*catch-overflow.di fn@overflow-div...nr fn*embed-count 0.de @div-end!fn@div.br.if '\\n[.ev]'fn' .ev.fn*end-div.nr fn*open 0...als @div-end!fn*embed-div @div-end!fn@div.de fn*start-div.ie '\\n(.z'' \{\.	da fn@div.	if !\\n[pg@fn-flag] .ns.\}.el .di fn*embed-div...de fn*end-div.ie '\\n(.z'fn@div' \{\.	di.	nr fn*page-bottom-pos -\\n[dn].	nr fn*max-width \\n[fn*max-width]>?\\n[dl].	if !\\n[pg@fn-flag] .nr fn*page-bottom-pos -\\n[fn@sep-dist].	nr pg@fn-flag 1.	nr fn*page-bottom-pos \\n[nl]-\\n[.p]+\n[.V]>?\\n[fn*page-bottom-pos].	ch pg@bottom \\n[fn*page-bottom-pos]u.\}.el \{\.	ie '\\n(.z'fn*embed-div' \{\.	di.		rn fn*embed-div fn*embed-div!\\n[fn*embed-count]\!.		fn*embed-start \\n[fn*embed-count].		rs'		sp (u;\\n[dn]+\\n[fn@sep-dist]+\\n[.V])\!.		fn*embed-end.		nr fn*embed-count +1.	\}.	el \{\.		ev fn.		@error-recover unclosed diversion within footnote.	\}.\}...de fn*embed-start.ie '\\n(.z'' \{\.	fn*start-div.	ev nf.	fn*embed-div!\\$1.	rm fn*embed-div!\\$1.	ev.	fn*end-div.	di fn*null.\}.el \{\\!.	fn*embed-start \\$1.	rs.\}...de fn*embed-end.ie '\\n(.z'fn*null' \{\.	di.	rm fn*null.\}.el \!.fn*embed-end...\" It's important that fn@print-sep use up exactly fn@sep-dist vertical space..de fn@print-sep.ev fn.in 0.vs \\n[fn@sep-dist]u\D'l 1i 0'.br.ev...\" ***************************.\" ******** module kp ********.\" ***************************.\" Keeps..de KS.br.di kp*div...de KF.if !'\\n(.z'' .@error-recover KF while open diversion.di kp*fdiv.ev k.par@reset-env.par@reset...de KE.ie '\\n(.z'kp*div' .kp*end.el \{\.	ie '\\n(.z'kp*fdiv' .kp*fend.	el .@error KE without KS or KF.\}...de @div-end!kp*div.kp*end...de @div-end!kp*fdiv.kp*fend...de kp*need.ie '\\n(.z'' .ds@need \\$1.el \!.kp*need \\$1...\" end non-floating keep.de kp*end.br.di.kp*need \\n[dn].ev nf.kp*div.ev.rm kp*div...\" Floating keeps..nr kp@head 0.nr kp@tail 0.\" end floating keep.de kp*fend.br.ev.di.ie \\n[.t]-(\\n[.k]>0*1v)>\\n[dn] \{\.	br.	ev nf.	kp*fdiv.	rm kp*fdiv.	ev.\}.el \{\.	rn kp*fdiv kp*div!\\n[kp@tail].	nr kp*ht!\\n[kp@tail] 0\\n[dn].	nr kp@tail +1.\}...\" top of page processing for KF.nr kp*doing-top 0.de kp@top-hook.if !\\n[kp*doing-top] \{\.	nr kp*doing-top 1.	kp*do-top.	nr kp*doing-top 0.\}...de kp*do-top.\" If the first keep won't fit, only force it out if we haven't had a footnote.\" and we're at the top of the page..nr kp*force \\n[pg@fn-flag]=0&(\\n[nl]<=\\n[pg@header-bottom]).nr kp*fits 1.while \\n[kp@tail]>\\n[kp@head]&\\n[kp*fits] \{\.	ie \\n[.t]>\\n[kp*ht!\\n[kp@head]]:\\n[kp*force] \{\.		nr kp*force 0.		\" It's important to advance kp@head before bringing.		\" back the keep, so that if the last line of the.		\" last keep springs the bottom of page trap, a new.		\" page will not be started unnecessarily..		rn kp*div!\\n[kp@head] kp*temp.		nr kp@head +1.		ev nf.		kp*temp.		ev.		rm kp*temp.	\}.	el .nr kp*fits 0.\}...\" ***************************.\" ******** module ds ********.\" ***************************.\" Displays and non-floating keeps..de DE.ds*end!\\n[\\n[.ev]:ds-type].nr \\n[.ev]:ds-type 0...de ds@auto-end.if \\n[\\n[.ev]:ds-type] \{\.	@error automatically terminating display.	DE.\}...de @div-end!ds*div.ie \\n[\\n[.ev]:ds-type] .DE.el .ds*end!2...de ds*end!0.@error DE without DS, ID, CD, LD or BD...de LD.br.nr \\n[.ev]:ds-type 1.par@reset.nf.sp \\n[DD]u...de ID.LD.ie \\n[.$] .in +(n;\\$1).el .in +\\n[DI]u...de CD.LD.ce 9999...de RD.LD.rj 9999...de ds*common-end.par@reset.sp \\n[DD]u...als ds*end!1 ds*common-end.de BD.LD.nr \\n[.ev]:ds-type 2.di ds*div...de ds*end!2.br.ie '\\n(.z'ds*div' \{\.	di.	nf.	in (u;\\n[.l]-\\n[dl]/2).	ds*div.	rm ds*div.	ds*common-end.\}.el .@error-recover mismatched DE...de DS.br.di ds*div.ie '\\$1'B' \{\.	LD.	nr \\n[.ev]:ds-type 4.\}.el \{\.	ie '\\$1'L' .LD.	el \{\.		ie '\\$1'C' .CD.		el \{\.			ie '\\$1'R' .RD.			el \{\.				ie '\\$1'I' .ID \\$2.				el .ID \\$1.			\}.		\}.	\}.	nr \\n[.ev]:ds-type 3.\}...de ds@need.if '\\n(.z'' \{\.	while \\n[.t]<=(\\$1)&(\\n[nl]>\\n[pg@header-bottom]) \{\.		rs'		sp \\n[.t]u.	\}.\}...de ds*end!3.br.ie '\\n(.z'ds*div' \{\.	di.	ds@need \\n[dn].	ev nf.	ds*div.	ev.	rm ds*div.	ds*common-end.\}.el .@error-recover mismatched DE...de ds*end!4.ie '\\n(.z'ds*div' \{\.	br.	di.	nf.	in (u;\\n[.l]-\\n[dl]/2).	ds@need \\n[dn].	ds*div.	rm ds*div.	ds*common-end.\}.el .@error-recover mismatched DE...\" ****************************.\" ******** module par ********.\" ****************************.\" Paragraph-level formatting..nr PS 10.nr LL 6i.de par*vs.\" If it's too big to be in points, treat it as units..ie (p;\\$1)>=40p .vs (u;\\$1).el .vs (p;\\$1)...de par@ab-indent.nr 0:li (u;\\n[LL]/12).nr 0:ri \\n[0:li]...de par*env-init.aln \\n[.ev]:PS PS.aln \\n[.ev]:VS VS.aln \\n[.ev]:LL LL.aln \\n[.ev]:MCLL LL.aln \\n[.ev]:LT LT.aln \\n[.ev]:MCLT LT.aln \\n[.ev]:PI PI.aln \\n[.ev]:PD PD.ad \\n[par*adj].par@reset-env...\" happens when the first page begins.de par@init.if !rLT .nr LT \\n[LL].if !rFL .nr FL \\n[LL]*5/6.if !rVS .nr VS \\n[PS]+2.ps \\n[PS].if !rDI .nr DI .5i.if !rQI .nr QI 5n.if !rPI .nr PI 5n.par*vs \\n[VS].if !rPD .nr PD .3v>?\n(.V.if !rDD .nr DD .5v>?\n(.V.if !dFAM .ds FAM \\n[.fam].nr par*adj \\n[.j].par*env-init.ev h.par*env-init.ev.ev fn.par*env-init.ev.ev k.par*env-init.ev.aln 0:MCLL pg@colw.aln 0:MCLT pg@colw.aln k:MCLL pg@colw.aln k:MCLT pg@colw.if !rFPS .nr FPS \\n[PS]-2.if !rFVS .nr FVS \\n[FPS]+2.if !rFI .nr FI 2n.if !rFPD .nr FPD \\n[PD]/2.aln fn:PS FPS.aln fn:VS FVS.aln fn:LL FL.aln fn:LT FL.aln fn:PI FI.aln fn:PD FPD.aln fn:MCLL pg@fn-colw.aln fn:MCLT pg@fn-colw...de par@reset-env.nr \\n[.ev]:il 0.nr \\n[.ev]:li 0.nr \\n[.ev]:ri 0.nr \\n[.ev]:ai \\n[\\n[.ev]:PI].nr \\n[.ev]:pli 0.nr \\n[.ev]:pri 0.nr \\n[.ev]:ds-type 0...\" par@reset.de par@reset.br.ce 0.rj 0.ul 0.fi.ie \\n[pg@ncols]>1 \{\.	ll (u;\\n[\\n[.ev]:MCLL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]).	lt \\n[\\n[.ev]:MCLT]u.\}.el \{\.	ll (u;\\n[\\n[.ev]:LL]-\\n[\\n[.ev]:ri]-\\n[\\n[.ev]:pri]).	lt \\n[\\n[.ev]:LT]u.\}.in (u;\\n[\\n[.ev]:li]+\\n[\\n[.ev]:pli]).ft 1.fam \\*[FAM].ps \\n[\\n[.ev]:PS].par*vs \\n[\\n[.ev]:VS].ls 1.TA.hy 14...als @RT par@reset.\" This can be redefined by the user..de TA.ta T 5n...de par*start.ds@auto-end.nr \\n[.ev]:pli \\$1.nr \\n[.ev]:pri \\$2.par@reset.sp \\n[\\n[.ev]:PD]u.ne 1v+\\n(.Vu...de par@finish.nr \\n[.ev]:pli 0.nr \\n[.ev]:pri 0.par@reset...\" normal LP.de @LP.par*start 0 0.nr \\n[.ev]:ai \\n[\\n[.ev]:PI]...de @PP.par*start 0 0.nr \\n[.ev]:ai \\n[\\n[.ev]:PI].ti +\\n[\\n[.ev]:ai]u...de @QP.nr \\n[.ev]:ai \\n[\\n[.ev]:PI].par*start \\n[QI] \\n[QI]...de @XP.par*start \\n[\\n[.ev]:PI] 0.ti -\\n[\\n[.ev]:PI]u...de @IP.if \\n[.$]>1 .nr \\n[.ev]:ai (n;\\$2).par*start \\n[\\n[.ev]:ai] 0.if !'\\$1'' \{\.	\" Divert the label so as to freeze any spaces..	di par*label.	in 0.	nf\&\\$1.	di.	in.	fi.	chop par*label.	ti -\\n[\\n[.ev]:ai]u.	ie \\n[dl]+1n<=\\n[\\n[.ev]:ai] \\*[par*label]\h'|\\n[\\n[.ev]:ai]u'\c.	el \{\\\*[par*label].	br.	\}.	rm par*label.\}...de @RS.br.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li].nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri].nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai].nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli].nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri].nr \\n[.ev]:il +1.nr \\n[.ev]:li +\\n[\\n[.ev]:ai].nr \\n[.ev]:ai \\n[\\n[.ev]:PI].par@reset...de @RE.br.ie \\n[\\n[.ev]:il] \{\.	nr \\n[.ev]:il -1.	nr \\n[.ev]:ai \\n[\\n[.ev]:ai!\\n[\\n[.ev]:il]].	nr \\n[.ev]:li \\n[\\n[.ev]:li!\\n[\\n[.ev]:il]].	nr \\n[.ev]:ri \\n[\\n[.ev]:ri!\\n[\\n[.ev]:il]].	nr \\n[.ev]:pli \\n[\\n[.ev]:pli!\\n[\\n[.ev]:il]].	nr \\n[.ev]:pri \\n[\\n[.ev]:pri!\\n[\\n[.ev]:il]].\}.el .@error unbalanced \\$0.par@reset...de @QS.br.nr \\n[.ev]:li!\\n[\\n[.ev]:il] \\n[\\n[.ev]:li].nr \\n[.ev]:ri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ri].nr \\n[.ev]:ai!\\n[\\n[.ev]:il] \\n[\\n[.ev]:ai].nr \\n[.ev]:pli!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pli].nr \\n[.ev]:pri!\\n[\\n[.ev]:il] \\n[\\n[.ev]:pri].nr \\n[.ev]:il +1.nr \\n[.ev]:li +\\n[QI].nr \\n[.ev]:ri +\\n[QI].nr \\n[.ev]:ai \\n[\\n[.ev]:PI].par@reset...als @QE @RE.\" start boxed text.de B1.br.di par*box-div.nr \\n[.ev]:li +1n.nr \\n[.ev]:ri +1n.par@reset...de @div-end!par*box-div.B2...\" end boxed text.\" Postpone the drawing of the box until we're in the top-level diversion,.\" in case there's a footnote inside the box..de B2.ie '\\n(.z'par*box-div' \{\.	br.	di.	ds@need \\n[dn].	par*box-mark-top.	ev nf.	par*box-div.	ev.	nr \\n[.ev]:ri -1n.	nr \\n[.ev]:li -1n.	par@finish.	par*box-draw \\n[.i]u \\n[.l]u.\}.el .@error B2 without B1...de par*box-mark-top.ie '\\n[.z]'' .mk par*box-top.el \!.par*box-mark-top...de par*box-draw.ie '\\n[.z]'' \{\.	nr par*box-in \\n[.i].	nr par*box-ll \\n[.l].	nr par*box-vpt \\n[.vpt].	vpt 0.	in \\$1.	ll \\$2\v'-1v+.25m'\\D'l (u;\\n[.l]-\\n[.i]) 0'\\D'l 0 |\\n[par*box-top]u'\

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -