L’esempio che mi hai indicato e che ho ripetuto con altre scelte di font e in diversi altri contesti funziona benissimo. Invece in un documento che si compone benissimo con pdflatex con xelatex fa i capricci, nel senso che la sillabazione sembra corretta dovunque, ma non nelle parole composte contenti l’elisione.
Ne deduco che commetto qualche errore che mi sfugge, evidentemente, perché fino a prova contraria i programmi generano processi causali, non casuali 😀
Senza vedere l’esempio non posso darti pareri.
Per quanto riguarda la discarisa fra l’apostrofo diritto e l’apostrofo curvo, sono d’accordo che il primo non dovrebbe venire usato, ma non userei nemmeno la virgolette semplice alta chiusa al posto dell’apostrofo e “2019 è un virgoletta semplice alta chiusa.
In Unicode non esiste un carattere separato per l’apostrofo. Esiste solo l’apostrofo ASCII che la maggior parte dei font rende con una forma inaccettabile come apostrofo. C’è “MODIFIER LETTER APOSTROPHE”, ma serve per i caratteri come “ď” e “ť” del ceco e “ľ” dello slovacco.
Che poi ci sia una discrasia fra i font di impostazione e dei pattern e il file di descrizione della lingua italiana per XeLaTeX è un fatto; non sono sicurissimo che \lccode”2019=”0027 funzioni o serva a rimediare. Sta di fatto che se le sillabazioni sono corrette dopo il maquillage prodotto da Ligatures=TeX, dipende dal fatto che il pattern virtuale 0^^^^20190 è implicito e quindi la virgoletta semplice alta chiusa è considerata come un carattere prima del quale non si può dividere e dopo del quale (essendoci una vocale) non si può dividere. Cioè funziona senza che la cosa sia stata prevista.
No, le regole di Knuth, che valgono anche per XeTeX dicono che
• una lettera con \lccode nullo interrompe il procedimento di sillabazione;
• i pattern vengono esaminati convertendo i caratteri tramite \lccode.
Perciò dare \lccode”2019=”27 avrebbe esattamente l’effetto voluto di considerare il carattere U+2019 come U+0027 ai fini della sillabazione (meglio, del confronto delle sottoparole con i pattern memorizzati). Con “Ligatures=TeX”, XeTeX vede il carattere U+2019 ogni volta che gli viene propinato U+0027; ma non è un problema, appunto perché \lccode”2019 non è zero; se fosse U+0027 si userebbero i pattern che comprendono l’apostrofo ASCII.
Nei tempi “antichi” era stato proposto un metodo per sillabare correttamente due lingue contemporaneamente: erano inglese e tedesco. I pattern per il tedesco erano tutti in lettere maiuscole, quelli per l’inglese in minuscolo, tutti in un unico file; il passaggio dall’una all’altra lingua avveniva cambiando tutti i valori di \lccode: nei tratti in tedesco quindi la sillabazione di “Aktion” veniva calcolata cercando le sottoparole di “AKTION”. Naturalmente il metodo aveva pesanti limitazioni, perché non permetteva di usare \lowercase e \uppercase per scopi tipografici. Ricordo un articolo al riguardo, ma non sono capace di trovarlo.
Penso che sottoporrò la modifica del valore di \lccode”2019 a Charette.
Ciao
Enrico