Hi all. I'm trying to place a TikZ picture in the margin. Here is a small example: \usemodule[tikz] \setuplayout[backspace=4cm, topspace=2cm, height=middle] \starttext \input{lorem} \margintext{I have discovered a truly marvelous proof ... but this margin is too narrow to contain it.} \input{lorem} \inmargin{\externalfigure[cow] [width=\marginwidth]} % The above works. % The following does not: \input{lorem} \inmargin{ \starttikzpicture \draw[gray] (-2,0) grid (2,2) ; \draw plot [domain=-2:2, samples=50, smooth] (\x,{\x * \x}); \stoptikzpicture } \stoptext -> Undefined control sequence I tried using \startfigure, \hbox... no success. Actually the command \startmarginblock ... \stop... described in the ConText reference works with a TikZ picture. But the picture, in the margin, gets near the top of the page. I don't understand the meaning of the options (especially the difference between `location' and `align'). And is it `\setuppagenumbering[alternative=doublesided]'-aware ? Example: \usemodule[tikz] \setuplayout[backspace=4cm, topspace=2cm, height=middle] \setuppagenumbering[alternative=doublesided] \starttext \input{lorem} \inmargin{\externalfigure[cow] [width=\marginwidth]} \pagebreak \input{lorem} \input{lorem} \blank We would like the picture to go the the left of this paragraph. \setupmarginblocks[location=left,align=inner] \startmarginblock \starttikzpicture[scale=0.2] \draw[gray] (-2,0) grid (2,2) ; \draw plot [domain=-2:2, samples=50, smooth] (\x,{\x * \x}); \stoptikzpicture \stopmarginblock \stoptext Best regards
Am 14.02.2021 um 16:11 schrieb Jigé
: Hi all.
I'm trying to place a TikZ picture in the margin. Here is a small example:
\usemodule[tikz] \setuplayout[backspace=4cm, topspace=2cm, height=middle] \starttext \input{lorem} \margintext{I have discovered a truly marvelous proof ... but this margin is too narrow to contain it.} \input{lorem} \inmargin{\externalfigure[cow] [width=\marginwidth]} % The above works. % The following does not: \input{lorem} \inmargin{ \starttikzpicture \draw[gray] (-2,0) grid (2,2) ; \draw plot [domain=-2:2, samples=50, smooth] (\x,{\x * \x}); \stoptikzpicture } \stoptext
Does \placefigure[margin]{caption}{... tikzpicture ...} fit your needs? That generally works, but using LMTX there’s a horizontal shift on left pages (still need to prepare a MWE for that). Hraban
On Sun, 14 Feb 2021, Jigé wrote:
Hi all.
I'm trying to place a TikZ picture in the margin. Here is a small example:
\usemodule[tikz] \setuplayout[backspace=4cm, topspace=2cm, height=middle] \starttext \input{lorem} \margintext{I have discovered a truly marvelous proof ... but this margin is too narrow to contain it.} \input{lorem} \inmargin{\externalfigure[cow] [width=\marginwidth]} % The above works. % The following does not: \input{lorem} \inmargin{ \starttikzpicture \draw[gray] (-2,0) grid (2,2) ; \draw plot [domain=-2:2, samples=50, smooth] (\x,{\x * \x}); \stoptikzpicture } \stoptext
-> Undefined control sequence
Most likely because the argument of \inmargin is scanned upfront and at that time \draw etc are undefined. One option is: \startbuffer[picture] \starttikzpicture ... \stoptikzpicture \stopbuffer \inmargin{\getbuffer[picture]} Another option (but better to do that in tikz module) is: \let\draw\relax \let\x\relax \inmargin{\starttikzpicture ... \stoptikzpicture}
Actually the command \startmarginblock ... \stop... described in the ConText reference works with a TikZ picture.
Because the \start ... \stop blocks don't scan the argument. Aditya
On 2/14/2021 10:43 PM, Aditya Mahajan wrote:
On Sun, 14 Feb 2021, Jigé wrote:
Hi all.
I'm trying to place a TikZ picture in the margin. Here is a small example:
\usemodule[tikz] \setuplayout[backspace=4cm, topspace=2cm, height=middle] \starttext \input{lorem} \margintext{I have discovered a truly marvelous proof ... but this margin is too narrow to contain it.} \input{lorem} \inmargin{\externalfigure[cow] [width=\marginwidth]} % The above works. % The following does not: \input{lorem} \inmargin{ \starttikzpicture \draw[gray] (-2,0) grid (2,2) ; \draw plot [domain=-2:2, samples=50, smooth] (\x,{\x * \x}); \stoptikzpicture } \stoptext
-> Undefined control sequence
Most likely because the argument of \inmargin is scanned upfront and at that time \draw etc are undefined. One option is:
\startbuffer[picture] \starttikzpicture ... \stoptikzpicture \stopbuffer
\inmargin{\getbuffer[picture]}
Another option (but better to do that in tikz module) is:
\let\draw\relax \let\x\relax
\inmargin{\starttikzpicture ... \stoptikzpicture}
Actually the command \startmarginblock ... \stop... described in the ConText reference works with a TikZ picture.
Because the \start ... \stop blocks don't scan the argument. Here's one for you to ponder:
we have this: % \doifelsenothing{#content}\donefalse\donetrue we could use the slower (maybe even side effects) % \doifelsetext{#content}\donetrue\donefalse but go modern instead: \ifparameter#content\donefalse\or\donetrue\else\donefalse\fi i'll add that last one to lmtx Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
participants (4)
-
Aditya Mahajan
-
Hans Hagen
-
Henning Hraban Ramm
-
Jigé