📄 tmac.groff_ms
字号:
.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 + -