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 -----------------------------------------------------------------