3

Someone can explain me why sometimes LaTeX seems to fail in doing the justification of the text? The red paragraph has more space between words, especially in the first 3 lines.

Is it something related to the hyphenation of the words? Is it possible to avoid it?

enter image description here

This is a MWE to reproduce the effect:

%!TEX program = xelatex
\documentclass[
    draft=false,  
   paper=portrait,
   twoside=false,
   open=right,
   parskip=full,
   headings=big,
   version=last,
   italian
]{scrbook} 

\setlength{\oddsidemargin}{1cm}
\setlength{\textwidth}{0.7\textwidth}
\setlength{\marginparwidth}{2\marginparwidth}

\usepackage{lmodern}
\usepackage{amsmath}  % advanced math symbols pkg
\usepackage{amsthm, amsthm}
\usepackage[utf8]{inputenc} % utf8 encoding
\usepackage{graphicx} % pictures support
\usepackage{longtable} % table on multiple pages support
\usepackage[italian]{babel} % language support
\usepackage{enumitem} % custom enumeration support
\usepackage{rotating} % Rotating pictures support
\usepackage{floatrow} % Support for floated images
\usepackage{marvosym} % Currency symbols
\usepackage{fancyhdr} % Fancy headers
\usepackage{array}
\usepackage{footnote}
\usepackage{setspace}
\usepackage{afterpage} % Permette di mettere i numeri di pagina nel footer se si usa il package Fancyhdr
\usepackage{textcomp} % Package for copyright glyph
\usepackage[newfloat]{minted} % Package for highlight code
\usepackage{appendix} %Package for appendices
\usepackage{chngcntr} %Package for list of figures numeration
\usepackage{csquotes}
\usepackage{fontspec}
\usepackage[protrusion=true]{microtype}
\usepackage{hyperref} % Must be called as the last


% ----------------------
% DOCUMENT START
% ----------------------
\begin{document}
  \sloppy
  \setromanfont{Minion Pro}
  Di recente si è verificata una vera e propria esplosione di framework per lo sviluppo web frontend: Ember.js, Vue.js, Angular, Backbone.js, React e molti altri ancora. Ma tra i tanti, Angular è diventato uno della scelte più comuni, soprattutto grazie ad una recente riscrittura che lo ha reso molto più solido e performante di quanto non fosse in passato.

  Tuttavia, anche dotandosi di uno strumento potente come Angular, una questione rimane particolarmente delicata nell’implementazione di un’applicazione volta all’interattività: la \textbf{gestione dello stato}. Nel seguente capitolo, verrano prima presentate le logiche alla base della costruzione di un’applicazione Angular. Successivamente verrà introdotto Redux, o meglio la sua implementazione Angular conosciuta come @ngrx, ovvero un pattern per la gestione dello stato interamente basato sulla reactive programming.  

  Angular (all’epoca conosciuto come AngularJS) nasce nel 2009 da Miško Hevery angularborn e Adam Abrons come implementazione di un servizio a pagamento per il salvataggio online di file JSON, che avrebbe dovuto facilitare lo sviluppo di applicazioni enterprise. Il servizio venne pubblicato all’indirizzo getangular.com e poco dopo, a causa dello scarso successo, i due decisero di abbondare l’idea di business e di rilasciare Angular come una libreria open source. 
\end{document}
toioski
  • 165
  • 3
    (i) please provide small,. complete document, which we can compile and see used preamble (ii) spacing is related to hyphenation. (iiI) do you use babel? word "nell'implementazione" is not hyphenated. try to force hyphenation in it. – Zarko Nov 21 '17 at 14:23
  • I updated the question with a MWE and I use babel – toioski Nov 21 '17 at 14:31
  • Off-topic: You don't need and should not use \usepackage[utf8]{inputenc} with XeLaTeX. – Schweinebacke Nov 21 '17 at 14:33
  • @Schweinebacke you are right, I completely miss babel! I am using \sloppybecause if I remove it I have some words going out of the page body. Do you suggest to use the \- instead of \sloppy? – toioski Nov 21 '17 at 14:38
  • 3
    Off-topic: Please learn how to make a MWE. There are a lot of packages loaded into your example that are not needed to show the problem. – Schweinebacke Nov 21 '17 at 14:47
  • 1
    @toioski I would just allow line breaking and/or hyphenation (see my answer). – Schweinebacke Nov 21 '17 at 14:56

2 Answers2

8

Don't use \sloppy. In your example, it results in large inter word spaces. This always happens, if TeX cannot break the paragraph without an overfull \hbox. It is better to allow a line break after nell’ and hyphenation in implementazione using nell’\hskip 0pt implementazione:

%!TEX program = xelatex
\documentclass[
    draft=false,  
   paper=portrait,
   twoside=false,
   open=right,
   parskip=full,
   headings=big,
   version=last,
   italian
]{scrbook} 

\setlength{\oddsidemargin}{1cm}
\setlength{\textwidth}{0.7\textwidth}
\setlength{\marginparwidth}{2\marginparwidth}

\usepackage{fontspec}
\usepackage[italian]{babel} % language support
\usepackage{textcomp} % Package for copyright glyph
\usepackage{microtype}

