diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /info/context-notes-zh-cn/src/t-layout.tex |
Initial commit
Diffstat (limited to 'info/context-notes-zh-cn/src/t-layout.tex')
-rw-r--r-- | info/context-notes-zh-cn/src/t-layout.tex | 411 |
1 files changed, 411 insertions, 0 deletions
diff --git a/info/context-notes-zh-cn/src/t-layout.tex b/info/context-notes-zh-cn/src/t-layout.tex new file mode 100644 index 0000000000..7ca9d6e1b6 --- /dev/null +++ b/info/context-notes-zh-cn/src/t-layout.tex @@ -0,0 +1,411 @@ +%% Last Change: Fri Apr 22 11:06:09 2005 + +%D \module +%D [ file=t-layout, +%D version=2003.03.26, +%D title=\CONTEXT\ User Module, +%D subtitle=show layout, +%D author=Patrick Gundlach, +%D date=\currentdate, +%D copyright={Patrick Gundlach}] + + +%C filename: t-layout.tex +%C module layout, shows layout of current page + + +%C copyright 2003,2007 Patrick Gundlach, patrick@gundla.ch +%C may be distributed under the terms of the GNU General Public License +%C URL: http://levana.de/context/ + +%D \subject{Introduction} +%D This third-party module \quote{layout} draws a representation of +%D the of the layout of the +%D current page and displays the sizes of the widths and heights of the +%D margins, header, footer and text body. + +%D \subject{Usage} +%D Include this module into your ConTeXt files: +%D \type{\usemodule[t][layout]} and show the layout with \type{\ShowLayout}. + +%D You can set some parameters using \type{\SetupShowLayout}. The +%D parameters are: units, digits, round, showmore and graphonly. +%D If graphonly (0/1) is 0, this module shows the lenghts of some text areas. +%D units (cm, mm, in or pt) sets the unit in which the lengths will be +%D displayed, digits (any number $\geq 0$) +%D sets the number of digits after the decimal period, round (any +%D number $\neq 0$) states +%D the place where rounding of the displayed numbers should occur +%D (\TeX\ is bad at calculating such things) and showmore (0/1) tells +%D this module to display information about the edge and top/bottom. + +%D Example: +%D \starttyping +%D \ShowLayout +%D [units=cm, +%D digits=2, +%D round=0.1, +%D showmore=1, +%D graphonly=1] +%D +%D \stoptyping + +%D The idea was taken from the \type{\layout} command from the layout LaTeX +%D package. (Kent McPherson and others) + +%C the following settings will be recognized: +%C units = cm, mm, in or pt +%C digits = any number >= 0, those are the digits after the decimal period +%C round = any number != 0, just play with it, example 0.1 or 0.01. +%C Explanation will be done later + +%D \subject{The code} + +%D This section is not meant as documentation + +\newdimen\ShowLayoutdimen + +\setvalue{Layoutmm}{0.351459804} % 2.54/72.27 * 10 +\setvalue{Layoutcm}{0.0351459804} % 2.54/72.27 +\setvalue{Layoutin}{0.0138370001} % 1/72.27 +\setvalue{Layoutpt}{1} + +\def\ShowLayoutB(#1.#2)#3{% + \counttokens #2\to\scratchcounter + #1\ifnum#3>0% + \ifnum#3 > \the\scratchcounter \else \scratchcounter=#3 \fi + \splitofftokens \scratchcounter \from #2 \to\test .\test \fi} + +% taken from ConTeXt source +\def\LayoutConvert#1#2#3% + {\ShowLayoutdimen=\getvalue{ShowLayoutround}pt + \begingroup + \scratchdimen#1\relax + \scratchdimen\getvalue{Layout#2}\scratchdimen + \advance\scratchdimen by 0.5\ShowLayoutdimen + \divide\scratchdimen by \ShowLayoutdimen + \multiply\scratchdimen by \ShowLayoutdimen + \expandafter\ShowLayoutB\expandafter(\number\withoutpt{\the\scratchdimen}){#3}\thinspace #2 + \endgroup} + +\def\ShowLayoutA#1{% + \LayoutConvert{#1}% + {\getvalue{ShowLayoutunits}}% + {\getvalue{ShowLayoutdigits}}}% + +\startuniqueMPgraphic{ShowLayout}{showmore} +% make sure that the label is on the same side as the posa +vardef swapifnecessary (suffix posa, posb)(expr labelpos) = + if ( (labelpos < posa) and (posa > posb)) + or ( (labelpos > posa) and (posa < posb)) : + save c; %swap 'em + c:=posa; + posa:=posb; + posb:= c; + fi +enddef; +% num: labelnumber +% vertical: horizontal or vertical label? +% pos: for horizontal the y coord, for vertical the x corrd +% posa, posb: positions of the borders (x coord for horizontal) +% labelpos: position for label, only for outer labels, given in the +% same direction as posa, posb +def layoutshowmark(expr num, vertical, pos, posa, posb, labelpos) = + save b,e,c,p,arrow; + numeric b,e; pair p[]; path arrow[],c; + + b:=posa; + e:=posb; + + % p0 is labelposition + % p1 is from + % p2 is to + % p3 is opposite arrow in outer marking + + if labelpos = 0 : % inner label |<----(n)---->| + p0 := (.5[b,e], pos); + else: % outer label --->| |<----(n) + swapifnecessary (b,e, labelpos); + p0 := (labelpos, pos); + p3 := ( if b < labelpos: e-5mm else: e+5mm fi ,pos); + fi + + p1 := (b,pos); + p2 := (e,pos); + + if vertical: + p0:=(ypart p0,xpart p0); + p1:=(ypart p1,xpart p1); + p2:=(ypart p2,xpart p2); + p3:=(ypart p3,xpart p3); + fi + c:= fullcircle scaled .7cm shifted p0; + + if (center(c) -- p1) intersectiontimes c = (-1,-1): + % don't draw the arrows, because there is not enough room for them. + else: + arrow1 :=center(c) -- p1 cutbefore (center(c) -- p1) intersectionpoint c ; + arrow2 := + if labelpos = 0 : % inner + center(c) -- p2 cutbefore (center(c) -- p2) intersectionpoint c + else: + p3 -- p2 + fi; + + label (decimal (num), center(c)); + draw c; + drawarrow arrow1; + drawarrow arrow2; + fi + +enddef; + + + +StartPage; +numeric xpos,ypos; + +path body,leftmargin,header,footer,rightmargin; + + +% backspace: +draw llcorner Page shifted (BackSpace,0) -- + ulcorner Page shifted (BackSpace,0) dashed evenly; + +%topspace +draw urcorner Page shifted (0,-TopSpace) -- + ulcorner Page shifted (0,-TopSpace) dashed evenly; + + +header := Field [Header] [Text]; +footer := Field [Footer] [Text]; +leftmargin := Field [LeftMargin] [Text]; +rightmargin:= Field [RightMargin][Text]; +body := Field [Text] [Text]; + +pickup pencircle scaled 2pt; + +draw Page; +draw leftmargin; +draw rightmargin; +draw header; +draw footer; +draw body; + + + +label ("Body", center (body)); +label ("Header",center (header)); +label ("Left Margin", center (leftmargin)); +label ("Right Margin", center (rightmargin)); +label ("Footer", center (footer)); +%% label (textext("\tfb Body"), center (body)); +%% label (textext("\tfa Header"),center (header)); +%% label (textext("Left Margin"), center (leftmargin)); +%% label (textext("Right Margin"), center (rightmargin)); +%% label (textext("\tfa Footer"), center (footer)); + + +if \MPvar{showmore}=1: + path top, bot, leftedge, rightedge; + + top := Field [Top] [Text]; + bot := Field [Bottom] [Text]; + leftedge := Field [LeftEdge] [Text]; + rightedge := Field [RightEdge][Text]; + + draw top; + draw bot; + draw leftedge; + draw rightedge; +fi + +pickup pencircle scaled 1pt; + +% (num, vertical, pos, from, to, labelpos) + +%backspace +layoutshowmark (1, false, .5[ypart(ulcorner Page),Vstep[Top]], 0,BackSpace,0) + + +ypos := Vstep[HeaderSeparator] -1cm; + +% leftmargin +layoutshowmark (2, false, ypos, + Hstep[LeftMargin], + Hstep[LeftMargin]+Hsize[LeftMargin],0); + +% leftmargindistance +layoutshowmark (3, false, ypos -1cm, + Hstep[LeftMarginSeparator], + Hstep[Text], + Hstep[Text]+1cm); + +% makeupwidth +layoutshowmark (4, false, Vstep[Text]+2cm, + Hstep[Text], Hstep[Text]+Hsize[Text],0); + +% rightmargin +layoutshowmark (5, false, ypos, + Hstep[RightMargin], + Hstep[RightMargin]+Hsize[RightMargin],0); + +% rightmargindistance +layoutshowmark (6, false, ypos-1cm, + Hstep[RightMargin], + Hstep[RightMarginSeparator], + Hstep[RightMarginSeparator] -1cm); + + +%topspace + +xpos:=xpart(ulcorner Page)+BackSpace+1cm; +layoutshowmark (7, true, xpos, PaperHeight,PaperHeight-TopSpace,0) + +%header +xpos:=xpos+1cm; +ypos:=.5[PaperHeight,PaperHeight-TopSpace]; +layoutshowmark (8, true, xpos , + Vstep[Header], + Vstep[Header]+Vsize[Header],ypos); + +%headerseparator +xpos:=xpos+1cm; +layoutshowmark (9, true,xpos, + Vstep[HeaderSeparator], + Vstep[HeaderSeparator]+Vsize[HeaderSeparator],ypos); + +xpos:=xpos+1cm; + +if \MPvar{showmore}=1: + % top + layoutshowmark (17, true, xpos, + Vstep[Top], + Vstep[Top]+Vsize[Top], ypos); + + xpos:=xpos+1cm; + layoutshowmark (18, true, xpos, + Vstep[TopSeparator], + Vstep[TopSeparator]+Vsize[TopSeparator], ypos); + +fi + +% makeupheight +layoutshowmark (10, true,Hstep[RightMarginSeparator]-2cm, + Vstep[Header]+Vsize[Header], + Vstep[Footer],0); + + +%footerseparator +xpos:=xpart(ulcorner Page)+BackSpace+2cm; +ypos:=.5(Vstep[Footer]); + +layoutshowmark (11, true,xpos, + Vstep[FooterSeparator], + Vstep[FooterSeparator]+Vsize[FooterSeparator],ypos); + +%footer +xpos:=xpos+1cm; +layoutshowmark (12, true,xpos, + Vstep[Footer],Vstep[Footer]+Vsize[Footer],ypos); + +xpos:=xpos+1cm; + +if \MPvar{showmore}=1: + % bottom + layoutshowmark (19, true, xpos, + Vstep[Bottom], + Vstep[Bottom]+Vsize[Bottom], ypos); + xpos:=xpos+1cm; + layoutshowmark (20, true, xpos, + Vstep[BottomSeparator], + Vstep[BottomSeparator]+Vsize[BottomSeparator], ypos); + +fi + +if \MPvar{showmore}=1: + + ypos := Vstep[HeaderSeparator] -3cm; + + % LeftEdge + layoutshowmark (13, false, ypos, + Hstep[LeftEdge], + Hstep[LeftEdge]+Hsize[LeftEdge],Hstep[Text]+1cm); + ypos := ypos-1cm; + % LeftEdgeSeparator + layoutshowmark (14, false, ypos, + Hstep[LeftEdgeSeparator], + Hstep[LeftEdgeSeparator]+Hsize[LeftEdgeSeparator], + Hstep[Text]+1cm); + + ypos := Vstep[HeaderSeparator] -3cm; + + layoutshowmark (15, false, ypos, + Hstep[RightEdge], + Hstep[RightEdge]+Hsize[RightEdge], + Hstep[RightMarginSeparator] -1cm); + + ypos := ypos-1cm; + + layoutshowmark (16, false, ypos, + Hstep[RightEdge], + Hstep[RightEdgeSeparator], + Hstep[RightMarginSeparator] -1cm); + + + +fi + +currentpicture := currentpicture scaled .5; + +\stopuniqueMPgraphic +\defineoverlay[ShowLayout][\uniqueMPgraphic{ShowLayout}] + +\def\SetupShowLayout{\dosingleempty\getparameters[ShowLayout]} +\SetupShowLayout[units=pt,digits=1,round=0.1,showmore=0,graphonly=0] + +\def\ShowLayout{\dosingleempty\doShowLayout} + + +\def\doShowLayout[#1]{% + \getparameters[ShowLayout][#1] + \setMPvariables[ShowLayout][showmore=\getvalue{ShowLayoutshowmore}] + \framed[width=.5\paperwidth, + height=.5\paperheight, + background=ShowLayout, + frame=off, +% frame=on, + ]{}% +\ifnum\getvalue{ShowLayoutgraphonly}=0 + \bgroup\tfxx +\startcolumns[n=2] +\starttabulate[|r|l|] +\NC 1 \NC backspace \ShowLayoutA{\the\backspace} \NR +\NC 2 \NC leftmargin \ShowLayoutA{\the\leftmarginwidth}\NR +\NC 3 \NC leftmargindistance \ShowLayoutA{\the\leftmargindistance}\NR +\NC 4 \NC width \ShowLayoutA{\the\makeupwidth}\NR +\NC 5 \NC rightmargin \ShowLayoutA{\the\rightmarginwidth}\NR +\NC 6 \NC rightmargindistance \ShowLayoutA{\the\rightmargindistance}\NR +\NC 7 \NC topspace \ShowLayoutA{\the\topspace}\NR +\NC 8 \NC header \ShowLayoutA{\the\headerheight}\NR +\NC 9 \NC headerdistance \ShowLayoutA{\the\headerdistance}\NR +\NC 10\NC height \ShowLayoutA{\the\makeupheight}\NR +\NC 11\NC footerdistance \ShowLayoutA{\the\footerdistance}\NR +\NC 12\NC footer \ShowLayoutA{\the\footerheight}\NR +\ifnum\getvalue{ShowLayoutshowmore}=1% +\NC 13\NC leftedge \ShowLayoutA{\the\leftedgewidth}\NR +\NC 14\NC leftedgedistance \ShowLayoutA{\the\leftedgedistance}\NR +\NC 15\NC rightedge \ShowLayoutA{\the\rightedgewidth}\NR +\NC 16\NC rightedgedistance \ShowLayoutA{\the\rightedgedistance}\NR +\NC 17\NC top \ShowLayoutA{\the\topheight}\NR +\NC 18\NC topdistance \ShowLayoutA{\the\topdistance}\NR +\NC 19\NC bottom \ShowLayoutA{\the\bottomheight}\NR +\NC 20\NC bottomdistance \ShowLayoutA{\the\bottomdistance}\NR +\fi +\NC \NC paperwidth \ShowLayoutA{\the\paperwidth}\NR +\NC \NC paperheight \ShowLayoutA{\the\paperheight}\NR +\stoptabulate +\stopcolumns +\egroup +\fi +} |