Re: [Tex-nl] Probleem met xkeyval en TiKz
Oke, hier een wat uitgebreider voorbeeld, ongeveer zoals ik het in mijn eigen class file heb staan: \define@key[TWL]{tcanv}{show bounding box}[true]{\gsetboolean{TWL@show@bbox}{#1}} % en nog een stuk of acht andere keys \newenvironment{tikzcanvas}[1][]{% % Defaults: \setkeys*[TWL]{tcanv}{show bounding box=false,....} % andere keys worden ook gezet % Set keys: \setkeys*[TWL]{tcanv}{#1}% : % En dan plaatjes tekenen: \begin{tikzpicture}[\XKV@rm] % <- hier gaat het mis : }{ : \ifthenelse{\boolean{TWL@show@bbox}}{% \draw[blue] (current bounding box.north east)rectangle(current bounding box.south west); }{} \end{tikzpicture} } In feite maak ik een schil om 'tikzpicture' om bijvoorbeeld de bounding- box mee te tonen. Er zijn nog wat andere zaken die je met 'tikzcanvas' kunt doen, maar die heb ik weggelaten omdat die er denk ik niet toe doen. Enkele voorbeelden: \begin{tikzcanvas} ....\end{tikzcanvas} Is feitelijk hetzelfde als \begin{tikzpicture}... \begin{tikzcanvas}[show bounding box] ....\end{tikzcanvas} Tekent een blauwe rechthoek om de bounding box. \begin{tikzcanvas}[show bounding box,baseline] ....\end{tikzcanvas} Idem, maar nu wordt de key 'baseline' doorgeschoven naar 'tikzpicture'. Daarmee wordt de baseline verplaatst naar "bounding box.base". 'tikzcanvas' definieert zelf geen key 'baseline', dus die wordt niet afgevangen door de keys \define@key[TWL]{tcanv}{..}. De key 'baseline' wordt door xkeyval in \XKV@rm geplaatst. Werkt, want \XKV@rm bevat geen '=' en geen ','. \begin{tikzcanvas}[show bounding box,baseline=0pt] ....\end{tikzcanvas} En dit werkt niet, want nu is \XKV@rm gelijk aan "baseline=0pt" en bevat een '='-je. TiKz geeft de volgende foutmelding: "I do not know the key /tikz/baseline=0pt and I am going to ignore it." Hoeplijk maakt dit wat meer duidelijk wat het probleem is. Mike Boldy Universiteit Twente m.c.boldy@utwente.nl
-----Original Message----- From: tex-nl-bounces@ntg.nl [mailto:tex-nl-bounces@ntg.nl] On Behalf Of Wybo Dekker Sent: donderdag 23 juni 2011 13:58 To: tex-nl@ntg.nl Subject: Re: [Tex-nl] Probleem met xkeyval en TiKz
Optie-argumenten die , of = bevatten moet je tussen {} aanbieden. Als dit niet is wat je bedoelt, bied dan even een compleet test-voorbeeld aan.
On 06/23/2011 01:26 PM, Boldy, Mike wrote:
En dit werkt dus niet. Het gaat mis zodra \XKV@rm een '='- teken of een komma bevat.
-- Wybo _______________________________________________ TeX-NL mailing list TeX-NL@ntg.nl http://www.ntg.nl/cgi-bin/mailman/listinfo/tex-nl
Ik wordt er niet veel wijzer van. Beter kun je je probleem tot een werkend (en deels dus niet-werkend) minimaal voorbeeld reduceren. Bovendien: vaak los je het probleem zelf al op door dat te doen... On 06/23/2011 03:15 PM, M.C.Boldy@utwente.nl wrote:
Oke, hier een wat uitgebreider voorbeeld, ongeveer zoals ik het in mijn eigen class file heb staan:
-- Wybo
Oke, hier een minimaal voorbeeld. Ik heb een file 'tikzcanvas.sty': %------------------------------------ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{tikzcanvas}[2011/06/24 V0.00 test package] \RequirePackage{tikz} \RequirePackage{xkeyval} \makeatletter \def\@yes{yes} \define@key[TC]{canvas}{show bounding box}{\def\show@bb{#1}} \newcommand{\mytikzcanvas}[2][]{ \presetkeys[TC]{canvas}{show bounding box=yes}{} \setkeys*[TC]{canvas}{#1} \begin{tikzpicture}[\XKV@rm] #2 \ifx\show@bb\@yes\draw[dashed] (current bounding box.south west)rectangle(current bounding box.north east);\fi \end{tikzpicture} } \makeatother %------------------------------------ Het commando \mytikzcanvas geeft TiKz objecten door via argument #2 aan een \begin{tikzpicture} omgeving. Er is slechts een key 'show bounding box'. Als deze key de waarde 'yes' heeft wordt een stippellijn om de bounding box getekend, anders niet. Niet gebruikte keys worden in \XKV@rm opgeslagen en worden aan de tikzpicture environment doorgegeven (regel met "\begin{tikzpicture}[\XKV@rm]"). Verder heb ik een document 'main.tex' om eea te testen: %------------------------------------ \documentclass{article} \usepackage{tikzcanvas} \begin{document} % tekent een stippellijn om de cirkel; baseline staat onderaan: \mytikzcanvas{\fill (0,0)circle(1);} % werkt % tekent geen stippellijn om de cirkel, baseline in het midden: \mytikzcanvas[show bounding box=no,baseline]{\fill (0,0)circle(1);} % werkt ook % tekent een stippellijn om de cirkel, baseline in op 1 cm hoogte % Geeft foutmelding: I do not know the key '/tikz/baseline=1cm' and I am going to ignore it % Helaas, probleem niet opgelost :_: \mytikzcanvas[baseline=1cm]{\fill (0,0)circle(1);} \end{document} %------------------------------------ Mike Boldy Universiteit Twente m.c.boldy@utwente.nl
-----Original Message----- From: tex-nl-bounces@ntg.nl [mailto:tex-nl-bounces@ntg.nl] On Behalf Of Wybo Dekker Sent: vrijdag 24 juni 2011 13:14 To: tex-nl@ntg.nl Subject: Re: [Tex-nl] Probleem met xkeyval en TiKz
Ik wordt er niet veel wijzer van. Beter kun je je probleem tot een werkend (en deels dus niet-werkend) minimaal voorbeeld reduceren. Bovendien: vaak los je het probleem zelf al op door dat te doen...
On 06/23/2011 03:15 PM, M.C.Boldy@utwente.nl wrote:
Oke, hier een wat uitgebreider voorbeeld, ongeveer zoals ik het in mijn eigen class file heb staan:
-- Wybo _______________________________________________ TeX-NL mailing list TeX-NL@ntg.nl http://www.ntg.nl/cgi-bin/mailman/listinfo/tex-nl
Ik heb het geheel eerst maar eens verder vereenvoudigd: alles in 1 file, zoveel mogelijk @'s verwijderd. Kreeg dezelfde fout. Maar ik begreep die [\XKV@rm] niet; eruit gehaald: draait dan zonder fouten. Maar ik weet niet of het resultaat klopt. Ik zie nergens een baseline, ook niet in de twee plaatjes die wel goed lopen. Kijk daar eerst eens naar? Hier is mijn source: \documentclass{article} \usepackage{tikz,xkeyval} \makeatletter \define@key[TC]{canvas}{show bounding box}{\def\Showbb{#1}} \def\Yes{yes} \newcommand{\mytikzcanvas}[2][]{ \presetkeys[TC]{canvas}{show bounding box=yes}{} \setkeys*[TC]{canvas}{#1} \begin{tikzpicture} #2 \ifx\Showbb\Yes\draw[dashed] (current bounding box.south west) rectangle (current bounding box.north east); \fi \end{tikzpicture} } \makeatother \begin{document} % tekent een stippellijn om de cirkel; baseline staat onderaan: \mytikzcanvas{\fill (0,0)circle(1);} % tekent geen stippellijn om de cirkel, baseline in het midden: \mytikzcanvas[show bounding box=no,baseline]{\fill (0,0)circle(1);} % tekent een stippellijn om de cirkel, baseline in op 1 cm hoogte \mytikzcanvas[baseline=1cm]{\fill (0,0)circle(1);} \end{document} -- Wybo
Die baseline doet er ook niet toe. Die kun je wel tekenen (heeft me trouwens de nodige tijd gekost om uit te puzzelen hoe je dat kunt doen, maar dat is weer een ander verhaal..). Het gaat er om dat je de globale opties die 'tikzpicture' accepteert kunt doorgeven aan \mytikzcanvas. Bijvoorbeeld 'scale' of 'line width'. Stel je wilt \begin{tikzpicture}[scale=2,line width=.75] <TiKz spul> \end{tikzpicture} Met \mytikzcanvas wordt dat dan \mytikzcanvas[show bounding box=yes,scale=2,line width=.75]{<TiKz spul>} Xkeyval zet de key 'show bounding box=yes' op 'yes' (met \setkeys*), en de keys 'scale=2,line width=.75' worden in \XKV@rm geplaatst. Die zou je dus eenvoudig moeten kunnen doorgeven aan \begin{tikzpicture}, maar dat gaat dus niet. Althans niet foutloos als er een '=' of een ',' in \XKV@rm staat. Ik heb wel een noodoplossing bedacht. Definieer een extra key 'tikzpicture options' waarin de opties worden opgeslagen: \define@key[TC]{canvas}{tikz options}{\tikzset{myoptions/.style={#1}}} % een macro definieren werkt niet, zelfde probleem De style myoptions kun je nu doorgeven aan tikzpicture: : \begin{tizpicture}[ myoptions] : Aanroepen van \mytikzcanvas ziet er dan bv. als volgt uit: \mytikzcanvas[show bounding box=yes,tikzpicture options={scale=2,line width=.75}]{<TiKz spul>} Dat werkt wel. Overigens werkt \tikzset{ myoptions/.style={\XKV@rm}} weer niet. Mike Boldy Universiteit Twente m.c.boldy@uwente.nl
-----Original Message----- From: tex-nl-bounces@ntg.nl [mailto:tex-nl-bounces@ntg.nl] On Behalf Of Wybo Dekker Sent: vrijdag 24 juni 2011 16:01 To: tex-nl@ntg.nl Subject: Re: [Tex-nl] Probleem met xkeyval en TiKz
Ik heb het geheel eerst maar eens verder vereenvoudigd: alles in 1 file, zoveel mogelijk @'s verwijderd. Kreeg dezelfde fout. Maar ik begreep die [\XKV@rm] niet; eruit gehaald: draait dan zonder fouten. Maar ik weet niet of het resultaat klopt. Ik zie nergens een baseline, ook niet in de twee plaatjes die wel goed lopen.
Kijk daar eerst eens naar?
Hier is mijn source:
\documentclass{article} \usepackage{tikz,xkeyval}
\makeatletter \define@key[TC]{canvas}{show bounding box}{\def\Showbb{#1}} \def\Yes{yes} \newcommand{\mytikzcanvas}[2][]{ \presetkeys[TC]{canvas}{show bounding box=yes}{} \setkeys*[TC]{canvas}{#1} \begin{tikzpicture} #2 \ifx\Showbb\Yes\draw[dashed] (current bounding box.south west) rectangle (current bounding box.north east); \fi \end{tikzpicture} } \makeatother
\begin{document} % tekent een stippellijn om de cirkel; baseline staat onderaan: \mytikzcanvas{\fill (0,0)circle(1);}
% tekent geen stippellijn om de cirkel, baseline in het midden: \mytikzcanvas[show bounding box=no,baseline]{\fill (0,0)circle(1);}
% tekent een stippellijn om de cirkel, baseline in op 1 cm hoogte \mytikzcanvas[baseline=1cm]{\fill (0,0)circle(1);} \end{document}
-- Wybo _______________________________________________ TeX-NL mailing list TeX-NL@ntg.nl http://www.ntg.nl/cgi-bin/mailman/listinfo/tex-nl
participants (3)
-
M.C.Boldy@utwente.nl
-
Mike Boldy
-
Wybo Dekker