Changes

Jump to navigation Jump to search
13,443 bytes added ,  24 January
m
Fix typesetting of \, in its explanation.
{{todo|the page devoted = How to all kinds of framed stuff}}achieve specific results =
== Preventing hyphenation ==
 
One can prevent hyphenation inside a frame by passing {{code|1=nothypenated}} option to {{code|1=align}}. It is also a good idea to add {{code|1=verytolerant}} and {{code|1=stretch}} options.
 
<context source="yes">
\setuppapersize[A5]
\startcombination[2*2]
{\framed
[width=5cm,
align={flushleft}]
{\input ward \endgraf}}
{flushleft}
{\framed
[width=5cm,
align={flushleft,nothyphenated,verytolerant}] % maybe also stretch
{\input ward \endgraf}}
{flushleft,\crlf nothyphenated, \crlf verytolerant}
{\framed
[width=5cm,
align={flushright,nothyphenated,verytolerant}] % maybe also stretch
{\input ward \endgraf}}
{flushright,\crlf nothyphenated, \crlf verytolerant}
{\framed
[width=5cm,
align={width,nothyphenated,verytolerant}] % maybe also stretch
{\input ward \endgraf}}
{width,\crlf nothyphenated, \crlf verytolerant}
\stopcombination
</context>
 
== Specify the width no longer than needed ==
 
I want to specify the maximum width of a frame. If the size of the box is smaller than the maximum width, I want a tight box. This can be done using the {{code|1=autowidth=force}} option to framed.
 
<context source="yes">
\setuppapersize[A5]
\defineframed
[tightframed][width=5cm,autowidth=force,align=middle]
 
\tightframed{Small}
 
\tightframed{A really really long line that is split at 5cm}
 
</context>
 
== Ruled Frames ==
 
{{cmd|framed}} allows you to specify specific edges to be ruled.
As an alternative to {{code|1=frame=on}} (the default), one can specify
{{code|1=topframe=on}}, etc.
Note that, as the default is to draw a complete frame,
it is necessary to either specify the state (on/off) for all four edges
or include the keyword {{code|1=frame=off}}.
<context source="yes">
\setuppapersize[A5]
\framed[frame=off,topframe=on,leftframe=on]{A fancy title}
</context>
 
The thickness of the frame rule can be specified using {{code|1=rulethickness=}}
 
<context source="yes">
\setuppapersize[A5]
\framed[frame=off,leftframe=on,rulethickness=2pt]{\tfa\bf A fancy title}
</context>
 
== Rounded Corners ==
 
{{cmd|framed}} allows you to have round corners with {{code|1=corner=round}}. There are also other possibilities if you want round corners but not at all places by giving an appropriate number to {{code|1=corner=...}}. This example is taken from [[source:core-rul.tex | core-rul.tex]] and each frame is typeset using
 
<texcode>
\framed[corner=....,frame=on]{...}
</texcode>
 
<context>
\setuppapersize[A5]
\dontleavehmode\framed
[corner=0,frame=on,
]{\tttf corner=\twodigits\recurselevel}%
\vskip1em
\dontleavehmode\dostepwiserecurse {1} {4}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse {5} {8}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse {9}{12}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse{13}{16}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse{17}{20}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse{21}{24}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
\vskip1em
\dontleavehmode\dostepwiserecurse{25}{28}{1}{\framed
[corner=\recurselevel,frame=on]
{\tttf corner=\twodigits\recurselevel}%
\quad}
</context>
 
* You can only fill the frame with a background color if the corner shape is closed. Otherwise, the backgroundcolor option will be silently ignored.
 
 
== Coloring frame background and framed text ==
 
First you have to turn on colors with {{cmd|setupcolors|2=[state=start]}}. Then you can define the background and foreground (=text) colors:
 
<texcode>\framed[background=color,backgroundcolor=....,foreground=color,foregroundcolor=...]{...}</texcode>
 
If you want to make the frame itself disappear, add a {{code|1=frame=off}} to the setups.
 
