starttexdefinition error in standalone, works in TL2013
The following code processes cleanly under TL2013 and fails with ConTeXt ver: 2014.02.14 17:07 MKIV beta fmt: 2014.2.16 int: english/english. I suspect a regression, but I am also open to being told that I am doing things incorrectly. I also notice that it fails (even under TL2013) if a space is inserted after [#SETUP] in the doTrans intro. I thought that spaces should be allowed in \starttexdefinition -- is this only in the body and not the parameter description? % macros=mkvi \showframe \let\EndTranslation\relax \starttexdefinition Trans \dosingleempty\doTrans \stoptexdefinition % The following should work, but fails with current beta \starttexdefinition doTrans [#SETUP]#TRANSLATION\EndTranslation \language[en] \doifsomething{#1}{\getparameters[TR][setup=,#SETUP]\TRsetup} \noindentation\blank[halfline] (\,\ignorespaces#TRANSLATION\removeunwantedspaces\,) \stoptexdefinition \starttexdefinition Translation \dosingleempty\doTranslation \stoptexdefinition % This version works with both Texlive and current standalone beta \def\doTranslation[#SETUP]#TRANSLATION\EndTranslation% {\language[en]% \doifsomething{#SETUP}% {\getparameters[TR][setup=,#SETUP]\TRsetup}% \noindentation\blank[halfline]% (\,\ignorespaces#TRANSLATION\removeunwantedspaces\,)% } \starttext Translation using \tex{def}{\tex{doTranslation}} works both with TL2013 and current beta. \Translation[language=en] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \EndTranslation \blank Translation using \tex{starttexdef doTrans} fails with current beta. \Trans[language=en] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \EndTranslation \stoptext -- Rik Kabel
On 2014-02-26 23:08, Rik Kabel wrote:
The following code processes cleanly under TL2013 and fails with ConTeXt ver: 2014.02.14 17:07 MKIV beta fmt: 2014.2.16 int: english/english. I suspect a regression, but I am also open to being told that I am doing things incorrectly.
-- Rik Kabel
Sorry for the not-so-minimal example with the obvious errors around the setup. Here is a stripped version that shows the problem: % macros=mkvi \let\EndTranslation\relax % The following should work, but fails with current beta \starttexdefinition Trans #TRANSLATION\EndTranslation #TRANSLATION \stoptexdefinition % This version works with both TexLive and current standalone beta \def\Translation#TRANSLATION\EndTranslation% {#TRANSLATION% } \starttext Translation using \tex{def}{\tex{doTranslation}} works both with TL2013 and current beta. \Translation It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \EndTranslation \blank Translation using \tex{starttexdef doTrans} fails with current beta. \Trans It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \EndTranslation \stoptext -- Rik
Am 27.02.2014 um 05:08 schrieb Rik Kabel
The following code processes cleanly under TL2013 and fails with ConTeXt ver: 2014.02.14 17:07 MKIV beta fmt: 2014.2.16 int: english/english. I suspect a regression, but I am also open to being told that I am doing things incorrectly.
The \starttexdefinition was extended after the texlive release to support keywords like global or expanded and has therefore changed since then. The reason why it fails is that context passes the argument to Lua where they are parsed and at this point macros like your \EndTranslation are expanded. Even though this can be fixed I think it’s better to use the normal \def command when you want to create delimited commands.
I also notice that it fails (even under TL2013) if a space is inserted after [#SETUP] in the doTrans intro. I thought that spaces should be allowed in \starttexdefinition -- is this only in the body and not the parameter description?
No, spaces between arguments aren’t ignored but no spaces are added at the end of each line in the replacement text. \starttexdefinition Test #1 #2 “#2” “#1” \stoptexdefinition \starttext \Test ab cd \stoptext BTW: It’s better to follow contexts rules and use start/stop for environments, this way you can make use of the buffer mechanism to store text. \unexpanded\def\startTranslation {\begingroup \dosingleempty\dostartTranslation} \def\dostartTranslation[#1]% {\iffirstargument \getrawparameters[Translation][setups=,language=en,#1]% \fi \grabbufferdata[Translation][startTranslation][stopTranslation]} \def\stopTranslation {\language[\Translationlanguage]% \Translationsetups (\,\getbufferdata[Translation]\removeunwantedspaces\,)% \endgroup} \starttext \startTranslation[language=nl] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \stopTranslation \stoptext Wolfgang
On 2014-03-01 07:32, Wolfgang Schuster wrote:
Am 27.02.2014 um 05:08 schrieb Rik Kabel
:
{useful information on TL2013 and starttexdefinition skipped}
BTW: It’s better to follow contexts rules and use start/stop for environments, this way you can make use of the buffer mechanism to store text.
\unexpanded\def\startTranslation {\begingroup \dosingleempty\dostartTranslation}
\def\dostartTranslation[#1]% {\iffirstargument \getrawparameters[Translation][setups=,language=en,#1]% \fi \grabbufferdata[Translation][startTranslation][stopTranslation]}
\def\stopTranslation {\language[\Translationlanguage]% \Translationsetups (\,\getbufferdata[Translation]\removeunwantedspaces\,)% \endgroup}
\starttext
\startTranslation[language=nl] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \stopTranslation
\stoptext
Thank you for the excellent example. The only problem I see is that it fails if no optional argument is present (in which case the keyval settings \TranslationXXX never get defined). This is easily remedied by removing the \iffirstargument and \fi wrapping the \getrawparameters. -- Rik
On 2014-03-01 07:32, Wolfgang Schuster wrote:
\unexpanded\def\startTranslation {\begingroup \dosingleempty\dostartTranslation}
\def\dostartTranslation[#1]% {\iffirstargument \getrawparameters[Translation][setups=,language=en,#1]% \fi \grabbufferdata[Translation][startTranslation][stopTranslation]}
\def\stopTranslation {\language[\Translationlanguage]% \Translationsetups (\,\getbufferdata[Translation]\removeunwantedspaces\,)% \endgroup}
\starttext
\startTranslation[language=nl] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things. \stopTranslation
\stoptext
Wolfgang
Wolfgang (and list), The above code works fine with simple texts, but is not movable. Adding a footnote, as in the following, to the text section shows that: \starttext \startTranslation[language=en] It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things.% \footnote{% \startTranslation[language=la] Tardi ingeni est rivulos consectari, fontes rerum non videre. \stopTranslation% } \stopTranslation \stoptext or even by: \starttext It betrays a slow-witted mentality to pursue the streams, but not to see the sources of things.% \footnote{% \startTranslation[language=la] Tardi ingeni est rivulos consectari, fontes rerum non videre. \stopTranslation% } \stoptext In LaTeX, this might be dealt with by a combination robust command definitions and \protected. When I wrote an endnotes routine in LaTeX, I used those and wrote the notes to a file which was then read back in at the appropriate time, but that does not help with pagenotes. I imagine that at the time the footnote is processed the Translationsetups and Translationlanguage macros are no longer defined, and I have no idea how one would reference the buffer contents, although it does look like they have stable names in the log file. Can this be made movable? Also, am I correct that the \iffirstargument test in the definition of dostarttranslation is redundant? My understanding is that \dosingleempty assures the presence of [#1]. -- Rik
participants (3)
-
Rik
-
Rik Kabel
-
Wolfgang Schuster