Il 11/12/19 21:25, Wolfgang Schuster ha scritto:
\starttext
\startbuffer This is the text of an index term, that is normally justified, but I'd like the page numbers to be flushed to the right from their second line\par \startalignment[flushright] \ifdim\dimexpr\hsize-\lastlinewidth\relax>2\emwidth \blank[overlay] % simple solution but doesn't indent the numbers on the following lines % \hskip\dimexpr\lastlinewidth+\emwidth\relax \parshape 2 \dimexpr\lastlinewidth+\emwidth\relax \dimexpr\hsize-\lastlinewidth-\emwidth\relax \emwidth \dimexpr\hsize-\emwidth\relax \else \parshape 1 \emwidth \dimexpr\hsize-\emwidth\relax \fi 34, 57, 101-104, 276, 345, 401, 403, 512. \stopalignment \stopbuffer
\dorecurse {10} {\hsize\dimexpr.75\textwidth-#1\emwidth\relax \getbuffer \page}
\stoptext
Thanks Wolfgang. I wrote a better version. I still have a couple of questions. In the lines: \iffirstargument \getparameters[PIT!][test=off,margin=1em,distance=1em,minwidth=1em,#1] \else \getparameters[PIT!][test=off,margin=1em,distance=1em,minwidth=1em,] \fi i would avoid writing the default values twice; i tried something like: \getparameters[PIT!][test=off,margin=1em,distance=1em,minwidth=1em,\iffirstargument#1\fi] but it doesn't work. For the second question, see the first item of page 3: i think the \lastlinewidth fails because there's a page break. From supp-box.lua: implement { name = "lastlinewidth", actions = function() local head = tex.lists.page_head -- list dimensions returns 3 value but we take the first context(head and getdimensions(getlist(find_tail(tonut(tex.lists.page_head)))) or 0) end } I think that's because page_head is reset in the page break. Is there a way to prevent that? Massi -------------------------------------------------------------- \unprotect \def\PlaceIndexTerm{\dosingleempty\doPlaceIndexTerm} \def\doPlaceIndexTerm[#1]#2#3{% \iffirstargument \getparameters[PIT!][test=off,margin=1em,distance=1em,minwidth=1em,#1] \else \getparameters[PIT!][test=off,margin=1em,distance=1em,minwidth=1em,] \fi #2\par \startalignment[flushright,stretch] \ifdim\dimexpr\hsize-\lastlinewidth\relax > \dimexpr\PIT!distance+\PIT!minwidth\relax \blank[overlay] \parshape 2 \dimexpr\lastlinewidth+\PIT!distance\relax \dimexpr\hsize-\lastlinewidth-\PIT!distance\relax \PIT!margin \dimexpr\hsize-\PIT!margin\relax \doif{\PIT!test}{on}{\red} \else \page[no] \parshape 1 \PIT!margin \dimexpr\hsize-\PIT!margin\relax \doif{\PIT!test}{on}{\darkgreen} \fi #3\par \stopalignment} \protect \setupalign[stretch] \starttext \def\Text{This is the text of an index term, that is normally justified, but I'd like the page numbers to be flushed to the right from their second line} \def\Pages{34, 57, 101-104, 276, 345, 401, 403, 512.} \type{\PlaceIndexTerm[margin=1em,distance=1em,minwidth=1em]{text}{pages}} \startitemize \item margin: the left margin of the lines made only of page numbers \item distance: the distance of the first page number from the last word of the text \item minwidth: the shortest acceptable space at the end of the text to try to start page numbers there \stopitemize \page \dorecurse {23} {\hsize=\dimexpr5cm+#1\emwidth\relax #1: \the\hsize\par \PlaceIndexTerm[test=on]{\Text}{\Pages}} \stoptext --------------------------------------------------------------