M.guravage wrote:

Hi,

Something has changed in the past couple months that causes my stretched
title code to fail with the message:

 ! You can't use `\end' in internal vertical mode.
 <recently read> \normalend

I've attatched a small example. Has anyone a suggestion how I can adapt my
code accordingly?
in a coming release i will support a more transparent stretching mechanism (using a font handling) so that such hacks are no longer needed

anyhow, the problem with your 'plug-in' is that it acts on a complex stream of tokens, run this:

\def\CapStretchAmount
 {0.3em}

\def\CapStretch
 {\let\stretchedspaceamount\CapStretchAmount
  \stretchednormalcase}

\def\stretchedbox#1%
 {\framed
    [frame=off,
     offset=.5em,
     align=middle,
     width=broad]
    {\showargument{#1}%
     \sc\CapStretch{#1}}}

\setuphead [subject][rawtextcommand=\stretchedbox]

\starttext
\subject{feeling stretched feeling stretched feeling stretched feeling stretched}
   \processfile{tufte}
   \subject{feeling stretched}
   \processfile{tufte}
\stoptext

you will see that #1 is more than text, and i'm even surprised that it worked in previous versions.

What you actually need is a deep hook:

\def\c!deeptextcommand  {deeptextcommand}
\def\c!deepnumbercommand{deepnumbercommand}

\def\doplaceheadtext#1#2#3#4%
 {\beginheadplacement{#1}%
  \ifemptyhead % = needed
    \setbox0=\ifvertical\vbox\else\hbox\fi to \zeropoint
      {\headnumbercontentfalse
       \resetsystemmode\v!sectionnumber
       #2}%
    \makestrutofbox0
  \else % = needed
    \setbox0=\ifvertical\vbox\else\hbox\fi % \vhbox
      {\headnumbercontentfalse
       \resetsystemmode\v!sectionnumber
       % less interfering
       \ifcase\headtimingmode\or#2\fi
       % outerside font determines distance
       \dosetfontattribute{\??ko#1}\c!style
       % but we don't want color to influence user commands
       % todo: get the if-else out of it
       \getvalue{\??ko#1\c!command}
         {} % no number
         {\dostartattributes{\??ko#1}\c!style\c!color\empty
            \dostartattributes{\??ko#1}\c!textstyle\c!textcolor\empty
              \dontconvertfont
              \ifdisplaysectionhead
                \setupinterlinespace
              \else
                \setupspacing
              \fi
              % \ifcase\headtimingmode#2\fi % can introduce cr
              \getvalue{\??ko#1\c!commandbefore}%
              \placeheadmargintexts{#1}% binnen #3?
              \ifdisplaysectionhead
\getvalue{\??ko#1\c!textcommand}% struts can be nilled with \setnostrut
                  {\setstrut
                   \begstrut
                   \ifcase\headtimingmode\hbox{#2}\fi
\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}
                   \endstrut}% \hbox prevents break
                \xdef\localheadheight    {\the\strutht}%
                \xdef\localheaddepth     {\the\strutdp}%
                \xdef\localheadlineheight{\the\lineheight}%
                % == \globallet\localheaddepth\strutdepth
              \else
                \ifcase\headtimingmode#2\fi
                \getvalue{\??ko#1\c!textcommand}%
{\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#3}}%
              \fi
              \getvalue{\??ko#1\c!commandafter}%
              \ifdisplaysectionhead\endgraf\fi
            \dostopattributes
          \dostopattributes}}%
  \fi
  \endheadplacement{#1}{#4}}

\def\doplaceheadnumbertext#1#2#3#4#5% maybe move modes outside box
 {\beginheadplacement{#1}%
  \ifemptyhead % = needed
    \setbox0=\ifvertical\vbox\else\hbox\fi to \zeropoint
      {\doiftextelse{#3}
         {\setsystemmode  \v!sectionnumber\headnumbercontenttrue }
         {\resetsystemmode\v!sectionnumber\headnumbercontentfalse}%
       #2}%
    \makestrutofbox0
  \else % = needed
    \setbox0=\ifvertical\vbox\else\hbox\fi % \vhbox
      {\doiftextelse{#3}
         {\setsystemmode  \v!sectionnumber\headnumbercontenttrue }
         {\resetsystemmode\v!sectionnumber\headnumbercontentfalse}%
       % less interfering
       \ifcase\headtimingmode\or#2\fi
       % outerside font determines distance
       \dosetfontattribute{\??ko#1}\c!style
       % but we don't want color to influence user commands
       \getvalue{\??ko#1\c!command}%
         {\dostartattributes{\??ko#1}\c!style\c!color\empty
            \dostartattributes{\??ko#1}\c!numberstyle\c!numbercolor\empty
% \getvalue{\??ko#1\c!commandbefore}% strange, why here? moved 21/11/2005
              \placeheadmargintexts{#1}% binnen #3?
              \ifdisplaysectionhead
                % can be nilled with \setnostrut
                \getvalue{\??ko#1\c!numbercommand}%
                  {\setstrut
                   \begstrut
\executeifdefined{\??ko#1\c!deepnumbercommand}\firstofoneargument{#3}%
                   \endstrut}%
              \else
                \getvalue{\??ko#1\c!numbercommand}%
{\executeifdefined{\??ko#1\c!deepnumbercommand}\firstofoneargument{#3}}%
              \fi
            \dostopattributes
          \dostopattributes}
         {\dostartattributes{\??ko#1}\c!style\c!color\empty
            \dostartattributes{\??ko#1}\c!textstyle\c!textcolor\empty
              \dontconvertfont
              \ifdisplaysectionhead
                \setupinterlinespace
              \else
                \setupspacing
              \fi
              % \ifcase\headtimingmode#2\fi % can introduce cr
              \getvalue{\??ko#1\c!commandbefore}% makes more sense here
              \placeheadmargintexts{#1}% binnen #3?
              \ifdisplaysectionhead
\getvalue{\??ko#1\c!textcommand}% struts can be nilled with \setnostrut
                  {\setstrut
                   \begstrut
                   \ifcase\headtimingmode\hbox{#2}\fi
\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#4}%
                   \endstrut}% \hbox prevents break
                \xdef\localheadheight    {\the\strutht}%
                \xdef\localheaddepth     {\the\strutdp}%
                \xdef\localheadlineheight{\the\lineheight}%
                % == \globallet\localheaddepth\strutdepth
              \else
                \ifcase\headtimingmode#2\fi % inside textcommand ?
                \getvalue{\??ko#1\c!textcommand}%
{\executeifdefined{\??ko#1\c!deeptextcommand}\firstofoneargument{#4}}%
              \fi
              \getvalue{\??ko#1\c!commandafter}%
              \ifdisplaysectionhead\endgraf\fi
           \dostopattributes
         \dostopattributes}}%
  \fi
  \endheadplacement{#1}{#5}}

\protect

\def\CapStretchAmount
 {0.3em}

\def\CapStretch
 {\let\stretchedspaceamount\CapStretchAmount
  \stretchednormalcase}

\def\stretchedbox#1%
 {\framed
    [frame=off,
     offset=.5em,
     align=middle,
     width=broad]
    {%\showargument{#1}%
     \sc\CapStretch{#1}}}

\setuphead [subject][deeptextcommand=\stretchedbox]

\starttext
\subject{feeling stretched feeling stretched feeling stretched feeling stretched}
   \processfile{tufte}
   \subject{feeling stretched}
   \processfile{tufte}
\stoptext



_______________________________________________
ntg-context mailing list
ntg-context@ntg.nl
http://www.ntg.nl/mailman/listinfo/ntg-context

Reply via email to