When a function is called, I would like to remove any leading space. Then the function can control the spacing. If I don't remove spaces, it then makes a difference whether or not I have a space before the function is called. I would like the output of the following two lines to be equal: This is a \MyFunction[1] test. This is a\MyFunction[1] test. However, they are not because the first line has a space before the function call. \def\MyFunction{\dosingleempty\doMyFunction} \def\doMyFunction[#1]{% \processaction[#1]% [1=>\medspace dog ,% 2=>\medspace cat ,% default=>\ldots]% } \starttext Test1: This is a\MyFunction[1] test. Test2: This is a \MyFunction[1] test. Test3: This is a \MyFunction test. Test4: This is a\MyFunction test. \stoptext Is there a way to do this and not cause any side effects? Thanks, Bart
Am 05.02.2009 um 21:26 schrieb Bart C. Wise:
When a function is called, I would like to remove any leading space. Then the function can control the spacing. If I don't remove spaces, it then makes a difference whether or not I have a space before the function is called.
Is there a way to do this and not cause any side effects?
You can use \removeunwantedpsaces to remove preceding spaces before your command and \ignorespaces to gobble spaces after your command. A faster version of your macro is: \def\MyFunction {\dosingleempty\doMyFunction} \def\doMyFunction[#1]% {\removeunwantedspaces\executeifdefined{myfunction:#1} {\getvalue{myfunction:default}}} \setvalue{myfunction:1}{\medspace dog } \setvalue{myfunction:2}{\medspace cat } \setvalue{myfunction:default}{\ldots} Wolfgang
On Thursday 05 February 2009 01:36:16 pm Wolfgang Schuster wrote:
Am 05.02.2009 um 21:26 schrieb Bart C. Wise:
When a function is called, I would like to remove any leading space. Then the function can control the spacing. If I don't remove spaces, it then makes a difference whether or not I have a space before the function is called.
Is there a way to do this and not cause any side effects?
You can use \removeunwantedpsaces to remove preceding spaces before your command and \ignorespaces to gobble spaces after your command.
A faster version of your macro is:
\def\MyFunction {\dosingleempty\doMyFunction}
\def\doMyFunction[#1]% {\removeunwantedspaces\executeifdefined{myfunction:#1} {\getvalue{myfunction:default}}}
\setvalue{myfunction:1}{\medspace dog } \setvalue{myfunction:2}{\medspace cat } \setvalue{myfunction:default}{\ldots}
Thanks Wolfgang for the answer! And thanks for the coding hints, they are always appreciated! Bart
On Thu, 5 Feb 2009, Wolfgang Schuster wrote:
A faster version of your macro is:
\def\MyFunction {\dosingleempty\doMyFunction}
\def\doMyFunction[#1]% {\removeunwantedspaces\executeifdefined{myfunction:#1}{\getvalue{myfunction:default}}}
\setvalue{myfunction:1}{\medspace dog } \setvalue{myfunction:2}{\medspace cat } \setvalue{myfunction:default}{\ldots}
Hello, I'm working now a lot with \setvariable and \getvariable. What are the advantages/disadvantages of set/get-value over set/get-variable? Cheers, Peter -- Contact information: http://pmrb.free.fr/contact/
Am 05.02.2009 um 21:55 schrieb Peter Münster:
On Thu, 5 Feb 2009, Wolfgang Schuster wrote:
A faster version of your macro is:
\def\MyFunction {\dosingleempty\doMyFunction}
\def\doMyFunction[#1]% {\removeunwantedspaces\executeifdefined{myfunction:#1} {\getvalue{myfunction:default}}}
\setvalue{myfunction:1}{\medspace dog } \setvalue{myfunction:2}{\medspace cat } \setvalue{myfunction:default}{\ldots}
Hello,
I'm working now a lot with \setvariable and \getvariable. What are the advantages/disadvantages of set/get-value over set/get-variable?
It's more a style decision, set/getvariable is at a higher level than set/getvalue (just wrapper around \csname ... \endcsname) and they provide a few test macros (doifelsevariable, doifvariable and doifnotvariable). Wolfgang
Am 05.02.2009 um 22:08 schrieb Wolfgang Schuster:
Am 05.02.2009 um 21:55 schrieb Peter Münster:
A faster version of your macro is:
\def\MyFunction {\dosingleempty\doMyFunction}
\def\doMyFunction[#1]% {\removeunwantedspaces\executeifdefined{myfunction:#1} {\getvalue{myfunction:default}}}
\setvalue{myfunction:1}{\medspace dog } \setvalue{myfunction:2}{\medspace cat } \setvalue{myfunction:default}{\ldots}
I'm working now a lot with \setvariable and \getvariable. What are the advantages/disadvantages of set/get-value over set/get-variable?
It's more a style decision, set/getvariable is at a higher level than set/getvalue (just wrapper around \csname ... \endcsname) and they provide a few test macros (doifelsevariable, doifvariable and doifnotvariable).
It matters on which level do you work, is your code for the internals in a module or used by a user. My example above is on module level and no should use \setvalue to add his own option for the \MyFunction command, you could now use low level code and define your own command: \def\defineMyFunction{\dodoubleargument\dodefineMyFunction} \def\dodefineMyFunction[#1][#2]% {\setvalue{myfunction:#1}{#2}} \defineMyFunction[1] [\medspace dog ] \defineMyFunction[2] [\medspace cat ] \defineMyFunction[default][\ldots ] You could have also used \setvariables from begin with the following defintion for the complete macro: \def\MyFunction{\dosingleempty\doMyFunction} \def\doMyFunction[#1]% {\removeunwantedspaces\getvariabledefault{myvariable}{#1}% {\getvariable{myvariable}{default}}} \setvariables % set all values with one command [myvariable] [1={\medspace dog }, 2={\medspace cat }, default={\ldots}] \setvariable{1}{\medspace dog } % This could be used instead \setvariable{2}{\medspace cat } % of \setvariables, each value \setvariable{default}{\ldots} % is set with a separate command Wolfgang
participants (4)
-
Bart C. Wise
-
Bart Wise
-
Peter Münster
-
Wolfgang Schuster