diff --git a/crates/typst/src/layout/inline/linebreak.rs b/crates/typst/src/layout/inline/linebreak.rs index f5048aaec..aa62d487c 100644 --- a/crates/typst/src/layout/inline/linebreak.rs +++ b/crates/typst/src/layout/inline/linebreak.rs @@ -597,7 +597,7 @@ fn raw_cost( let badness = if ratio < metrics.min_ratio(approx) { // Overfull line always has maximum cost. 1_000_000.0 - } else if justify || ratio < 0.0 { + } else if breakpoint != Breakpoint::Mandatory || justify || ratio < 0.0 { // If the line shall be justified or needs shrinking, it has normal // badness with cost 100|ratio|^3. We limit the ratio to 10 as to not // get to close to our maximum cost. diff --git a/tests/ref/issue-5235-linebreak-optimized-without-justify.png b/tests/ref/issue-5235-linebreak-optimized-without-justify.png new file mode 100644 index 000000000..b36dc4062 Binary files /dev/null and b/tests/ref/issue-5235-linebreak-optimized-without-justify.png differ diff --git a/tests/suite/layout/inline/linebreak.typ b/tests/suite/layout/inline/linebreak.typ index 8371d76e2..e4b04b245 100644 --- a/tests/suite/layout/inline/linebreak.typ +++ b/tests/suite/layout/inline/linebreak.typ @@ -123,3 +123,19 @@ For info see #link("https://myhost.tld"). // - shaping that results in multiple glyphs in the same cluster #set text(font: "Noto Sans Thai") #h(85pt) งบิก + +--- issue-5235-linebreak-optimized-without-justify --- +#set page(width: 207pt, margin: 15pt) +#set text(11pt) + +#set par(linebreaks: "simple") +Some texts feature many longer +words. Those are often exceedingly +challenging to break in a visually +pleasing way. + +#set par(linebreaks: "optimized") +Some texts feature many longer +words. Those are often exceedingly +challenging to break in a visually +pleasing way.