Re: [NTG-context] Length range control of the last line of paragraph
On 3/25/2016 10:57 PM, Jan Tosovsky wrote:
On 2016-03-25 Hans Hagen wrote:
On 3/25/2016 2:40 PM, Jan Tosovsky wrote:
On 2016-03-24 Hans Hagen wrote:
On 3/24/2016 8:36 PM, Jan Tosovsky wrote:
We basically need: <text><glue min-width='XX' max-width='hsize-3*indent'>
and I thought this is exactly what \parfillskip ensures \parfillskip XX plus (hsize - 3*indent)
the fil is taken into account when calculating the best break points and then the XX is fixed but plus/minus can lead to if being less or more, all relative to other fill (distributed)
so, XX plus (hsize - 3*indent) is not a fixed value, it's XX or more
take this:
\ruledhbox to 10cm {x\hskip0pt plus 1cm x}
the skip will stretch more than 1cm
I can see.
But sorry for my ignorance, as far as I understand, \parfillskip is added to the end of the paragraph, so we have rather \ruledhbox to 10cm {x\hskip0pt plus 1cm} % without that 'x' at the end, so no 'glue' distribution is performed
there is but not enough stretch so there will be a warning ... you can see it from
\ruledhbox to 10cm {x} \ruledhbox to 10cm {x\hskip0pt plus 1cm} \ruledhbox to 10cm {x\hskip0pt plus 1fill}
I get it, thanks.
If '\parfillskip 2em plus (hsize - 3*(2em) - 2em)' is specified, I still think we should get space of width at least 2em '####' which can be extended as indicated by hyphens '-' here:
emememememememememememememememememememem emememememem------------------------####
So there are two last line lengths extrems: (shortest) emememememememememememememememememememem emememememem
(longest) emememememememememememememememememememem emememememememememememememememememem
you always add a 2em skip so there will never be a word touching the right margin in the last line;
yes, but this is my goal (!)
See https://mailman.ntg.nl/pipermail/ntg-context/2016/084858.html - case (2)
I am afraid I hasn't been clear enough yet.
Can I somehow define command globally which takes local block widths?
\parfillskip #1 plus \localhsize-#1-#2, where #1 gap width #2 shortest line width
\availablehsize
So the following \parfillskip specification finally seems to be what I was looking for as it covers both cases in my original question:
\setupindenting[yes,2em]
\newdimen\lastlineminlength \newdimen\lastlinemingap
\lastlineminlength=3em \lastlinemingap=1em
\parfillskip \lastlinemingap plus \dimexpr\availablehsize-\lastlineminlength-\lastlinemingap\relax
\edef\ward{\cldloadfile{ward}}
\starttext
\dorecurse{100}{ \hsize\dimexpr\textwidth-#1mm\relax \ward \par \ward \par \startnarrower[left] \ward \par \ward \par \stopnarrower \page }
\stoptext
try \ward{}okay i.e. a short word at the end and you'll see theh \parfillskip \lastlinemingap plus 1fill works just as well
As it can be done in one place globally and in almost single line, no special new command is necessary (as requested originally).
i've removed the one|two|three and added final|2*final|3*final|4*final where final is a hspace of one em by default the only purpose of this feature is to ensure a gap at the end (handy when there is no indentation) for your case i see no solution apart from heuristic lua magic Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.com | www.pragma-pod.nl -----------------------------------------------------------------
On 2016-03-26 Hans Hagen wrote:
On 3/25/2016 10:57 PM, Jan Tosovsky wrote:
On 2016-03-25 Hans Hagen wrote:
On 3/25/2016 2:40 PM, Jan Tosovsky wrote:
On 2016-03-24 Hans Hagen wrote:
On 3/24/2016 8:36 PM, Jan Tosovsky wrote:
We basically need: <text><glue min-width='XX' max-width='hsize-3*indent'>
and I thought this is exactly what \parfillskip ensures \parfillskip XX plus (hsize - 3*indent)
the fil is taken into account when calculating the best break points and then the XX is fixed but plus/minus can lead to if being less or more, all relative to other fill (distributed)
so, XX plus (hsize - 3*indent) is not a fixed value, it's XX or more
So the following \parfillskip specification finally seems to be what I was looking for ...
\parfillskip \lastlinemingap plus \dimexpr\availablehsize-\lastlineminlength-\lastlinemingap\relax
\parfillskip \lastlinemingap plus 1fill
works just as well
I am getting slightly different results on several pages. The number of problematic cases is lower in my variant so I hope it makes still sense.
try \ward{}okay i.e. a short word at the end
Hmm, I indeed tested my approach with bad example. Now your previous examples make more sense to me :-)
for your case i see no solution apart from heuristic lua magic
Bad news. But I hope my parfillskip will work for majority cases and these problematic with words shorter than parindent+tolerance can be fixed afterwards by joining them with previous words using non-breaking space. I'll look into your 'crap' paragraph builder lua code if this exception could be handled programmatically without touching the source file (i.e. test for short last line and treat leading whitespace as it was '~' if necessary). Jan
On 2016-03-26 Hans Hagen wrote:
I added final|2*final|3*final|4*final
where final is a hspace of one em by default
the only purpose of this feature is to ensure a gap at the end (handy when there is no indentation)
Does this settings just set \parfillskip XX plus 1fil or there is more complex magic in the background? I'd like to extend a description here: http://wiki.contextgarden.net/Paragraph_last_line_control Anyway, this related issue could be closed now: http://tracker.luatex.org/view.php?id=885 Thanks, Jan
participants (2)
-
Hans Hagen
-
Jan Tosovsky