% ----------------------
% DOCUMENT START
% ----------------------
\begin{document}
  \setromanfont{Minion Pro}
  Di recente si è verificata una vera e propria esplosione di framework per lo sviluppo web frontend: Ember.js, Vue.js, Angular, Backbone.js, React e molti altri ancora. Ma tra i tanti, Angular è diventato uno della scelte più comuni, soprattutto grazie ad una recente riscrittura che lo ha reso molto più solido e performante di quanto non fosse in passato.

  Tuttavia, anche dotandosi di uno strumento potente come Angular, una
  questione rimane particolarmente delicata nell’\hskip0pt implementazione di un’applicazione volta all’interattività: la \textbf{gestione dello stato}. Nel seguente capitolo, verrano prima presentate le logiche alla base della costruzione di un’applicazione Angular. Successivamente verrà introdotto Redux, o meglio la sua implementazione Angular conosciuta come @ngrx, ovvero un pattern per la gestione dello stato interamente basato sulla reactive programming.  

  Angular (all’epoca conosciuto come AngularJS) nasce nel 2009 da Miško Hevery angularborn e Adam Abrons come implementazione di un servizio a pagamento per il salvataggio online di file JSON, che avrebbe dovuto facilitare lo sviluppo di applicazioni enterprise. Il servizio venne pubblicato all’indirizzo getangular.com e poco dopo, a causa dello scarso successo, i due decisero di abbondare l’idea di business e di rilasciare Angular come una libreria open source. 
\end{document}

result with hyphenation

If a line break after nell’ should not happen, you can use nell’\allowhyphens implementazione to only allow hyphenation of implementazione:

%!TEX program = xelatex
\documentclass[
   twoside=false,
   parskip=full,
]{scrbook} 

\setlength{\oddsidemargin}{1cm}
\setlength{\textwidth}{0.7\textwidth}
\setlength{\marginparwidth}{2\marginparwidth}

\usepackage{fontspec}
\usepackage[italian]{babel} % language support
\usepackage{textcomp} % Package for copyright glyph
\usepackage{microtype}

% ----------------------
% DOCUMENT START
% ----------------------
\begin{document}
  \setromanfont{Minion Pro}
  Di recente si è verificata una vera e propria esplosione di framework per lo sviluppo web frontend: Ember.js, Vue.js, Angular, Backbone.js, React e molti altri ancora. Ma tra i tanti, Angular è diventato uno della scelte più comuni, soprattutto grazie ad una recente riscrittura che lo ha reso molto più solido e performante di quanto non fosse in passato.

  Tuttavia, anche dotandosi di uno strumento potente come Angular, una
  questione rimane particolarmente delicata nell’\allowhyphens implementazione di un’applicazione volta all’interattività: la \textbf{gestione dello stato}. Nel seguente capitolo, verrano prima presentate le logiche alla base della costruzione di un’applicazione Angular. Successivamente verrà introdotto Redux, o meglio la sua implementazione Angular conosciuta come @ngrx, ovvero un pattern per la gestione dello stato interamente basato sulla reactive programming.  

  Angular (all’epoca conosciuto come AngularJS) nasce nel 2009 da Miško Hevery angularborn e Adam Abrons come implementazione di un servizio a pagamento per il salvataggio online di file JSON, che avrebbe dovuto facilitare lo sviluppo di applicazioni enterprise. Il servizio venne pubblicato all’indirizzo getangular.com e poco dopo, a causa dello scarso successo, i due decisero di abbondare l’idea di business e di rilasciare Angular come una libreria open source. 
\end{document}

The result in this case would be the same as above.

Schweinebacke
  • 26,336
  • “Don't use \sloppy. It results in large inter word spaces.” — I think this is misleading. What \sloppy results in is the best possible typesetting without overfull boxes. If your paragraphs don't have enough possible breakpoints (line breaks and hyphenation), then simply not using \sloppy will not save you, and conversely if your paragraph has enough breakpoints then adding \sloppy will not introduce large interword spaces. – ShreevatsaR Nov 21 '17 at 18:57
  • @ShreevatsaR The overfull \hbox was the reason to use \sloppy. However, I've changed it. Hope this is sufficient. BTW: \sloppy does already influence the hyphenation pass of TeX's paragraph break algorithm. So it can result in more horizontal space even if this wouldn't be necessary. So something like \emergencystretch=1em sometimes is better, because it adds one more pass to TeX's paragraph break algorithm. See also: What is the meaning of \fussy, \sloppy, \emergencystretch, \tolerance, \hbadness? – Schweinebacke Nov 21 '17 at 19:07
2

I think that, if the LaTeX code behind is strictly identical, there is no problem. The fact is that your second paragraph has much longer words. That could be the reason why it is more difficult for LaTeX to hyphenate those words. See for example following question: Justification of paragraph.

For fix, you can, as mentioned by first comment in Justification of paragraph use \- tool in a word (for example, particolar\-mente).

kogexo
  • 29
  • 1
    I have just updated the question with a MWE and yes, the trick of \- works perfectly! Thanks a lot! – toioski Nov 21 '17 at 14:33