%D \module %D [ file=spac-ali, %D version=2009.10.16, % 1997.03.31, was core-spa.tex %D title=\CONTEXT\ Spacing Macros, %D subtitle=Alignments, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \writestatus{loading}{ConTeXt Spacing Macros / Alignments} \unprotect % We will not use bodydir and pagedir so we disable them. That way we get % normal hyperlink support. \let\@@bodydir\normalbodydir \let\@@pagedir\normalpagedir \unexpanded\def\bodydir{\afterassignment\do@@bodydir\@@bodydir} \let\normalbodydir\bodydir \unexpanded\def\pagedir{\afterassignment\do@@pagedir\@@pagedir} \let\normalpagedir\pagedir \def\do@@bodydir{\@@bodydir TLT\relax} \def\do@@pagedir{\@@pagedir TLT\relax} % This will become a more advanced layout controller soon: \newconditional\layoutlefttoright \settrue\layoutlefttoright \newconditional\displaylefttoright \settrue\displaylefttoright \newconditional\inlinelefttoright \settrue\inlinelefttoright \unexpanded\def\lefttoright {\ifvmode \settrue\displaylefttoright \settrue\inlinelefttoright \textdir TLT\relax \pardir TLT\relax \else \settrue\inlinelefttoright \textdir TLT\relax \fi} \unexpanded\def\righttoleft {\ifvmode \setfalse\displaylefttoright \setfalse\inlinelefttoright \textdir TRT\relax \pardir TRT\relax \else \textdir TRT\relax \setfalse\inlinelefttoright \fi} \def\currentdirectionparameters {\ifconditional\inlinelefttoright \else idir="r2l", \fi \ifconditional\displaylefttoright \else ddir="r2l", \fi} \def\dodefinehbox[#1][#2]% {\setvalue{hbox#1}##1{\hbox to #2{\begstrut##1\endstrut\hss}}} \unexpanded\def\definehbox {\dodoubleargument\dodefinehbox} \def\iobox#1#2#3#% here #3# is not really needed {\vbox\bgroup % we want to return a vbox like the others \hbox\bgroup% we need to pack the signal with the box \signalrightpage \dowithnextboxcontent {\let\\=\endgraf\forgetall\doifrightpageelse#1#2} {\box\nextbox\egroup\egroup} \vbox#3} \def\obox{\iobox\raggedleft \raggedright} % outerbox \def\ibox{\iobox\raggedright\raggedleft} % innerbox \def\dosetraggedvbox#1% {\let\raggedbox\vbox \processfirstactioninset [#1] [ \v!left=>\let\raggedbox\lbox, \v!right=>\let\raggedbox\rbox, \v!middle=>\let\raggedbox\cbox, \v!inner=>\let\raggedbox\ibox, \v!outer=>\let\raggedbox\obox, \v!flushleft=>\let\raggedbox\rbox, \v!flushright=>\let\raggedbox\lbox, \v!center=>\let\raggedbox\cbox, \v!no=>\def\raggedbox{\vbox\bgroup\raggedright\let\next=}]} \def\dosetraggedhbox#1% {\let\raggedbox\hbox \processaction % slow [#1] [ \v!left=>\def\raggedbox{\doalignedline\v!left }, \v!right=>\def\raggedbox{\doalignedline\v!right }, \v!middle=>\def\raggedbox{\doalignedline\v!middle}, \v!inner=>\def\raggedbox{\doalignedline\v!inner }, \v!outer=>\def\raggedbox{\doalignedline\v!outer }, \v!flushleft=>\def\raggedbox{\doalignedline\v!right }, \v!flushright=>\def\raggedbox{\doalignedline\v!left }, \v!center=>\def\raggedbox{\doalignedline\v!middle}]} \def\dosetraggedcommand#1% {\normalexpanded{\noexpand\dodosetraggedcommand{#1}}} \newtoks\everyraggedcommand \def\raggedcommand{\the\everyraggedcommand} \def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that! {\everyraggedcommand\emptytoks \let\raggedtopcommand\empty \let\raggedbottomcommand\empty \chardef\raggedoneliner\zerocount \doifsomething{#1} {\doifinsetelse\v!broad{#1}\!!doneatrue\!!doneafalse \doifinsetelse\v!wide {#1}\!!donebtrue\!!donebfalse \!!donectrue \rawprocesscommalist[#1]\dododosetraggedcommand}} \def\dododosetraggedcommand#1% {\executeifdefined{\@@ragged@@command\string#1}\relax} \def\@@ragged@@command{@@raggedcommand} \setvalue{\@@ragged@@command\v!hanging }{\appendtoks\enableprotruding \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nothanging }{\appendtoks\disableprotruding \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!hz }{\appendtoks\enableadjusting \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nohz }{\appendtoks\disableadjusting \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!spacing }{\appendtoks\enablespacehandling \enablekernhandling \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nospacing }{\appendtoks\disablespacehandling \disablekernhandling \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!hyphenated }{\appendtoks\dohyphens \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!nothyphenated}{\appendtoks\nohyphens \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!tolerant }{\appendtoks\tolerance3000\relax \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!verytolerant}{\appendtoks\tolerance4500\relax \to\everyraggedcommand} \setvalue{\@@ragged@@command\v!stretch }{\appendtoks\emergencystretch\bodyfontsize\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!left}% {\if!!donea \appendtoks\veryraggedleft\to\everyraggedcommand \else \appendtoks\raggedleft \to\everyraggedcommand \fi \!!donecfalse} \setvalue{\@@ragged@@command\v!right}% {\if!!donea \appendtoks\veryraggedright\to\everyraggedcommand \else \appendtoks\raggedright \to\everyraggedcommand \fi \!!donecfalse} \setvalue{\@@ragged@@command\v!middle}% {\if!!donec \if!!doneb \appendtoks\raggedwidecenter\to\everyraggedcommand \else\if!!donea \appendtoks\veryraggedcenter\to\everyraggedcommand \else \appendtoks\raggedcenter \to\everyraggedcommand \fi\fi \!!donecfalse \else \let\raggedbottomcommand\vfilll % bonus, pretty strong \let\raggedtopcommand \vfilll % used with \framed for \fi} % instance in tables \setvalue{\@@ragged@@command\v!flushleft }{\getvalue{\@@ragged@@command\v!right }} \setvalue{\@@ragged@@command\v!flushright}{\getvalue{\@@ragged@@command\v!left }} \setvalue{\@@ragged@@command\v!center }{\getvalue{\@@ragged@@command\v!middle}} \setvalue{\@@ragged@@command\v!high}% {\let\raggedbottomcommand\vfilll} % and since we lack a \setvalue{\@@ragged@@command\v!low}% {\let\raggedtopcommand\vfilll} % proper keyword, but \setvalue{\@@ragged@@command\v!lohi}% {\let\raggedbottomcommand\vfilll % we do support the \let\raggedtopcommand\vfilll} % ugly laho (lohi) \setvalue{\@@ragged@@command\v!no}% {\appendtoks\raggedright\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!yes}% {\appendtoks\notragged\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!normal}% {\appendtoks\notragged\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!inner}% not yet perfect {\signalrightpage % may interfere \doifrightpageelse {\getvalue{\@@ragged@@command\v!right}} {\getvalue{\@@ragged@@command\v!left}}} \setvalue{\@@ragged@@command\v!outer}% not yet perfect {\signalrightpage % may interfere \doifrightpageelse {\getvalue{\@@ragged@@command\v!left}} {\getvalue{\@@ragged@@command\v!right}}} \setvalue{\@@ragged@@command\v!lesshyphenation}% {\appendtoks\lesshyphens\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!morehyphenation}% {\appendtoks\morehyphens\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!lefttoright}{\appendtoks\lefttoright\to\everyraggedcommand} \setvalue{\@@ragged@@command\v!righttoleft}{\appendtoks\righttoleft\to\everyraggedcommand} \setvalue{\@@ragged@@command l2r}{\appendtoks\lefttoright\to\everyraggedcommand} \setvalue{\@@ragged@@command r2l}{\appendtoks\righttoleft\to\everyraggedcommand} % compare: % % \framed[width=4cm,align=no] {\hfil xxx} % \framed[width=4cm,align=disable]{\hfil xxx} \setvalue{\@@ragged@@command\v!disable}% for one liners {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand} \chardef\raggedoneliner\zerocount \setvalue{\@@ragged@@command\v!line}% {\chardef\raggedoneliner\plusone} % More alignments: % \hyphenpenalty = ( 2.5 * \hsize ) / \raggedness % \tolerance >= 1500 % was 200 % \raggedness = 2 .. 6\bodyfontsize \chardef\raggedstatus=0 % normal left center right \def\leftraggedness {2\bodyfontsize} \def\rightraggedness {2\bodyfontsize} \def\middleraggedness {6\bodyfontsize} \def\middleraggedness {.5\hsize} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} % oeps, hsize can be 0pt in which case we get a strange division \def\middleraggedness {\ifdim\hsize=\zeropoint6\bodyfontsize\else.5\hsize\fi} % was: 6\bodyfontsize, fails on: \placefigure{x $x=x$ x}{} %D More hyphenation control, will be combined with align %D setup. \def\nohyphens {\ifx\dohyphens\relax \edef\dohyphens {\hyphenpenalty\the\hyphenpenalty \exhyphenpenalty\the\exhyphenpenalty\relax}% \fi \hyphenpenalty\plustenthousand \exhyphenpenalty\plustenthousand} \let\dohyphens\relax %D To prevent unwanted side effects, we also have to check %D for hyphens here: \newskip\@@raggedskipa \newskip\@@raggedskipb \def\setraggedness#1% {\ifnum\tolerance<1500\relax % small values have \tolerance1500\relax % unwanted side effects \fi \ifx\dohyphens\relax % this code will be reconsidered / kind of fuzzy (and old) \@@raggedskipa 2.5\hsize \@@raggedskipb #1\relax \divide\@@raggedskipa \@@raggedskipb \hyphenpenalty\@@raggedskipa \fi} \let\updateraggedskips\relax \def\setraggedskips#1#2#3#4#5#6#7% never change this name {\def\updateraggedskips{\dosetraggedskips{#1}{#2}{#3}{#4}{#5}{#6}{#7}}% \updateraggedskips} \def\dosetraggedskips#1#2#3#4#5#6#7% {\chardef \raggedstatus#1\relax \leftskip 1\leftskip \!!plus#2\relax % zie: Tex By Topic 8.1.3 \rightskip 1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3 \spaceskip #4\relax \xspaceskip #5\relax \parfillskip\zeropoint\!!plus#6\relax \parindent #7\relax} % \def\notragged% % {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}} % older (context) names: \let\spaceamount \interwordspace \let\emspaceamount\emwidth % tracing: \def\doshowpardata#1% {\ifx#1\relax\else \hbox{\string#1: \the#1}\endgraf \expandafter\doshowpardata \fi} \def\showpardata {\edef\thepardata {\hbox{font: \fontname\font}\endgraf \doshowpardata \interwordspace \interwordstretch \interwordshrink \emwidth \exheight \extraspace \hsize \vsize \leftskip \rightskip \spaceskip \xspaceskip \parindent \parfillskip \hyphenpenalty \exhyphenpenalty \displaywidowpenalty \widowpenalty \clubpenalty \brokenpenalty \doublehyphendemerits \finalhyphendemerits \adjdemerits \relax}% \begingroup \dontshowcomposition \inleftmargin{\vsmash {\switchtobodyfont[7pt,tt]% \framed[\c!align=\v!right]{\thepardata}}}% \endgroup} \unexpanded\def\startshowpardata {\begingroup \showcomposition \showstruts\tracepositionstrue \tracingparagraphs\maxdimen \appendtoksonce\showpardata\let\showpardata\relax\to\everypar} \unexpanded\def\stopshowpardata {\endgraf \endgroup} % defaults \def\raggedfillamount {1fil} \def\raggedhalffillamount{.5fil} \def\raggedspaceamount {\interwordspace} % {.3333em} \def\raggedxspaceamount {.5em} \unexpanded\def\notragged {\chardef\raggedstatus\zerocount \leftskip 1\leftskip \rightskip 1\rightskip \spaceskip \zeropoint \xspaceskip \zeropoint \parfillskip\zeropoint\!!plus\raggedfillamount\relax \let\updateraggedskips\relax} % new \let\forgetragged\notragged \unexpanded\def\raggedleft {\setraggedness\leftraggedness \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} \unexpanded\def\raggedcenter {\setraggedness\middleraggedness \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} %D We used to have: %D %D \starttyping %D \def\raggedright %D {\setraggedness\rightraggedness %D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}} %D \stoptyping %D %D However, the next alternative, suggested by Taco, is better. \unexpanded\def\raggedright {\setraggedness\rightraggedness \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount \raggedxspaceamount\raggedfillamount\parindent} \unexpanded\def\veryraggedleft {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} %D When we want the last line to have a natural width: %D %D \starttyping %D \def\veryraggedleft% %D {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{-1fil}} %D \stoptyping %D %D but this one is not accepted by the macros. \unexpanded\def\veryraggedcenter {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount \raggedxspaceamount\zeropoint\zeropoint} \unexpanded\def\veryraggedright {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount \raggedxspaceamount\zeropoint\parindent} \unexpanded\def\ttraggedright {\tttf \setraggedskips3\zeropoint\rightraggedness \zeropoint\zeropoint\zeropoint\parindent} % \ctxparindent %D A bonus one: \unexpanded\def\raggedwidecenter {\setraggedness\middleraggedness \setraggedskips2\raggedhalffillamount\raggedhalffillamount \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint} \newif\if@@asragged \@@asraggedtrue % old method % todo % % \setuplayout[grid=yes,lines=44] \showgrid % \starttext % test \vfill test \endgraf \strut \endgraf \vskip-\lineheight \removedepth \pagina test % \stoptext % \setupalign[reset,new,right,old] \def\@@align@@rl{\if!!donea\veryraggedleft \else\raggedleft \fi} \def\@@align@@rr{\if!!donea\veryraggedright \else\raggedright \fi} \def\@@align@@rc{\if!!donea\veryraggedcenter\else\raggedcenter\fi} \setvalue{@@ngila@@\v!broad }{\!!doneatrue} \setvalue{@@ngila@@\v!wide }{\!!donebtrue} \def\installalign#1#2{\setvalue{@@align@@#1}{#2}} % can be used for overloads \installalign \v!new {\@@asraggedfalse} \installalign \v!old {\@@asraggedtrue} \installalign \empty {} \installalign \v!line {\baselinebottom} \installalign \v!bottom {\raggedbottom} \installalign \v!height {\normalbottom} \installalign \v!width {\notragged} \installalign \v!normal {\notragged} \installalign \v!yes {\notragged} \installalign \v!no {\raggedright} \installalign \v!inner {\if@@asragged \setraggedparagraphmode\@@align@@rl\@@align@@rr \else \setraggedparagraphmode\@@align@@rr\@@align@@rl \fi} \installalign \v!outer {\if@@asragged \setraggedparagraphmode\@@align@@rr\@@align@@rl \else \setraggedparagraphmode\@@align@@rl\@@align@@rr \fi} \installalign \v!left {\if@@asragged\@@align@@rl\else\@@align@@rr\fi} \installalign \v!right {\if@@asragged\@@align@@rr\else\@@align@@rl\fi} \installalign \v!middle {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} \installalign \v!flushleft {\if!!donea\veryraggedright \else\raggedright\fi} \installalign \v!flushright {\if!!donea\veryraggedleft \else\raggedleft \fi} \installalign \v!flushouter {\setraggedparagraphmode\raggedleft\raggedright} \installalign \v!flushinner {\setraggedparagraphmode\raggedright\raggedleft} \installalign \v!center {\if!!doneb\raggedwidecenter\else\@@align@@rc\fi} \installalign \v!hanging {\enableprotruding} \installalign \v!nothanging {\disableprotruding} \installalign \v!hz {\enableadjusting} \installalign \v!nohz {\disableadjusting} \installalign \v!spacing {\enablespacehandling \enablekernhandling} \installalign \v!nospacing {\disablespacehandling\disablekernhandling} \installalign \v!hyphenated {\dohyphens} \installalign \v!nothyphenated {\nohyphens} \installalign \v!new {\@@asraggedfalse} % so new will give you consistency \installalign \v!reset {\notragged\normalbottom} \installalign \v!tolerant {\tolerance3000 \relax} \installalign \v!verytolerant {\tolerance4500 \relax} \installalign \v!stretch {\emergencystretch\bodyfontsize} \installalign \v!righttoleft {\lefttoright} \installalign \v!lefttoright {\righttoleft} \installalign {l2r} {\lefttoright} \installalign {r2l} {\righttoleft} \newcount\hyphenminoffset \ifx\sethyphenationvariables\undefined \let\sethyphenationvariables\relax \fi \unexpanded\def\lesshyphens {\advance\hyphenminoffset\plusone \sethyphenationvariables} \unexpanded\def\morehyphens {\ifcase\hyphenminoffset \else \advance\hyphenminoffset\minusone \fi \sethyphenationvariables} \installalign \v!lesshyphenation {\lesshyphens} \installalign \v!morehyphenation {\morehyphens} \def\dodosetupalign#1{\csname @@align@@#1\endcsname} \def\dodosetupngila#1{\csname @@ngila@@#1\endcsname} \unexpanded\def\setupalign {\dosingleargument\dosetupalign} \def\dosetupalign[#1]% can be made faster by checking for defined #1 {\!!doneafalse \!!donebfalse \processcommacommand[#1]\dodosetupngila \processcommacommand[#1]\dodosetupalign} % \setupalign[flushleft] \input ward \par % lijnlinks % \setupalign[right] \input ward \par % \setupalign[flushright] \input ward \par % lijnrechts % \setupalign[left] \input ward \par % \setupalign[middle] \input ward \par % centreer % \setupalign[center] \input ward \par \unexpanded\def\startalignment {\bgroup \setupalign} \unexpanded\def\stopalignment {\par \egroup} \chardef\alignstrutmode=1 % see later for the real definition, which in the simple case is: \newtoks \everyleftofalignedline \newtoks \everyrightofalignedline \def\shiftalignedline#1#2#3#4% left, right, inner, outer {\rightorleftpageaction {\everyleftofalignedline {\hskip\dimexpr#1+#3\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#4\relax}} {\everyleftofalignedline {\hskip\dimexpr#1+#4\relax}% \everyrightofalignedline{\hskip\dimexpr#2+#3\relax}}} \def\doalignline#1#2% \\ == newline {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize % new \def\\{\egroup\par\doalignline{#1}{#2}\bgroup}% \dowithnextbox {\hbox to \localhsize {\ifcase\alignstrutmode\or\strut\fi \the\everyleftofalignedline #1\unhbox\nextbox#2\relax \the\everyrightofalignedline}% \endgroup} \hbox} % plain commands \ifdefined\line \else \def\line {\hbox to\hsize} \fi \ifdefined\leftline \else \def\leftline #1{\line{#1\hss}} \fi \ifdefined\rightline \else \def\rightline #1{\line{\hss#1}} \fi \ifdefined\centerline \else \def\centerline#1{\line{\hss#1\hss}} \fi % directe commando's \def\leftaligned {\doalignline \relax \hss } \def\midaligned {\doalignline \hss \hss } \def\rightaligned{\doalignline \hss \relax} \let\centeraligned\midaligned \def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}} % to be translated % indirecte commando's \letvalue{\s!do\v!line\v!left }\leftaligned \letvalue{\s!do\v!line\v!right }\rightaligned \letvalue{\s!do\v!line\v!middle }\midaligned \letvalue{\s!do\v!line\v!flushleft }\rightaligned \letvalue{\s!do\v!line\v!flushright}\leftaligned \letvalue{\s!do\v!line\v!center }\midaligned \def\doalignedline#1{\csname\s!do\v!line#1\endcsname} %D Experimental: \def\doxalignline#1#2#3#4#5#6% {\noindentation % was \noindent \dontleavehmode % added in marrakesch at TUG 2006\begingroup \begingroup \setlocalhsize \def\\{\egroup\par\doxalignline#1#2#3#4#5#6\bgroup}% inefficient \dowithnextbox {%\noindent moved up \hbox to \localhsize {#1\hskip\ifdone#2\else#3\fi#4% \hbox to \localhsize {\the\everyleftofalignedline \ifcase\alignstrutmode\or\strut\fi \ifdone#5\unhbox\nextbox#6\else#6\unhbox\nextbox#5\fi \the\everyrightofalignedline}% \hss}% \endgroup} \hbox} \def\doxcheckline {\signalrightpage\doifrightpageelse\donetrue\donefalse} \setvalue{\s!do\v!line\v!inner }{\doxalignline\doxcheckline++\zeropoint \relax\hss } \setvalue{\s!do\v!line\v!outer }{\doxalignline\doxcheckline++\zeropoint \hss \relax} \setvalue{\s!do\v!line\v!innermargin}{\doxalignline\doxcheckline-+\innermargintotal\relax\hss } \setvalue{\s!do\v!line\v!outermargin}{\doxalignline\doxcheckline+-\outermargintotal\hss \relax} \setvalue{\s!do\v!line\v!inneredge }{\doxalignline\doxcheckline-+\inneredgetotal \relax\hss } \setvalue{\s!do\v!line\v!outeredge }{\doxalignline\doxcheckline+-\outeredgetotal \hss \relax} \setvalue{\s!do\v!line\v!backspace }{\doxalignline\doxcheckline-+\backspace \relax\hss } \setvalue{\s!do\v!line\v!cutspace }{\doxalignline\doxcheckline+-\cutspace \hss \relax} \setvalue{\s!do\v!line\v!leftmargin }{\doxalignline\donefalse --\leftmargintotal \hss \relax} \setvalue{\s!do\v!line\v!rightmargin}{\doxalignline\donefalse ++\rightmargintotal\relax\hss } \setvalue{\s!do\v!line\v!leftedge }{\doxalignline\donefalse --\leftedgetotal \hss \relax} \setvalue{\s!do\v!line\v!rightedge }{\doxalignline\donefalse ++\rightedgetotal \relax\hss } % ! ! ! beware, redefining \doalignline gives the wrong results ! ! ! % % \def\doalignline{\doxalignline\donefalse++\zeropoint} %D Better: \def\doalignedline#1{\csname\s!do\v!line#1\endcsname} \def\alignedline#1#2% setting default {\csname\s!do\v!line\ifcsname\s!do\v!line#1\endcsname#1\else#2\fi\endcsname} % \def\woordrechts % {\groupedcommand{\hfill\hbox}{\parfillskip\zeropoint}} % beware: \wordright{whatever\kern-\rightskip} should work! % so, no funny boxing here \def\dowordright[#1]% {% don't change \groupedcommand {\removeunwantedspaces \hfill \allowbreak % changed back from \hskip\zeropoint \strut \hfill \quad % decent spacing \hbox} {\doifelse{#1}\v!right{\kern-\rightskip}{\doifsomething{#1}{\kern-#1}}% \parfillskip\zeropoint \finalhyphendemerits\zerocount % yes or no (see hyhenation/specialcases-001.tex) \par}} \unexpanded\def\wordright {\dosingleempty\dowordright} % \dorecurse{5}{something } \wordright{--someone} \endgraf % \dorecurse{6}{something } \wordright{--someone} \endgraf % \dorecurse{7}{something } \wordright{--someone} \endgraf % % \dorecurse{5}{something } \wordright{--someone else entirely} \endgraf % \dorecurse{6}{something } \wordright{--someone else entirely} \endgraf % \dorecurse{7}{something } \wordright{--someone else entirely} \endgraf % % \wordright[\rightskip]{whatever} % \simplealignedbox{2cm}{right}{x} \setvalue{\s!simple\c!align\v!right }#1#2{\hbox to #1{#2\hss}} \setvalue{\s!simple\c!align\v!left }#1#2{\hbox to #1{\hss#2}} \setvalue{\s!simple\c!align\v!flushright }#1#2{\hbox to #1{\hss#2}} \setvalue{\s!simple\c!align\v!flushleft }#1#2{\hbox to #1{#2\hss}} \setvalue{\s!simple\c!align\v!middle }#1#2{\hbox to #1{\hss#2\hss}} \unexpanded\def\simplealignedbox#1{\executeifdefined{\s!simple\c!align#1}{\getvalue{\s!simple\c!align\v!right}}} \protect \endinput