[cstex] Volitelny argument v tvare [(x1, y1)(x2, y2)...(xn, yn)], ako na to?

Jan Sustek Jan.Sustek at seznam.cz
Mon May 2 18:47:11 CEST 2011


Dobry den,

opravte si nasledujici makra. Pokud pouzijete syntaxi bez hranatych zavorek, budou makra fungovat stejne jako predtim. Pokud pouzijete hranate zavorky, tak se tyto zavorky odstrani a dostavame se na pripad bez zavorek. :-)

Jan Sustek

\def\sipka#1{\def\prvnibod{#1}%
  \pocetbodu0
  \dalsiznakA}
\def\dalsiznakA{\futurelet\znak\testujA}
\def\testujA{\ifx\znak[\let\nxt\odstranzavorky\else\let\nxt\testuj\fi\nxt}
\def\odstranzavorky[#1]{\dalsiznak#1}




> ------------ Původní zpráva ------------
> Od: Tomáš Fábry <fabry.tomas at gmail.com>
> Předmět: Re: [cstex] Volitelny argument v tvare [(x1, y1)(x2, y2)...(xn, yn)],
> ako na to?
> Datum: 02.5.2011 18:30:10
> ----------------------------------------
> On May 2, 11:57 am, Jan Sustek <Jan.Sus... at seznam.cz> wrote:
> > Dobry den,
> >
> > pokud jde o nacitani neznameho poctu volitelnych argumentu, jde to s
> primitivem \futurelet jednoduse. Dokonce se to da udelat tak, ze nejsou treba
> ani hranate zavorky. To zjednodusi jak zapisovani uzivatelum, tak programovani
> toho makra. Nacitani resi nize uvedena makra \dalsiznak, \testuj a \dalsibod.
> Makro \konecsipky pak s nactenymi udaji neco udela, ve Vasem pripade vykresli tu
> sipku. Ale to uz nezavisi na tom nacitani a to necham na Vas. :-)
> >
> > Pekny den preje
> > Jan Sustek
> >
> > \newcount\pomocny
> > \newcount\pocetbodu
> > \def\sipka#1{\def\prvnibod{#1}%
> >   \pocetbodu0
> >   \dalsiznak}
> > \def\dalsiznak{\futurelet\znak\testuj}
> > \def\testuj{\ifx\znak(\let\nxt\dalsibod\else\let\nxt\konecsipky\fi\nxt}
> > \def\dalsibod(#1,#2){\advance\pocetbodu1
> >   \expandafter\def\csname x\the\pocetbodu\endcsname{#1}%
> >   \expandafter\def\csname y\the\pocetbodu\endcsname{#2}%
> >   \dalsiznak}
> > \def\konecsipky#1{\def\poslednibod{#1}%
> >   Sipka vychazi z bodu \prvnibod\ do bodu \poslednibod\
> >   \ifnum\pocetbodu>0
> >     a prochazi pres body
> >     \pomocny0
> >     \loop\ifnum\pomocny<\pocetbodu \advance\pomocny1
> >       (\csname x\the\pomocny\endcsname,\csname y\the\pomocny\endcsname)
> >     \repeat
> >   \fi
> >   \unskip.}
> >
> > \begin{document}
> > \sipka{(10,10)}{(15,15)}
> > \sipka{(1,1)}(1,2)(1,5)(2,8)(9,3){(11,4)}
> > \end{document}
> >
> > > ------------ Původní zpráva ------------
> > > Od: Tomáš Fábry <fabry.to... at gmail.com>
> > > Předmět: [cstex] Volitelny argument v tvare [(x1, y1)(x2, y2)...(xn, yn)],
> ako
> > > na to?
> > > Datum: 01.5.2011 23:10:04
> > > ----------------------------------------
> > > Zdravim vas,
> >
> > > robim sty balicek, ktory pomocou tikz vykresluje zlozitejsie obrazce.
> > > Potreboval by som vyrobit prikaz v tvare:
> >
> > > \arrow{u1}[(x1,y1)...(xn,yn)]{u2}
> >
> > > Prikaz by mal nakreslit sipku od objektu k objektu. Povedzme, ze
> > > objekty su nejake uzly s textom, konkretne:
> >
> > > \node (u1) at (xu1,yu1) {text1};
> > > \node (u2) at {xu2,yu2} {text2};
> >
> > > Vo volitelnom parametri by malo byt mozne zadat suradnice bodov, cez
> > > ktore bude sipka prechadzat. Nie je dopredu zname, kolko tychto bodov
> > > bude zadanych, mozno ziadny a mozno n.
> >
> > > Mam len malo skusenosti s tvorbou balickou a v tomto pripade absolutne
> > > nemam predstavu ako taketo nieco dosiahnut. Nasiel by sa niekto, kto
> > > by mi vedel poradit?
> >
> > > Velmi pekne dakujem.
> >
> > > S pozdravom TF
> > > _______________________________________________
> > > csTeX mailing list
> > > cs... at cs.felk.cvut.cz
> > >http://lists.felk.cvut.cz/mailman/listinfo/cstex
> 
> Zdravim, Vas sposob mi pride najviac elegantny, velmi pekne dakujem.
> Upravil som si ho pre svoje potreby (neviem, ci zrovna elegantne), ale
> funguje, no predsa ak by to bolo mozne potreboval by som tam tie
> hranate zatvorky, je to v poziadavkach syntaxe, ktoru mam danu. Vedeli
> by ste s tym nieco urobit? Moj kod vyzera takto:
> 
> \documentclass[10pt,a4paper]{article}
> 
> \usepackage{tikz}
> 
> \newcount\pomoczacatek
> \newcount\pomockonec
> \newcount\pocetbodu
> 
> \def\sipka#1{\def\prvnibod{#1}%
>   \pocetbodu0
>   \dalsiznak
> }
> 
> \def\dalsiznak{
>   \futurelet\znak\testuj
> }
> 
> \def\testuj{
>    \ifx\znak(\let\nxt\dalsibod\else\let\nxt\konecsipky\fi\nxt
> }
> 
> \def\dalsibod(#1,#2){\advance\pocetbodu1
>   \expandafter\def\csname x\the\pocetbodu\endcsname{#1}%
>   \expandafter\def\csname y\the\pocetbodu\endcsname{#2}%
>   \dalsiznak
> }
> 
> \def\konecsipky#1{
>   \def\poslednibod{#1}%
> 
>   \ifnum\pocetbodu=0
>     \draw[-stealth] \prvnibod -- \poslednibod;
>   \fi
> 
>   \ifnum\pocetbodu>0
>     \pomoczacatek0
>     \pomockonec1
>     \advance\pocetbodu-1
>     \draw \prvnibod -- (\csname x\the\pomockonec\endcsname,\csname y
> \the\pomockonec\endcsname);
>     \loop\ifnum\pomoczacatek<\pocetbodu \advance\pomoczacatek1
> \advance \pomockonec1
>       \draw (\csname x\the\pomoczacatek\endcsname,\csname y\the
> \pomoczacatek\endcsname)  --%
>             (\csname x\the\pomockonec\endcsname,\csname y\the
> \pomockonec\endcsname);
>     \repeat
>     \draw[-stealth] (\csname x\the\pomockonec\endcsname,\csname y\the
> \pomockonec\endcsname) -- \poslednibod;
>   \fi
>   \unskip
> }
> 
> \begin{document}
> \begin{tikzpicture}
> \sipka{(2,2)}{(4,4)}
> \sipka{(1,1)}(6,2)(4,9){(11,4)}
> \end{tikzpicture}
> \end{document}
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex
> 
> 
> 




More information about the csTeX mailing list