Passing the parameters of a frame in an environment \startMPcode ... \stopMPcode
Hi, I try to reproduce the figure as faithfully as possible. I tried for the rounded corners to put the key corner = round, but it does not work. Thanks for your help. Fabrice \usecolors[xwi] \definecolor [prune] [r=1.29,g=.20,b=.83] \starttext \setupframed[frameletter][corner=round,align=normal] \startMPcode draw outlinetext.f ("\framed[frameletter]{A}") (withcolor darkred withpen pencircle scaled 1/10) rotated 5 xsized 2cm ; draw outlinetext.f ("\framed[frameletter]{L}") (withcolor green withpen pencircle scaled 1/10) rotated -5 xsized 2cm shifted (2cm,0); draw outlinetext.f ("\framed[frameletter]{E}") (withcolor \MPcolor{blueviolet} withpen pencircle scaled 1/10) rotated 5 xsized 2cm shifted (4.5cm,0); draw outlinetext.f ("\framed[frameletter]{A}") (withcolor \MPcolor{prune} withpen pencircle scaled 1/10) rotated -5 xsized 2cm shifted (6.5cm,0); \stopMPcode \stoptext
Fabrice Couvreur schrieb am 19.04.2020 um 22:55:
Hi, I try to reproduce the figure as faithfully as possible. I tried for the rounded corners to put the key corner = round, but it does not work.
1. To create a new framed-instance you need \defineframe, \setupframed isn't enough to set the values. I guess you assumed this works similar to xtables but this mechanism sets a few values to assure \setupxtable is enough in certain cases but even here you need \definextable in certain cases. When you create a new instance you have to use the name of the new instance as command name, e.g. \frameletter or use the \placeframed command which takes the name as argument, e.g. \placeframed[frameletter]. 2. You can't pass the name of a framed-instance to \framed (backwards compatibility, performance ...), this is only possible with \startframed. 3. ConTeXt uses different mechanism to draw rectangular (unless you draw a closed frame) and rounded frame and the mechanism for rounded frames doesn't work with outlinetext. 4. To achieve the desired result you can now a) use MetaPost to draw the complete card (letter plus frame) or b) use only TeX to put the letter in a frame and rotate it. %%%% begin tex example \usecolors[svg] \defineframed [frameletter] [width=1.25em, height=1.75em, foregroundstyle=\ssbfc, corner=round, radius=0.1\bodyfontsize, rulethickness=1pt] \starttext \startTEXpage[offset=\linewidth] \dontleavehmode \rotate [rotation=5] {\color[darkred] {\frameletter{A}}} \rotate [rotation=-5]{\color[green] {\frameletter{L}}} \rotate [rotation=5] {\color[mediumblue]{\frameletter{E}}} \rotate [rotation=-5]{\color[darkviolet]{\frameletter{A}}} \stopTEXpage \stoptext %%%% end tex example Wolfgang
On Mon, Apr 20, 2020 at 09:21:41AM +0200, Wolfgang Schuster wrote:
Fabrice Couvreur schrieb am 19.04.2020 um 22:55:
Hi, I try to reproduce the figure as faithfully as possible. I tried for the rounded corners to put the key corner = round, but it does not work.
1. To create a new framed-instance you need \defineframe, \setupframed isn't enough to set the values.
I guess you assumed this works similar to xtables but this mechanism sets a few values to assure \setupxtable is enough in certain cases but even here you need \definextable in certain cases.
When you create a new instance you have to use the name of the new instance as command name, e.g. \frameletter or use the \placeframed command which takes the name as argument, e.g. \placeframed[frameletter].
2. You can't pass the name of a framed-instance to \framed (backwards compatibility, performance ...), this is only possible with \startframed.
3. ConTeXt uses different mechanism to draw rectangular (unless you draw a closed frame) and rounded frame and the mechanism for rounded frames doesn't work with outlinetext.
4. To achieve the desired result you can now a) use MetaPost to draw the complete card (letter plus frame) or b) use only TeX to put the letter in a frame and rotate it.
%%%% begin tex example \usecolors[svg]
\defineframed [frameletter] [width=1.25em, height=1.75em, foregroundstyle=\ssbfc, corner=round, radius=0.1\bodyfontsize, rulethickness=1pt]
\starttext
\startTEXpage[offset=\linewidth] \dontleavehmode \rotate [rotation=5] {\color[darkred] {\frameletter{A}}} \rotate [rotation=-5]{\color[green] {\frameletter{L}}} \rotate [rotation=5] {\color[mediumblue]{\frameletter{E}}} \rotate [rotation=-5]{\color[darkviolet]{\frameletter{A}}} \stopTEXpage
\stoptext %%%% end tex example
Wolfgang
Nice Example and good explanation, Wolfgang. But why did you use the command "dontleavehmode"? It doesn't seem to be necessary in this example. Rudolf
Rudolf Bahr schrieb am 20.04.2020 um 10:23:
On Mon, Apr 20, 2020 at 09:21:41AM +0200, Wolfgang Schuster wrote:
Fabrice Couvreur schrieb am 19.04.2020 um 22:55:
Hi, I try to reproduce the figure as faithfully as possible. I tried for the rounded corners to put the key corner = round, but it does not work.
1. To create a new framed-instance you need \defineframe, \setupframed isn't enough to set the values.
I guess you assumed this works similar to xtables but this mechanism sets a few values to assure \setupxtable is enough in certain cases but even here you need \definextable in certain cases.
When you create a new instance you have to use the name of the new instance as command name, e.g. \frameletter or use the \placeframed command which takes the name as argument, e.g. \placeframed[frameletter].
2. You can't pass the name of a framed-instance to \framed (backwards compatibility, performance ...), this is only possible with \startframed.
3. ConTeXt uses different mechanism to draw rectangular (unless you draw a closed frame) and rounded frame and the mechanism for rounded frames doesn't work with outlinetext.
4. To achieve the desired result you can now a) use MetaPost to draw the complete card (letter plus frame) or b) use only TeX to put the letter in a frame and rotate it.
%%%% begin tex example \usecolors[svg]
\defineframed [frameletter] [width=1.25em, height=1.75em, foregroundstyle=\ssbfc, corner=round, radius=0.1\bodyfontsize, rulethickness=1pt]
\starttext
\startTEXpage[offset=\linewidth] \dontleavehmode \rotate [rotation=5] {\color[darkred] {\frameletter{A}}} \rotate [rotation=-5]{\color[green] {\frameletter{L}}} \rotate [rotation=5] {\color[mediumblue]{\frameletter{E}}} \rotate [rotation=-5]{\color[darkviolet]{\frameletter{A}}} \stopTEXpage
\stoptext %%%% end tex example
Wolfgang
Nice Example and good explanation, Wolfgang. But why did you use the command "dontleavehmode"? It doesn't seem to be necessary in this example.
I wrote the example without TeXpage where I needed \doneleavehmode to keep all cards on the same line. At the end I just added TeXpage to create a cropped image with with a small border and forgot to remove it. Wolfgang
Hi Wolfgang, Thank you very much ; as usual your explanations are always clear and your approach to the problem intelligent and original. I would however like to know the way in which we can use the command \frameletter except for the rounded corners with outlinetext. For example, this doesn't work. \startMPcode draw outlinetext.f ("\frameletter{A}") (withcolor darkred withpen pencircle scaled 1/10) rotated 5 xsized 2cm ; \stopMPcode Fabrice Le lun. 20 avr. 2020 à 10:36, Wolfgang Schuster < wolfgang.schuster.lists@gmail.com> a écrit :
On Mon, Apr 20, 2020 at 09:21:41AM +0200, Wolfgang Schuster wrote:
Fabrice Couvreur schrieb am 19.04.2020 um 22:55:
Hi, I try to reproduce the figure as faithfully as possible. I tried for
Rudolf Bahr schrieb am 20.04.2020 um 10:23: the
rounded corners to put the key corner = round, but it does not work.
1. To create a new framed-instance you need \defineframe, \setupframed isn't enough to set the values.
I guess you assumed this works similar to xtables but this mechanism sets a few values to assure \setupxtable is enough in certain cases but even here you need \definextable in certain cases.
When you create a new instance you have to use the name of the new instance as command name, e.g. \frameletter or use the \placeframed command which takes the name as argument, e.g. \placeframed[frameletter].
2. You can't pass the name of a framed-instance to \framed (backwards compatibility, performance ...), this is only possible with \startframed.
3. ConTeXt uses different mechanism to draw rectangular (unless you draw a closed frame) and rounded frame and the mechanism for rounded frames doesn't work with outlinetext.
4. To achieve the desired result you can now a) use MetaPost to draw the complete card (letter plus frame) or b) use only TeX to put the letter in a frame and rotate it.
%%%% begin tex example \usecolors[svg]
\defineframed [frameletter] [width=1.25em, height=1.75em, foregroundstyle=\ssbfc, corner=round, radius=0.1\bodyfontsize, rulethickness=1pt]
\starttext
\startTEXpage[offset=\linewidth] \dontleavehmode \rotate [rotation=5] {\color[darkred] {\frameletter{A}}} \rotate [rotation=-5]{\color[green] {\frameletter{L}}} \rotate [rotation=5] {\color[mediumblue]{\frameletter{E}}} \rotate [rotation=-5]{\color[darkviolet]{\frameletter{A}}} \stopTEXpage
\stoptext %%%% end tex example
Wolfgang
Nice Example and good explanation, Wolfgang. But why did you use the command "dontleavehmode"? It doesn't seem to be necessary in this example.
I wrote the example without TeXpage where I needed \doneleavehmode to keep all cards on the same line. At the end I just added TeXpage to create a cropped image with with a small border and forgot to remove it.
Wolfgang
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net
___________________________________________________________________________________
Fabrice Couvreur schrieb am 20.04.2020 um 11:00:
Hi Wolfgang, Thank you very much ; as usual your explanations are always clear and your approach to the problem intelligent and original. I would however like to know the way in which we can use the command \frameletter except for the rounded corners with outlinetext. For example, this doesn't work.
\startMPcode
draw outlinetext.f ("\frameletter{A}") (withcolor darkred withpen pencircle scaled 1/10) rotated 5 xsized 2cm ;
\stopMPcode
Take a look at the log-file and you should see a line like this: %%%% begin error message tex error > tex error on line 8 in file ./test.tex: ! Undefined control sequence <argument> \par draw outlinetext.f ("\frameletter %%%% end error message As the error message tells you the command \frameletter doesn't exist, you can fix this with \defineframed[frameletter] %%%% begin example \defineframed [frameletter] \starttext \startMPcode draw outlinetext.f ("\frameletter{A}") (withcolor darkred withpen pencircle scaled 1/10) rotated 5 xsized 2cm ; \stopMPcode \stoptext %%%% end example Wolfgang
participants (3)
-
Fabrice Couvreur
-
Rudolf Bahr
-
Wolfgang Schuster