Kerning dell’apostrofo in Adobe Jenson Pro

  • Creatore
    Topic
  • #84555
    samiel
    Partecipante
      Up
      0
      Down
      ::


      In Adobe Jenson Pro è presente un problema a proposito del kerning dell’apostrofo.
      Vedere per credere: [attachment=660]out_2013-04-06.png[/attachment]
      Si tratta di una riproposizione del problema già denunciato per i Minion Pro,
      si veda http://www.guitex.org/home/it/forum/5-tex-e-latex/51159-kerning-dellapostrofo-con-minionpro-e-titolo-section
      Il magico e infallibile codice di Enrico funziona, ma con un limite, per le mie esigenze, nei testi dov’è presente il greco.
      O meglio: nei testi composti con Xelatex — credo per via della codifica UTF-8 degli apostrofi (resi con virgoletta semplice all’inglese)
      e della virgoletta semplice — si ha il duplice vantaggio che il kerning dell’apostrofo viene sistemato e il greco è impeccabile.
      Nei testi composti con pdflatex invece il kerning stesso viene corretto, ma gli accenti dei caratteri greci risultano tutti spostati a sinistra.
      C’è un modo per salvare capra e cavoli?

      grazie
      m

    Visualizzazione 17 filoni di risposte
    • Autore
      Risposte
      • #84556
        Up
        0
        Down
        ::

        samiel” post=83929In Adobe Jenson Pro è presente un problema a proposito del kerning dell’apostrofo.
        Vedere per credere: [attachment=660]out_2013-04-06.png[/attachment]
        Si tratta di una riproposizione del problema già denunciato per i Minion Pro,
        si veda http://www.guitex.org/home/it/forum/5-tex-e-latex/51159-kerning-dellapostrofo-con-minionpro-e-titolo-section
        Il magico e infallibile codice di Enrico funziona, ma con un limite, per le mie esigenze, nei testi dov’è presente il greco.
        O meglio: nei testi composti con Xelatex — credo per via della codifica UTF-8 degli apostrofi (resi con virgoletta semplice all’inglese)
        e della virgoletta semplice — si ha il duplice vantaggio che il kerning dell’apostrofo viene sistemato e il greco è impeccabile.
        Nei testi composti con pdflatex invece il kerning stesso viene corretto, ma gli accenti dei caratteri greci risultano tutti spostati a sinistra.
        C’è un modo per salvare capra e cavoli?

        Un esempietto?

        Ciao
        Enrico

      • #84557
        samiel
        Partecipante
          Up
          0
          Down
          ::


          Con questo codice:
          `\documentclass[a4paper,12pt]{article}
          \usepackage[T1]{fontenc}
          \usepackage[utf8]{inputenc}
          \usepackage[greek,italian]{babel}
          \usepackage{JensonPro}
          \usepackage{microtype}
          \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
          \setlength{\parindent}{0pt}
          \frenchspacing
          \newcommand{\GR}[1]{%
          \begin{otherlanguage*}{greek}#1\end{otherlanguage*}}
          \DeclareRobustCommand{\greektext}{%
          \fontencoding{LGR}\fontfamily{artemisia}\selectfont
          \def\encodingdefault{LGR}}
          % kerning dell'apostrofo
          \makeatletter
          \catcode`\'=12
          \def\qu@te{'}
          \catcode`'=\active
          \begingroup
          \obeylines\obeyspaces%
          \gdef\@resetactivechars{%
          \def^^M{\@activechar@info{EOL}\space}%
          \def {\@activechar@info{space}\space}%
          }%
          \endgroup
          \providecommand\texorpdfstring[2]{#1}
          \protected\def'{\texorpdfstring{\texqu@te}{\string'}}
          \def\texqu@te{\relax
          \ifmmode
          \expandafter^\expandafter\bgroup\expandafter\prim@s
          \else
          \expandafter\futurelet\expandafter\@let@token\expandafter\qu@t@
          \fi}
          \def\qu@t@{%
          \ifx'\@let@token
          \qu@te\qu@te\expandafter\@gobble
          \else
          {}\qu@te{}\penalty\@M\hskip\expandafter\z@skip
          \fi}
          \scantokens\expandafter{%
          \expandafter\def\expandafter\pr@m@s\expandafter{\pr@m@s}}
          \makeatother
          \begin{document}

          L'apostrofo qui è posizionato correttamente

          Ma nel greco gli accenti no. Infatti nell'esempio:
          \GR{<'usteron pr'oteron} sono spostati visibilmente a destra \end{document}` il risultato è il seguente: [attachment=661]zzzz.png[/attachment] Co nXelatex tutto, come dicevo, risulta corretto, con pdflatex il problema è quello che si vede. Stessa cosa col Minion, tranne che in quel caso non è necessario specificare un alfabeto greco alternativo, poiché quel font inlude il gredo e il cirillico. m PS come noterete, continuo a confondere la sinistra con la destra... sarà colpa della situazione politica :-)

          Attachments:
          You must be logged in to view attached files.
        • #84558
          Up
          0
          Down
          ::

          samiel” post=83966Con questo codice:
          `\documentclass[a4paper,12pt]{article}
          \usepackage[T1]{fontenc}
          \usepackage[utf8]{inputenc}
          \usepackage[greek,italian]{babel}
          \usepackage{JensonPro}
          \usepackage{microtype}
          \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
          \setlength{\parindent}{0pt}
          \frenchspacing
          \newcommand{\GR}[1]{%
          \begin{otherlanguage*}{greek}#1\end{otherlanguage*}}
          \DeclareRobustCommand{\greektext}{%
          \fontencoding{LGR}\fontfamily{artemisia}\selectfont
          \def\encodingdefault{LGR}}
          % kerning dell'apostrofo
          \makeatletter
          \catcode`\'=12
          \def\qu@te{'}
          \catcode`'=\active
          \begingroup
          \obeylines\obeyspaces%
          \gdef\@resetactivechars{%
          \def^^M{\@activechar@info{EOL}\space}%
          \def {\@activechar@info{space}\space}%
          }%
          \endgroup
          \providecommand\texorpdfstring[2]{#1}
          \protected\def'{\texorpdfstring{\texqu@te}{\string'}}
          \def\texqu@te{\relax
          \ifmmode
          \expandafter^\expandafter\bgroup\expandafter\prim@s
          \else
          \expandafter\futurelet\expandafter\@let@token\expandafter\qu@t@
          \fi}
          \def\qu@t@{%
          \ifx'\@let@token
          \qu@te\qu@te\expandafter\@gobble
          \else
          {}\qu@te{}\penalty\@M\hskip\expandafter\z@skip
          \fi}
          \scantokens\expandafter{%
          \expandafter\def\expandafter\pr@m@s\expandafter{\pr@m@s}}
          \makeatother
          \begin{document}

          L'apostrofo qui è posizionato correttamente

          Ma nel greco gli accenti no. Infatti nell'esempio:
          \GR{<'usteron pr'oteron} sono spostati visibilmente a destra \end{document}` il risultato è il seguente: [attachment=661]zzzz.png[/attachment] Co nXelatex tutto, come dicevo, risulta corretto, con pdflatex il problema è quello che si vede. Stessa cosa col Minion, tranne che in quel caso non è necessario specificare un alfabeto greco alternativo, poiché quel font inlude il gredo e il cirillico. m PS come noterete, continuo a confondere la sinistra con la destra... sarà colpa della situazione politica :-)

          Prova a modificare la definizione di [tt]\greektext[/tt] così:
          `\DeclareRobustCommand{\greektext}{%
          \fontencoding{LGR}\fontfamily{artemisia}\selectfont
          \def\encodingdefault{LGR}
          \begingroup\lccode`\~=`\'
          \lowercase{\endgroup\edef~}{'}%
          }`
          Ciao
          Enrico

        • #84559
          samiel
          Partecipante
            Up
            0
            Down
            ::


            Infallibile Enrico… !!!! 🙂

            m

          • #84560
            samiel
            Partecipante
              Up
              0
              Down
              ::


              Aggiornamento. Avendo il supporto completo (e politonico)
              al greco per MinionPro, non ho necessità di scegliere
              un altro alfabeto greco. Il codice per il kerning dell’apostrofo
              però confligge con gli accenti del greco. Se utilizzo questo codice:
              `\DeclareRobustCommand{\GR}{%
              \fontencoding{LGR} %\fontfamily{artemisia}\selectfont
              \def\encodingdefault{LGR}
              \begingroup\lccode`\~=`\'
              \lowercase{\endgroup\edef~}{'}%
              }`
              che omette la determinazione del font, il greco compare
              correttamente con \begin{otherlanguage}…,
              ma il comando \GR non produce nessun greco.
              Come va ritrascritta la stringa \fontfamily{artemisia}\selectfont
              per lasciare il greco di default, quallo interno a MinionPro?

              grazie
              m

            • #84561
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Samiel, hai come al solito bisogno del file .fd ma te lo devi creare con le istruzioni che trovi in teubner-doc.pdf.
                Ogni volta che cambi famiglia latina, devi creare il corrispondente file per la famiglia greca.
                Però il tuo problema mi lascia perplesso e temo che tu debba agire a mano, non secondo quanto descritto in teubner-doc.pdf.

              • #84562
                samiel
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Il font è molto complesso. ci sono già file fd
                  nella misura di alcune decine… Sono pronto
                  a fare il lavoro a mano, ma dovrei capire
                  che cosa devo fare 🙁
                  Ho tentato semplicemente di inserire
                  il nome della famiglia in questo modo:
                  `\DeclareRobustCommand{\greek}{%
                  \fontencoding{LGR} \fontfamily{MinionPro-OsF}\selectfont
                  \def\encodingdefault{LGR}
                  \begingroup\lccode`\~=`\'
                  \lowercase{\endgroup\edef~}{'}%
                  }`
                  ma funziona talmente tanto che il testo
                  anche fuori di \greek e di \begin{otherlanguage}
                  è tutto e dico tutto greco…

                  m

                • #84563
                  samiel
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Sto andando alla cieca. Ora, inserendo
                    `\DeclareRobustCommand{\greek}{%
                    \fontencoding{LGR}\fontfamily{MinionPro-OsF}\selectfont
                    \def\encodingdefault{LGR}
                    \begingroup\lccode`\~=`\'
                    \lowercase{\endgroup\edef~}{'}%
                    }
                    \DeclareFontSubstitution{LGR}{MinionPro-OsF}{m}{n}`
                    Ora, la stringa
                    `{\greek s'wzein t`a fain'omena}`
                    produce il risultato corretto.
                    mentre la stringa
                    `\begin{otherlanguage}{greek}s'wzein t`a fain'omena\end{otherlanguage}`
                    ripropone il posizionamento errato degli accenti (no kerning, no party…)

                    n

                  • #84564
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::



                      @samiel
                      , ho dei dubbi sulla corretta formazione dei font virtuali, o meglio dei loro file che contengono le loro metriche (i tfm, per intenderci).

                      Infatti in greco codificato LGR la sequenza, per esempio, [tt]’w[/non forma una crenatura (kerning) fra l’apostrofo e la omega minuscola, ma forma una legatura, cioè, quindi, i due caratteri apostrofo e omega non vengono accostati, ma vengono sostituiti da omega con l’accento acuto, ciò da un altro carattere.

                      Ora le due dichiarazioni o comandi \greek e \otherlanguage{greek} fanno cose diverse; se posso immaginare correttamente quello che le rande funzionalmente diverse è che \otherlanguage{greek} (che è il vero comando che viene eseguito all’apertura dell’ambiente, dopo che si è aperto un gruppo, che varrà chiuso con \end{otherlanguae}) non esegue quella magia di \lowercase… \edef{~}{‘} che viene eseguita con il comando \greek. Questa magia in sostanza sembra dire che l’apostrofo è uguale a se stesso, ma non è così semplice, è un vero “dirty trick” con il quale si fanno cose, appunto, magiche, e che solo i wizard sanno fare (io non sono un wizard); c’è di mezzo un gioco di categorie dei caratteri, della effettiva posizione dell’apostrofo ricavato dai font OpenType, probabilmente dall’indirizzo che identifica la virgoletta alta aperta semplice, mentre l’apostrofo ASCII che usi nella definizione è il vero apostrofo, non la virgoletta alta. Insomma si tratta di raffinatezze che sfuggono alla comprensione di noi che non siamo non dotati di poteri magici.

                      Quello che ti suggerirei di fare è di estrarre la magia e assegnarla ad un comando, per esempio
                      `\def\adjustapostrophe{\begingroup\lccode`\~=`\'
                      \lowercase{\endgroup\edef~}{'}}` (l’ambiente code in questa posizione sembra non volerne sapere) poi di ridefinire \greek (facoltativo; in realtà lo puoi lasciare così com’è, ma se lo vuoi ridefinire, lo fai così: ) `\DeclareRobustCommand{\greek}{%
                      \fontencoding{LGR}\fontfamily{MinionPro-OsF}\selectfont
                      \def\encodingdefault{LGR}
                      \adjustapostrophe
                      }`
                      Poi all’interno di otherlanguage, all’inizio dell’argomento, aggiungi:`
                      \begin{otherlanguage}{greek}\adkustapostrophe s'wzein t`a fain'omena\end{otherlanguage}`

                      Ovviamente potresti rideifnre il comportamanto del comando di apertura dell’ambiente otherlanguage, come potresti aggiungere alle definizioni di \extrasgreek e \noextrasgreek quel comando \adjustapostrophe in modo da attivarlo quando entri in greco e di disattivarlo quando ne esci.

                      Si tratta di pezze (patch, tacón, e simili) ma il tutto dipende da come sono stati estratti i font Type 1 dai font MinionPro-OsF con il programma di installazione e creazione di tali font che hai usato.

                      Forse Enrico può trovare qualcosa che sia un rammendo più elegante, invece che una volgare toppa.

                    • #84565
                      samiel
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        Sì, capisco che \greektext e \begin{otherlanguage}… fanno cose diverse.
                        Però considera questo esempio:
                        `\documentclass[a4paper]{article}
                        \usepackage[T1]{fontenc}
                        %\usepackage{textcomp}
                        \usepackage[utf8]{inputenc}
                        \usepackage[polutonikogreek,italian]{babel}
                        \usepackage[opticals,fullfamily]{MinionPro}
                        \input glyphtounicode
                        \pdfgentounicode=1
                        \usepackage{microtype}

                        \DeclareRobustCommand{\greektext}{%
                        \fontencoding{LGR}\fontfamily{MinionPro-OsF}\selectfont
                        \def\encodingdefault{LGR}
                        \begingroup\lccode`\~=`\'
                        \lowercase{\endgroup\edef~}{'}%
                        }

                        % kerning dell'apostrofo
                        \makeatletter
                        \catcode`\'=12
                        \def\qu@te{'}
                        \catcode`'=\active
                        \begingroup
                        \obeylines\obeyspaces%
                        \gdef\@resetactivechars{%
                        \def^^M{\@activechar@info{EOL}\space}%
                        \def {\@activechar@info{space}\space}%
                        }%
                        \endgroup
                        \providecommand\texorpdfstring[2]{#1}
                        \protected\def'{\texorpdfstring{\texqu@te}{\string'}}
                        \def\texqu@te{\relax
                        \ifmmode
                        \expandafter^\expandafter\bgroup\expandafter\prim@s
                        \else
                        \expandafter\futurelet\expandafter\@let@token\expandafter\qu@t@
                        \fi}
                        \def\qu@t@{%
                        \ifx'\@let@token
                        \qu@te\qu@te\expandafter\@gobble
                        \else
                        {}\qu@te{}\penalty\@M\hskip\expandafter\z@skip
                        \fi}
                        \scantokens\expandafter{%
                        \expandafter\def\expandafter\pr@m@s\expandafter{\pr@m@s}}
                        \makeatother

                        \begin{document}

                        {\greektext t`a >'onta s'wzein t`a fain'omena, `a 'a “i r a| ~w, s~wma s~hma 'onta s'wzein t`a fain'omena, `a 'a “i r a| ~w, s~wma s~hma

                        Attachments:
                        You must be logged in to view attached files.
                      • #84566
                        OldClaudio
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Il fatto che la prima riga non gestisca la tilde è “normale”; anche in greco, se non si pone la tilde come carattere normale, invece che carattere attivo, essa si comporta come con i caratteri latini, cioè come uno spazio non separabile. Nello stesso tempo questo esempio e quello del tuo messaggio rpecedente sono assai diversi, perché qui l’apostrofo viene gestico come carattere attivo, mentre nell’altro esempio si trattava di un carattere normale (categoria 12) e la magia dell’\lccode e \lowercase era un trucco, descritto nella appendice D del texbokk per fare cose diverse dal solito, appoggiandosi ad un carattere attivo, la tilde, che localmente veniva rideifnta in modo acconcio.

                          Ora; vediamo di rimettere le cose a posto: la codifica LGR prevede le legature per mettere gli accenti sopra o sotto le varie lettere che li possono ricevere, ma nessun carattere è attivo; queste legature sono una proprietà dei font, non una propietà degli accenti. Solo la tilde è un po’ particolare, perché con i caratteri latini è un carattere attivo, quindi per usarlo in greco bisogna disattivarlo.

                          Il curatore di babel-greek (cioè della gestione del greco monotonico e politonico con babele, perché polyglossia si comporta diversamente) ha modificato pesantemente la gestione del greco da quando ne è diventato curaatore. Le legature per gli accenti sono sempre possibili, ma talvolta, come con la tilde, non funzionano se la tilde non è stata disattivata. Allora Miede ha escogitato due cose molto efficaci:
                          1) ha creato le macro per gli accenti greci che funzionano come le legature: se scrivi s\~wma ti esce correttamante la omegga con la tilde; se scrivi s~oma, ti esce, come esce a te, la sigma terminale seguita da uno spazio seguita da wma. Se scrivi \>\~ è la stessa cosa che scrivere \>~, cioè la prima macro dello spirito riconosce di essere seguita dalla tilde e quindi diventa il comando per gestire latilde con spirto dolce che resrà invariato se è seguito da una lettera che non può ricevere quel diacritico, m, altrimenti esegue la sostituzione de mediante la lettera accentata direttamente. In questo modo non si hanno problemi con le crenature, perché nel flusso di uscita, quello che pdftex gestisce per comporre il testo arriva solo il carattere accentato. Quindi se scrivi \>~A ai viene ῏Α, con i due segni adeguatamente crenati/accostati, mentre se scrivi \>~a ti viene ἆ.
                          2) Se usi la codifica utf8, senza dover fare nulla di speciale e usare pacchetti come ucs o opzioni come utf8x, come era in passato, puoi scrivere direttamante in greco nel testo sorgente, per averlo composto perfettamente nel testo di uscita.

                          I tuoi problemi, che avevi con il comando \greek e l’ambiente otherlanguage spariscono se semplicemente metti un backslash prima delle sequenze di accenti che ti danno problemi.
                          Il tutto dovrebbe essere leggibile con texdoc sia leggendo greek.pdf, sia leggendo test-greek.pdf test-unicode-greek.pdf (sono interessanti anche i file sorgente di questi due ultimi file; si trovano nella stessa cartella …/texmf-dist/doc/generic/babel/babel-greek). Ci sono anche altri file da leggere, ma questi credo che siano sufficienti.

                          Ciao
                          Claudio

                        • #84567
                          samiel
                          Partecipante
                            Up
                            0
                            Down
                            ::


                            La teoria è (relativamente) chiara, anche se si addice maggiormente
                            a un creatore di caratteri che a un semplice utente.
                            La pratica è, come spesso accade, un altro discorso.
                            Se lascio tutto invariato e aggiungo semplicemente
                            la backslash ai caratteri con il circonflesso, in modo che risulti
                            `{\greektext t`a >'onta s'wzein t`a fain'omena, `a 'a \”i r a| \~w, s\~wma s\~hma Fatal error occurred, no output PDF file produced!`
                            A meno che in realtà io abbia capito male e debba fare
                            qualcosa di diverso…

                            m

                          • #84568
                            OldClaudio
                            Partecipante
                              Up
                              0
                              Down
                              ::


                              La cosa non dipende dai backslash, ma dipende dal fatto che i Minion Pro non sono stati installati (almeno con il nome corretto) nella mappa dei fotn che pdflatex può usare.

                              Cerca il file pdftex.map (che non puoi modificare direttamente) e se i minion pro non ci sono aggiorna e sincornizza il file updmap.cfg con la situazione presente sualla tua macchina e riesegui il comando updmap-sys con i privilegi del caso..

                            • #84569
                              samiel
                              Partecipante
                                Up
                                0
                                Down
                                ::


                                Hai ragione (naturalmente)!
                                Il fatto è che dopo l’installazione avevo lanciato updmap-sys,
                                adesso l’ho ridato con l’opzione -enable-Map=MinionPro.map
                                e ha funzionato… A parte il fatto che:
                                `root@debian:~# locate pdftex.map
                                /usr/local/texlive/2013/texmf-dist/fonts/map/pdftex/updmap/pdftex.map
                                /usr/local/texlive/2013/texmf-var/fonts/map/pdftex/updmap/pdftex.map`
                                ce ne sono due. Melius abundare quam deficere…
                                In ogni caso qualcosa di strano c’era, come segnalavo nel post:
                                http://www.guitex.org/home/it/forum/5-tex-e-latex/89286-supporto-latex-per-minionpro

                                m

                              • #84570
                                OldClaudio
                                Partecipante
                                  Up
                                  0
                                  Down
                                  ::


                                  Quella che hai in texmf-var/ proabilmente è la mappa che hai generato in passato con updmap, mentre quella che hai in texmf-distr/ probabilmente è quella che hai generato con updamp-sys (o viceversa?) Controlla le date; se quella in texmf-var è la più recente va bene, visto che questo albero viene esaminato prima dell’altro.

                                  Il messaggio d’errore che avevi ricevuto era chiarissimo: pdflatex aveva cercato di generare i font mancanti lanciando METAFONT e, ovviamente, METAFONT non aveva trovato il file .mf. Questo succede sempre quando pdflatex non trova i font nella mappa pdftex.map e i font sono solo nel formato vettoriale. Per i font bitmapped pdflatex non ha bisogno di consultare la mappa pdftex.map.

                                • #84571
                                  samiel
                                  Partecipante
                                    Up
                                    0
                                    Down
                                    ::


                                    SI, per la prima cosa avevo già eliminato la mappa vecchia…

                                    Due ultime (spero) cose:
                                    1.
                                    il supporto LaTeX per MinionPro opera sugli otf.
                                    Poiché il font non è ancora installato, è ovvio che non si trova in pdf.tex
                                    I file vuoti sono allora innocui e posso cancellarli prima di copiare
                                    gli altri al loro posto? Oppure questo fatto determina una lacuna?

                                    2.
                                    Una cosa che continua a non tornarmi.
                                    Le “magiche righe” di Enrico stanno all’interno della definizione
                                    di \greektext. Tuttavia, se le ometto, anche \begin{otherlanguage}…
                                    non posizione correttamente spiriti e accenti.
                                    Come mai questa “estensione”?
                                    E non sarebbe possibile riformulare allora quelle righe
                                    in forma “generale”, visto che funzionano per tutto il greco?

                                    m

                                  • #84572
                                    OldClaudio
                                    Partecipante
                                      Up
                                      0
                                      Down
                                      ::


                                      Non so rispondere a nessuna delle due domande; mi spiace.

                                    • #84573
                                      samiel
                                      Partecipante
                                        Up
                                        0
                                        Down
                                        ::


                                        Beh, mi hai già tenuto un corso sul greco in questo post… 🙂

                                        ALmeno sul secondo problema dovrei chiedere aiuto
                                        all’autore delle mitiche “righe magiche” …

                                        m

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

                                    Go to top