Greco, microtype e XeLaTeX

  • Creatore
    Topic
  • #57256
    Up
    0
    Down
    ::


    Com’è noto, il pacchetto microtype non è del tutto compatibile con XeLaTeX (permette soltanto la protrusione dei caratteri, ma non la microgiustificazione, stando a quanto ho appreso da chi ne sa enormemente più di me).

    Ora, però, compilando un testo in greco con LaTeX traslitterando i caratteri, mettere o no microtype non ha importanza: il risultato è esattamente lo stesso, senza variazioni.

    Mi chiedo: lo stesso accadrebbe con XeLaTeX? Cioè: se microtype funzionasse perfettamente con Xe, metterlo o non metterlo sarebbe la stessa cosa?

    Se la risposta fosse sì, allora questo significa, per me, che sono i font greci a neutralizzarne le funzioni e che, in ultima analisi, scrivere direttamente in greco con XeLaTeX non avrebbe la controindicazione che abbiamo scritto nell’appendice dell’Arte.

    Che ne pensate?

    Ciao
    Tommaso

Visualizzazione 14 filoni di risposte
  • Autore
    Risposte
    • #57257
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Con pdflatex microtype funziona se si usano i font giusti.
        Con xelatex per ora microtype non funziona neanche con i font giusti.

        I font CBgreek NON sono font giusti. Che cosa vuol dire font giusto: vuol dire che per quel font esistono delle tabele che dicono carattere per carattere quanto può protrudere, quanto può venire compresso o espanso orizzontalmente, eccetera.
        Io queste tabelle non le ho mai fatte; so che richiederebbero un tempo infinito e non mi ci sono mai messo; preferisco — preferivo fino a ieri — usare il mio tempo in modo diverso.

        Ieri ho cominciato a trasformare l’Introduzione per renderla compatibile con XeLaTeX. Ovviamente non posso usare microtype nemmeno con i font latini per i quali esistano le tabelle che li rendono giusti, perché la prima uscita di una compilazione xelatex è uno speciale file dvi che dietro le quinte viene subito trasformato in pdf; la cosa è talmente rapida che se si guarda la schermata della console so nota appena un secondo o due di sospensione alla fine prima che si chiuda questa finestra e si aggiorni o si apra la finestra del documento compilato in pdf (suoi nostri Mac).

        Quello che ho notato è che lo stesso testo che con pdflatex+microtype veniva perfettamente giustificato, virtualmente senza una sola overfull o underfull hbox, compilato con xelatex senza microtype richiede numerosissimi aggiustamenti a mano, senza contare che polyglossia non fornisce le comodità che offre invece babel per gestire la lingua italiana.

        Spero quindi che presto xelatex possa essere compatibile con microtype; nello stesso tempo mi rendo conto dell’importanza dei file specifici per i font greci e magari presto mi metterò a colmare questa lacuna con i CBgreek. Almeno la cosa potrà funzionare con pdflatex, intanto. poi per il resto si vedrà.

      • #57258
        mlgdominici
        Amministratore del forum
          Up
          0
          Down
          ::


          Ciao Claudio, ciao Tommaso,

          esiste una versione sperimentale di microtype che prevede anche il supporto per XeTeX (e LuaTeX). Si trova sul sito di TLcontrib e può essere installato tramite TeX Live manager (ma consiglio di farlo solo se davvero interessati, anche se con tlmgr dovrebbe essere minore il rischio di pasticciare con l’installazione):

          http://tlcontrib.metatex.org/cgi-bin/package.cgi/ruid=3684530276/action=view/id=423

          Non credo però che siano stati fatti passi avanti per il supporto delle impostazioni di microtipografia per il greco, né per pdfTeX né per XeTeX.

          Max.

        • #57259
          Up
          0
          Down
          ::


          Grazie Claudio.
          La mia domanda era soltanto per capire se quella precisazione su microtype era omissibile dall’appendice dell’Arte.
          Ma ora mi rispondo da solo: va lasciata, perché se è vero (forse) che microtype non produce i suoi effetti nelle parti in greco anche compilando con pdflatex, un documento bilingue non vedrà microtype completamente all’opera nemmeno nelle parti in italiano.

          Mi sembra che questa cosa di microtype, anche se non la ritengo un dramma, possa far preferire ancora LaTeX a XeLaTeX (che per altri versi ha alcune altre cose più semplici).
          Anche se scrivere direttamente in greco è bellissimo 😀

          Ciao
          Tommaso

        • #57260
          Up
          0
          Down
          ::


          Dunque mi sembra di capire che il problema di microtype e CB siano proprio i CB, e che sistemandoli con le loro tabelle si potrebbe risolvere la cosa. E che almeno con pdflatex si potrebbe avere un testo greco microgiustificato. Bene 😀

          Claudio, potresti essere più chiaro su quelle comodità per l’italiano che polyglossia non avrebbe?

          Ciao
          Tommaso

        • #57261
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Polyglossia contiene solo il richiamao alla giusta tabella di sillabazione e definisce i veri contenuti dei comandi \chaptername, \figurename, eccetera; definisce la data in italiano e basta.
            Le altre comodità son il doppi apice attivo (detestato da tanti, e apprezzato dai pochi che lo usano, i comandi \ap. \ped, \unit, eccetera per soddisfare alcune delle norme ISO, la virgola intelligente. Forse è giusto che queste cose non compaiano solo per un lingua; ed è per wuesto che devo scrivere un piccolo file .sty che permetta di far funzionare quelle cose anche quando si usa XeLaTeX e si invoca il pacchettino.

          • #57262
            Up
            0
            Down
            ::

            Polyglossia contiene solo il richiamao alla giusta tabella di sillabazione e definisce i veri contenuti dei comandi \chaptername, \figurename, eccetera; definisce la data in italiano e basta.
            Le altre comodità son il doppi apice attivo (detestato da tanti, e apprezzato dai pochi che lo usano, i comandi \ap. \ped, \unit, eccetera per soddisfare alcune delle norme ISO, la virgola intelligente. Forse è giusto che queste cose non compaiano solo per un lingua; ed è per wuesto che devo scrivere un piccolo file .sty che permetta di far funzionare quelle cose anche quando si usa XeLaTeX e si invoca il pacchettino.

            `\RequirePackage{realscripts}
            \let\ap\textsuperscript
            \let\ped\textsubscript
            \protected\def\unit{%
            \,\ifmmode\expandafter\mathrm\else\textrm\fi}`
            Con il pacchetto realscripts vengono usati i “veri” caratteri per apici e pedici, se nel font ci sono. Purtroppo alcuni font ne hanno solo per alcuni caratteri e questo può confondere il meccanismo di decisione. Dato che dipende dal font si potrebbe creare un’opzione:
            `\DeclareOption{realscripts}{\let\PREF@scripts=T}
            \DeclareOption{fakescripts}{}
            \ExecuteOptions{realscripts} % o l'altra, se si preferisce
            \ProcessOptions\relax
            \RequirePackage{realscripts}
            \ifdefined\PREF@scripts
            \let\ap\realsuperscript
            \let\ped\realsubscript
            \else
            \let\ap\fakesuperscript
            \let\ped\fakesubscript
            \fi`
            Sull’attivazione di ” nel modulo italiano di Polyglossia si può discutere.

            Ciao
            Enrico

          • #57263
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Grazie Enrico degli ottimi suggerimenti.

              Certo, lo so, per ” si può discutere. è per questo che sto pensando ad un pacchettino personale; io “pirsonalmente di pirsona” non ne posso più fare a meno, ma è probabile che la maggior parte delle persone ne faccia tranquillamente a meno.

              Ciao
              Claudio

            • #57264
              Up
              0
              Down
              ::

              Grazie Enrico degli ottimi suggerimenti.

              Certo, lo so, per ” si può discutere. è per questo che sto pensando ad un pacchettino personale; io “pirsonalmente di pirsona” non ne posso più fare a meno, ma è probabile che la maggior parte delle persone ne faccia tranquillamente a meno.

              Ciao
              Claudio

              Prova questa versione modificata di gloss-italian.ldf
              `\ProvidesFile{gloss-italian.ldf}[polyglossia: module for italian – unofficial test version]
              \makeatletter
              \PolyglossiaSetup{italian}{
              hyphennames={italian},
              hyphenmins={2,2},
              frenchspacing=true,
              indentfirst=true,
              fontsetup=true,
              }

              %%% CHANGES START %%%
              \define@boolkey{italian}[italian@]{babelshorthands}[true]{}

              \ifsystem@babelshorthands
              \setkeys{italian}{babelshorthands=true}
              \else
              \setkeys{italian}{babelshorthands=false}
              \fi

              \ifcsundef{initiate@active@char}{%
              \input{babelsh.def}%
              \initiate@active@char{“}%
              }{}

              \def\italian@shorthands{%
              \bbl@activate{“}%
              \def\language@group{italian}%
              \declare@shorthand{italian}{“}{%
              \relax\ifmmode
              \def\xpgit@next{''}%
              \else
              \def\xpgit@next{\futurelet\xpgit@temp\xpgit@cwm}%
              \fi
              \xpgit@next}%
              }

              \def\xpgit@@cwm{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip}
              \newrobustcmd*{\xpgit@cwm}{\let\xpgit@@next\relax
              \ifcat\noexpand\xpgit@temp a%
              \def\xpgit@@next{\xpgit@@cwm}%
              \else
              \if\noexpand\xpgit@temp \string|%
              \def\xpgit@@next{\xpgit@@cwm\@gobble}%
              \else
              \if\noexpand\xpgit@temp \string<% \def\xpgit@@next{«\@gobble}% \else \if\noexpand\xpgit@temp \string>%
              \def\xpgit@@next{»\@gobble}%
              \else
              \if\noexpand\xpgit@temp\string/%
              \def\xpgit@@next{\slash\@gobble}%
              \else
              \ifx\xpgit@temp”%
              \def\xpgit@@next{“\@gobble}%
              \fi
              \fi
              \fi
              \fi
              \fi
              \fi
              \xpgit@@next}

              \def\noitalian@shorthands{%
              \@ifundefined{initiate@active@char}{}{\bbl@deactivate{“}}%
              }
              %%% CHANGES END %%%

              \def\captionsitalian{%
              \def\prefacename{Prefazione}%
              \def\refname{Riferimenti bibliografici}%
              \def\abstractname{Sommario}%
              \def\bibname{Bibliografia}%
              \def\chaptername{Capitolo}%
              \def\appendixname{Appendice}%
              \def\contentsname{Indice}%
              \def\listfigurename{Elenco delle figure}%
              \def\listtablename{Elenco delle tabelle}%
              \def\indexname{Indice analitico}%
              \def\figurename{Figura}%
              \def\tablename{Tabella}%
              \def\partname{Parte}%
              \def\enclname{Allegati}%
              \def\ccname{e~p.~c.}%
              \def\headtoname{Per}%
              \def\pagename{Pag.}% % in Italian the abbreviation is preferred
              \def\seename{vedi}%
              \def\alsoname{vedi anche}%
              \def\proofname{Dimostrazione}%
              \def\glossaryname{Glossario}%
              }
              \def\dateitalian{%
              \def\today{\number\day~\ifcase\month\or
              gennaio\or febbraio\or marzo\or aprile\or maggio\or giugno\or
              luglio\or agosto\or settembre\or ottobre\or novembre\or
              dicembre\fi\space \number\year}}

              \def\noextras@italian{%
              \lccode\string”2019=\z@
              \noitalian@shorthands}

              \def\blockextras@italian{%
              \lccode\string”2019=\string”2019
              %TODO ? \clubpenalty3000\widowpenalty3000\finalhyphendemerits50000000 << in Babel %%% CHANGES START %%% \ifitalian@babelshorthands\italian@shorthands\fi %%% CHANGES END %%% } \def\inlineextras@italian{% \lccode\string"2019=\string"2019 %%% CHANGES START %%% \ifitalian@babelshorthands\italian@shorthands\fi %%% CHANGES END %%% } \endinput` Occhio a registrarlo come UTF8, visto che contiene caratteri "alti". Il test che ho eseguito sembra funzionare. Occorre dichiarare la lingua con uno fra `\setmainlanguage[babelshorthands]{italian} \setotherlanguage[babelshorthands]{italian}` L'opzione babelshorthands può essere data anche ai comandi \selectlanguage e \foreignlanguage o agli ambienti otherlanguage e otherlanguage*. Non ho messo tutta la faccenda dei caporali, visto che nei font OpenType non dovrebbero mancare e mi pare difficile che qualcuno usi font OT1 con XeLaTeX, mi sono limitato a definire “< come « e “> come ». Analogamente “” è equivalente a . La sequenza “| sarebbe obsoleta, ma per compatibilità con i vecchi documenti potrebbe servire: chi mai scrive qualcosa per XeLaTeX con i comandi come \`e?

              Sinceramente non metterei \ap, \ped e \unit dentro il modulo, non c’è nulla del genere in alcun altro modulo di Polyglossia. Ma non è complicato scriversi un pacchettino personale, che magari potrebbe essere inserito a parte, da chiamare a richiesta e così i comandi sarebbero disponibili anche nelle altre lingue.

              Sulla modifica dei valori di \clubpenalty, \widowpenalty e \finalhyphendemerits bisogna vedere.

              Ciao
              Enrico

            • #57265
              Up
              0
              Down
              ::


              Grazie! 😀

              Ciao
              Tommaso

            • #57266
              Up
              0
              Down
              ::

              Grazie! 😀

              Ciao
              Tommaso

              Se fate qualche prova, lo metto nella versione ufficiale.

              Ciao
              Enrico

            • #57267
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Certamente proverò il file.
                Vorrei segnalare che in babel “< e "> non si limitano a mettere i caporali, ma eliminano anche gli spazi spuri dopo i caporali aperti e prima dei caporali chiusi.
                Mi piace molto che fra le caratteristiche stilistiche della composizione italiana ci sia frenchspacing.
                A proposito delle widowspenalty, clubpenalty e finalhyphendemerits: osservo quanto segue:
                1) non so se XeLaTeX usi anche \@clubpenalty; credo di sì perché ho fatto un tracciamento di debug e mi pare di ricordare di aver visto anche \@clubpenalty.
                2) \finalhyphendemerits ci vuole assolutamente: mi è già capitato di avere una riga vedova composta solo dall’ultima sillaba di due lettere della parola finale del capoverso: terribile!
                Forse i valori di 3000 e 4000 per quelle penalità per le orfane e le vedove sono un po’ alti, ma le vedove sono veramente una pestilenza; le orfane mi dispiacciono un po’ meno ma sono brutte anche quelle.

                Grazie mille, Enrico

                Ciao
                Claudio

              • #57268
                Up
                0
                Down
                ::

                Certamente proverò il file.
                Vorrei segnalare che in babel “< e "> non si limitano a mettere i caporali, ma eliminano anche gli spazi spuri dopo i caporali aperti e prima dei caporali chiusi.
                Mi piace molto che fra le caratteristiche stilistiche della composizione italiana ci sia frenchspacing.
                A proposito delle widowspenalty, clubpenalty e finalhyphendemerits: osservo quanto segue:
                1) non so se XeLaTeX usi anche \@clubpenalty; credo di sì perché ho fatto un tracciamento di debug e mi pare di ricordare di aver visto anche \@clubpenalty.
                2) \finalhyphendemerits ci vuole assolutamente: mi è già capitato di avere una riga vedova composta solo dall’ultima sillaba di due lettere della parola finale del capoverso: terribile!
                Forse i valori di 3000 e 4000 per quelle penalità per le orfane e le vedove sono un po’ alti, ma le vedove sono veramente una pestilenza; le orfane mi dispiacciono un po’ meno ma sono brutte anche quelle.

                Cambia la definizione di \xpgit@cwm con questa:
                `\newrobustcmd*{\xpgit@cwm}{\let\xpgit@@next\relax
                \ifcat\noexpand\xpgit@temp a%
                \def\xpgit@@next{\xpgit@@cwm}%
                \else
                \if\noexpand\xpgit@temp \string|%
                \def\xpgit@@next##1{\xpgit@@cwm}%
                \else
                \if\noexpand\xpgit@temp \string<% \def\xpgit@@next##1{«\ignorespaces}% \else \if\noexpand\xpgit@temp \string>%
                \def\xpgit@@next##1{\unskip»}%
                \else
                \if\noexpand\xpgit@temp\string/%
                \def\xpgit@@next##1{\slash}%
                \else
                \ifx\xpgit@temp”%
                \def\xpgit@@next##1{“}%
                \fi
                \fi
                \fi
                \fi
                \fi
                \fi
                \xpgit@@next}`
                Certamente va impostato anche il valore di \@clubpenalty, perché è questo che LaTeX va a vedere dopo che, in certe situazioni, ha modificato quello di \clubpenalty.

                Riguardo il meccanismo di Polyglossia per ricordare i valori e integro.

                Ciao
                Enrico

              • #57269
                Up
                0
                Down
                ::


                Versione “definitiva” di gloss-italian.ldf:
                `\ProvidesFile{gloss-italian.ldf}[polyglossia: module for italian – unofficial test version]
                \makeatletter
                \PolyglossiaSetup{italian}{
                hyphennames={italian},
                hyphenmins={2,2},
                frenchspacing=true,
                indentfirst=true,
                fontsetup=true,
                }

                %%% CHANGES START %%%
                \define@boolkey{italian}[italian@]{babelshorthands}[true]{}

                \ifsystem@babelshorthands
                \setkeys{italian}{babelshorthands=true}
                \else
                \setkeys{italian}{babelshorthands=false}
                \fi

                \ifcsundef{initiate@active@char}{%
                \input{babelsh.def}%
                \initiate@active@char{“}%
                }{}

                \def\italian@shorthands{%
                \bbl@activate{“}%
                \def\language@group{italian}%
                \declare@shorthand{italian}{“}{%
                \relax\ifmmode
                \def\xpgit@next{''}%
                \else
                \def\xpgit@next{\futurelet\xpgit@temp\xpgit@cwm}%
                \fi
                \xpgit@next}%
                }

                \def\xpgit@@cwm{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip}
                \def\xpgit@cwm{\let\xpgit@@next\relax
                \ifcat\noexpand\xpgit@temp a%
                \def\xpgit@@next{\xpgit@@cwm}%
                \else
                \if\noexpand\xpgit@temp \string|%
                \def\xpgit@@next##1{\xpgit@@cwm}%
                \else
                \if\noexpand\xpgit@temp \string<% \def\xpgit@@next##1{«\ignorespaces}% \else \if\noexpand\xpgit@temp \string>%
                \def\xpgit@@next##1{\unskip»}%
                \else
                \if\noexpand\xpgit@temp\string/%
                \def\xpgit@@next##1{\slash}%
                \else
                \ifx\xpgit@temp”%
                \def\xpgit@@next##1{“}%
                \fi
                \fi
                \fi
                \fi
                \fi
                \fi
                \xpgit@@next}

                \def\noitalian@shorthands{%
                \@ifundefined{initiate@active@char}{}{\bbl@deactivate{“}}%
                }
                %%% CHANGES END %%%

                \def\captionsitalian{%
                \def\prefacename{Prefazione}%
                \def\refname{Riferimenti bibliografici}%
                \def\abstractname{Sommario}%
                \def\bibname{Bibliografia}%
                \def\chaptername{Capitolo}%
                \def\appendixname{Appendice}%
                \def\contentsname{Indice}%
                \def\listfigurename{Elenco delle figure}%
                \def\listtablename{Elenco delle tabelle}%
                \def\indexname{Indice analitico}%
                \def\figurename{Figura}%
                \def\tablename{Tabella}%
                \def\partname{Parte}%
                \def\enclname{Allegati}%
                \def\ccname{e~p.~c.}%
                \def\headtoname{Per}%
                \def\pagename{Pag.}% % in Italian the abbreviation is preferred
                \def\seename{vedi}%
                \def\alsoname{vedi anche}%
                \def\proofname{Dimostrazione}%
                \def\glossaryname{Glossario}%
                }
                \def\dateitalian{%
                \def\today{\number\day~\ifcase\month\or
                gennaio\or febbraio\or marzo\or aprile\or maggio\or giugno\or
                luglio\or agosto\or settembre\or ottobre\or novembre\or
                dicembre\fi\space \number\year}}

                %%% CHANGES START %%%
                \AtEndPreamble{ % the user or the class might define different values
                \edef\xpgit@savedvalues{%
                \clubpenalty=\the\clubpenalty\space
                \@clubpenalty=\the\@clubpenalty\space
                \widowpenalty=\the\widowpenalty\space
                \finalhyphendemerits=\the\finalhyphendemerits}
                }

                \def\noextras@italian{%
                \lccode\string”2019=\z@
                \noitalian@shorthands
                \xpgit@savedvalues}

                \def\blockextras@italian{%
                \lccode\string”2019=\string”2019
                \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
                \finalhyphendemerits=50000000
                \ifitalian@babelshorthands\italian@shorthands\fi
                }

                \def\inlineextras@italian{%
                \lccode\string”2019=\string”2019
                \ifitalian@babelshorthands\italian@shorthands\fi
                }
                %%% CHANGES END %%%
                \endinput`
                Naturalmente è possibile evitare “indentfirst” con
                `\PolyglossiaSetup{italian}{intentfirst=false}`
                subito dopo aver definito la lingua con \setmainlanguage o \setotherlanguage. A qualcuno magari non va, a qualcun altro forse sì. 🙂

                Ciao
                Enrico

              • #57270
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Ottimo, decisamente ottimo. Sono un po’ bloccato da un altro progetto epr testare subito questo codice, ma lo farò quanto prima.

                  Grazie infinite

                  Claudio

                • #57271
                  OldClaudio
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    I test che ho fatto sono ambivalenti:

                    Con un semplice file di prova come:
                    `
                    \documentclass{book}
                    \usepackage{polyglossia}
                    \setmainlanguage[babelshorthands]{italian}

                    \begin{document}

                    “< Ciao, mondo! ">

                    \end{document}
                    `

                    XeLaTeX produce il risultato perfetto, come ci si aspetta e senza spazi spuri fra i caporali e il testo che racchiudono.

                    Se invece uso questo file gloss-italian.ldf mettendolo nella stessa cartella dove compilo la Guida con Xelatex e avendo già corretto tutti i file sia per l’encoding sia per i file di macro personali (il tutto mi produce correttamente l’intera guida se uso il file ldf di sistema, tranne alcuni piccoli dettagli che erano legati alla gestione dei font con pdflatex e che non ho ancora corretto, ma che non bloccano la composizione) mi appare un errore che sembra legato al comando \AtEndPreamble, cisto che esce:
                    `
                    ABD: EveryShipout initializing macros
                    ! Missing number, treated as zero.

                    \relax
                    l.309 \begin{document}

                    ?
                    `

                    Se premo Q e “Enter”, la compilazione procede e il tutto sembra essere composto correttamente con i doppi apici correttamente funzionanti.

                    Ho trovato! c’è un conflitto con la “virgola intelligente” che è definita carattere matematico attivo usando il codice esadecimale “8000; è una questione di tempi: questo codice viene usato \AtBeginDocument quando ormai, evidentemente, il doppio apice è stato definito attivo. So come orientarmi per correggere la virgola intelligente…

                    Ti farò sapere; ora per me è tardi e non connetto più bene, forse per te è inizio della serata…

                    Grazie ancora
                    Claudio

                Visualizzazione 14 filoni di risposte
                • Devi essere connesso per rispondere a questo topic.

                Go to top