{|
|<context>
\setupcolors[state=start]
\framed
[background=color,backgroundcolor=darkblue, foreground=color,foregroundcolor=white] {\ssx \bf Bold white on dark blue}</context>|<texcode>\setupcolors[state=start]\framed [widthbackground=color,backgroundcolor=2cmdarkblue, align foreground=color,foregroundcolor=white] {flushleft\ssx \bf Bold white on dark blue}</texcode>|-|<context>\setupcolors[state=start]\framed [background=color,backgroundcolor=yellow, frame=off] {\tfx Who needs highlighter pens, anyway?}</context>|<texcode>\framed [background=color,backgroundcolor=yellow,nothyphenated frame=off] {\tfx Who needs highlighter pens,verytolerantanyway?}</texcode>|-|<context>\setupcolors[state=start] % maybe also stretch\framed [frame=on, corner=0, frameoffset=10pt, framecolor=black,background=color, backgroundcolor=darkgreen, backgroundoffset=10pt, foreground=color,foregroundcolor=white] {Left-aligned \tfxx \bf Rounded corners with no hyphenationoffset}</context>|For filling frames with offset you have to add options {{code|1=frameoffset=..., backgroundoffset=...}}<texcode>
\framed
[frame=on, corner=0, frameoffset=10pt, framecolor=black,background=color, backgroundcolor=darkgreen, backgroundoffset=10pt, foreground=color,foregroundcolor=white] {\tfxx \bf Rounded corners with offset}</texcode>|} See the [[Color]] article for more information on available colors and color usage. == Shaded background for part of a displayed equation == To highlight part of a formula, you can give it a gray background using {{cmd|mframed}}: <context source="yes">\setuppapersize[A5]\setupcolors[state=start]\def\graymath{\mframed[frame=off, background=color, backgroundcolor=gray, backgroundoffset=3pt]} \startformula \ln (1+x) =\, \graymath{x - {x^2\over2}} \,+ {x^3\over3}-\cdots.\stopformula</context> The {{code|\,}} adds a tiny bit of space to prevent the gray background from crowding the equals and plus sign. == Inline Frames == The command {{cmd|inframed}}, similar to {{cmd|framed}},differs in the definition of the baseline: <context source="yes">\setuppapersize[A5]\framed[frame=off,width=2cm10em,align=flushleft]{%Notice the difference between\framed{framed} and \inframed{inframed},especially considering its effect on linespacing...}</context> == Dotted Frames == Using MetaPost: <texcode>\startuniqueMPgraphic{Label}path p; p := (0,0) -- (OverlayWidth,0) -- (OverlayWidth, OverlayHeight) -- (0, OverlayHeight) -- (0,0);draw p withpen pencircle scaled 1pt dashed withdots;setbounds currentpicture to boundingbox OverlayBox;\stopuniqueMPgraphic\defineoverlay[Label][\useMPgraphic{Label}]\def\DotPicture#1#2#3%{% \placefigure[][#3]{#2}% {% \framed[align={flushleft, low},% frame=off,% height=3in,% width=broad]% {% \externalfigure[#1]% [width=3in,% background=Label,% backgroundoffset=1ex]% }% }%}%\def\DotText#1%{% \framed[frame=off,% background=Label,% location=low]% {% #1 }%}%\starttext \DotPicture{sample/cow.pdf}{All your base are belong to us}{SampleRef}% AAA \DotText{BBB} CCC \DotText{DDD}\stoptext</texcode>[[File:dotted_frame_mpost.png|650px]] Using TikZ: <context source="yes">\setuppapersize[A5]\usemodule[tikz]%\tikzstyle{block}=[rectangle,draw=black,text centered,style=dotted,inner sep=0pt]\def\Picture#1#2#3%{ \placefigure[left][#3]{#2}% {% \tikzpicture% \node[block](init){\externalfigure[#1][width=3in]};% \endtikzpicture% }%}%\starttext\Picture{sample/cow.pdf}{All your base are belong to us}{SampleRef}\stoptext</context>  == Colorored horizontal stripe of full paper width == <context mode="mkiv" source="yes">\definepapersize[sheet][width=120mm,height=60mm]\setuppapersize[sheet]\setuppagenumbering[location=]\setuplayout [width=110mm, backspace=5mm, topspace=5mm, header=5mm, headerdistance=5mm, footer=5mm, footerdistance=5mm] \showframe \setupbackgrounds[page] [background=color, backgroundcolor=lightgray] \startuniqueMPgraphic{Left-aligned whatever}fill OverlayBox leftenlarged BackSpace rightenlarged CutSpace withcolor OverlayColor;setbounds currentpicture to OverlayBox enlarged max(BackSpace,CutSpace);\stopuniqueMPgraphic \defineoverlay[whatever][\uniqueMPgraphic{whatever}]\starttext Here some text first. \framed[background=whatever,backgroundcolor=green,frame=off,width=\textwidth]{test} After, again some text. \stoptext </context> = Width broad and local =Sometimes {{code|1=width}} must be adapted to a "local" {{code|1=\hsize }}(the actual text area used by TeX to determine line breaks).For example:<context source='yes'>\setuppapersize[A5]\setuppapersize[A7,landscape][A7,landscape]\setupbodyfont[8pt,ss]\starttext\framed[width=broad]{}\startnarrower[left]\framed[width=broad]{}\dontleavehmode\framed[width=broad]{}\dontleavehmode\framed[width=local]{}\stopnarrower\blank\hsize.5\hsize\framed[width=broad]{}\startnarrower[left]\framed[width=broad]{}\dontleavehmode\framed[width=broad]{}\dontleavehmode\framed[width=local]{}\stopnarrower\stoptext</context> Here we use {{code|1=\setlocalhsize}} after {{code|1=\startitemize}} to setup the localhsize:<context source="yes">\setuppapersize[A5]\setuppapersize[A7,landscape][A7,landscape]\setupbodyfont[8pt,ss]\setupcolors[state=start]\setupframed[framecolor=blue]\showframe\starttext\framed[width=\hsize,align=middle]{width=hsize}\startitemize\setlocalhsize\item \framed[width=\hsize,align=middle] {width=hsize}\item \framed[width=broad,align=middle] {width=broad}\item \framed[width=local,align=middle] {width=local}\stopitemize\stoptext</context> =Spacing between frame and text= {{cmd|framed}} comes with two different types of offsets:one for the frame itself and another for the its content.The parameters {{code|1=frameoffset}} and {{code|1=backgroundoffset}}were already explained above in the section [[#Coloring frame background and framed text]]. In addition, the parameter [strut=no] allows removal of the initial strut when framing text that is [[Verbatim with hyphenationline breaks]]. ==Content offsets==Beyond those there is another four dimensions that enable you to control the safety distance of a {{cmd|framed}}’s content by orientation.Horizontally, {{code|1=loffset}} governs the left, {{code|1=roffset}} the rightoffset;the same goes for {{code|1=boffset}} for the bottom and {{code|1=toffset}} for the top distance.Their effects are explored in the following example (MkIV only). ==Example==<texcode>\def\offsetframe[#1]{%{\framed[ #1=1em, align=normal, width=5.3cm, height=5.3cm, ]{\tfx\input ward }}{\it#1}} \starttext\startcombination[2*2]\offsetframe[loffset]\offsetframe[roffset]\offsetframe[toffset]\offsetframe[boffset]\stopcombination\stoptext</texcode> ==More offset parameters==Also, you can set up <nowiki>offset</nowiki>, which sets up all the <nowiki>[lrtb]offset</nowiki> parameters. Here's a method to define a new parameter, call it <nowiki>hoffset</nowiki>, which sets up <nowiki>[lr]offset</nowiki> at the same time:<texcode>\setupframed [loffset=\framedparameter{hoffset}, roffset=\framedparameter{hoffset}, hoffset=\zeropoint]</texcode> = Location parameter = <context source="yes">\ruledhbox {A \framed[width=2cm,align=middle,location=hanging]{location\\equals\\hanging} \framed[width=2cm,align=middle,location=depth] {location\\equals\\depth} \framed[width=2cm,align=middle,location=height] {location\\equals\\height} B}\vskip2cm\ruledhbox {A \framed[width=2cm,align=middle,location=low] {location\\equals\\low} \framed[width=2cm,align=middle,location=line] {location\\equals\\line} \framed[width=2cm,align=middle,location=high] {location\\equals\\high} B}\vskip2cm\ruledhbox {A \framed[width=2cm,align=middle,location=top] {location\\equals\\top} \framed[width=2cm,align=middle,location=bottom] {location\\equals\\bottom} \framed[width=2cm,align=middle,location=lohi] {location\\equals\\lohi} \framed[width=2cm,align=middle,location=middle] {location\\equals\\middle} B}
</context>
''(A better example should be put hereand to compare with basic height and depth of the line, where and looking at the end on the frame is effect of the struct parameter: <context source="yes">\defineframed[MonCadre][width=1.75cm,align=middle]\define[1]\DemoLoc{\ruledhbox{% {\getbuffer \MonCadre[location=#1] {location\\ \color[darkmagenta]{\bf #1}\\location}}}}\setupbodyfont[10pt]%\showboxes\startbuffer\blackrule[height=max,depth=0pt,width=3mm]%\blackrule[height=0pt,depth=max,width=3mm]\stopbuffer \strut\DemoLoc{empty} \dontleavehmode\DemoLoc{keep} \dontleavehmode \DemoLoc{depth} \dontleavehmode\DemoLoc{bottom} \dontleavehmode\DemoLoc{low} \blank[big enough, so that words fit into a one ]\strut\DemoLoc{middle} \dontleavehmode\DemoLoc{lohi} \dontleavehmode \DemoLoc{line.)''}\blank[big]\strut\DemoLoc{top} \dontleavehmode\DemoLoc{height} \dontleavehmode \DemoLoc{high} \dontleavehmode\DemoLoc{formula} \dontleavehmode \DemoLoc{hanging} \setupframed[MonCadre][strut=yes]\strut{\tt strut=yes}\DemoLoc{bottom} \dontleavehmode \DemoLoc{top} {\tt strut=no}\setupframed[MonCadre][strut=no]\DemoLoc{bottom} \dontleavehmode \DemoLoc{top}</context>
== Similar topics ==
* [[Vertically Centered Boxes]]
* [[Overlays]]
* [[Tables Overview]]
 
= See also =
* [[:Category:Command/Frames]]
 
[[Category:Basics]]
38

edits

Navigation menu