Scalare Latin Modern Typewriter Proportional

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


      Probabilmente mi sto perdendo in un bicchiere d’acqua, ma avevo deciso
      di rendere delle URL in un testo col Latin Modern Typewriter Proportional,
      solo che risulta troppo grande rispetto al Serif che uso. Ora,
      `\renewcommand*\ttdefault[scaled=0.95]{lmvtt}
      \renewcommand*\ttdefault[scale]{lmvtt}`
      mi danno tutti errore. Come posso scalarlo?
      grazie
      m

      PS
      Per contro, funziona
      `\usepackage[scaled=.95,proportional,lightcondensed]{zlmtt}`

    Visualizzazione 11 filoni di risposte
    • Autore
      Risposte
      • #99139
        Up
        0
        Down
        ::


        Io userei XeLaTeX:
        `
        %!TEX TS-program = xelatex
        %!TEX encoding = UTF-8 Unicode

        \documentclass{article}

        \usepackage{fontspec}
        \setmainfont{Times New Roman}
        \setmonofont[Scale=MatchLowercase]{Latin Modern Mono}

        \begin{document}

        serif \texttt{mono}

        \end{document}
        `

        Ciao
        Ivan

      • #99140
        samiel
        Partecipante
          Up
          0
          Down
          ::


          Eh, so che con Xelatex certe operazioni sono assai semplici.
          Ma un Latin Modern possibile che non si possa scalare con pdflatex?

        • #99141
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Prova ad usare il pacchetto cfr-lm; esso usa i Latin Modern, ma attraverso ofnt virtuali cosicché hai tutte le possibili combinazioni. Le guide tematiche che tro vella sesione Documentazion/GuideTemariche di questo sito sono composte con quel pacchetto. A me non sembra che con quel pacchetto i tt proporzionali siano più grandi degli altri della stessa collezione, forse graze a diverse impostazioni die file .fd di descrizione dele famiglie di font, o forse per come sono congegnati i font virtuli che usano comunque i veri LAttin Moden.

            Inoltre tienei presente che anche i Latin Modern usabili con il pacchetto lmodern sono scalabili con continuità, benché dispongano dei corpi ottici; ca[isco che caricarli già scalati sarebbe meglio, ma puoi scalrli anche definendoti dei ocmandii adeguati mediante i comandi di basso livelli descritti, per esempio nella Guida Tematica sui font.

            Esiste un’altra possibilità che richiede un po’ di immaginazione edisponibità a fare attenzione di non combinare pasticci con i file.fd

            Visto che vuoi usare i font lmvtt, cercati il file corrispondente (non so come si chiami, ma penso che non sia difficile scoprirlo) te lo copi nella tau cartella di lavoro, poi modifichi le definizioni specificando un fattore di scala secondo la sintassi della guida fntguide (che leggi aprendo un terminale, scrivendoci dentro texdoc fntguide, premendo ; leggendo). Il file così modificato deve restare sempre nella tua cartella di lavoro, al massimo lo puoi mettere nel tuo albero personale (non quello locale, ma quello personale) e, dopo aver creato o aggiornato il filename dtabase del tuo albero personale, se la tua installazione lo richiede, lo puoi usare con qualunque documento in qualunque cartella tu lo crei, sempre e comunque al posto del file originale. Non puoi usare entrambi; o meglio puoi ma non nello stesso documento, ma devi ricordarti di eseguire qualche trucchetto.

            Perché con pdflatex queste cose non si possono fare in modo più semplice? perché pdflatex non può usare i font OpenTipe per i quali il pacchetto di gestione dei font OpenType, fontspec, può accedere alle loro proprietà. Ma pdflatex non può usare i font OpenTYpe, e quindi non può usare fontspec.

            Detto questo, i font tt Latin Modern proporzionali non sono perfetti, e hanno non pochi difetti; Nelle guide tematiche li ho dovuti togliere e lasciare i monospaziati; finché li usavo, non ho notato nessuna necessità di scalarli forse, appunto, perché il pacchetto cfr-lm lo fa già di suo.

          • #99142
            Up
            0
            Down
            ::

            samiel” post=98693Eh, so che con Xelatex certe operazioni sono assai semplici.
            Ma un Latin Modern possibile che non si possa scalare con pdflatex?

            Certo che si può scalare. Claudio ti ha indicato come fare e lui, senza dubbio saprebbe farlo.
            Lo ha fatto con il Porson per la classe suftesi, per esempio.
            Io posso dirti che, secondo me, non ne vale la pena. Ci sono soluzioni molto più semplici,
            che funzionano e non hanno inconvenienti. L’uso di XeLaTeX comporta limitazioni solo se si deve scrivere matematica avanzata (almeno così era fino a qualche tempo fa).
            Per la matematica semplice è diventato ormai equivalente a LaTeX.
            Quando ho iniziato ad usare LaTeX ho dovuto imparare come installare un font type1 per il quale disponevo solo della versione True Type. Non ti dico che lavoraccio.
            Conversione, generazione dei file con le metriche, ecc. È una cosa che non farei mai più, se non sotto tortura. Se qualcuno mi chiede come fare per usare un font simile, gli rispondo semplicemente di cambiare font. Bisogna accettare i limiti, in definitiva. C’è sicuramente un modo per adattare una Ferrari ai percorsi sterrati, ma è molto più semplice comprarsi un Hammer 😉

            Ciao
            Ivan

          • #99143
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::

              samiel” post=98693Eh, so che con Xelatex certe operazioni sono assai semplici.
              Ma un Latin Modern possibile che non si possa scalare con pdflatex?

              Come ti ho detto si può fare. Ivan ha ribadito che l’ho già fatto per la sua classe suftesi e il font Porson.

              Certo non puoi scalare i font usando il comando \renewcommand il cui unico argomento facoltativo lecito è il numero degli argomenti che possono essere gestiti dal comando che stai ridefinendo.

              Forse si potrebbe definre un comando che inserisce il fattore di scala nella descrizione del font; non ci ho mai provato, ma come dice Ivan non serve modificare una Ferrari per andare sullo sterrato. Lui propende per unHummer; io propoendo per un lavoretto sporco, da non imitare, ma che per un dato documento può servire.

              Assumo che tu stia usando la codifica T1 per tutti i latin modern compreso il teletype a spaziatura variabile. Allora bisogna modificare il file t1lmvtt.fd. Non serve andarlo a cercare sul tuo disco, perché qui te lo do già modificato; ti copia questo codice e salvalo con il nome t1lmvtt.fd nella cartela del tuo documento.`% This file belongs to the Latin Modern package. The work is released
              % under the GUST Font License. See the MANIFEST-Latin-Modern.txt and
              % README-Latin-Modern.txt files for the details. For the most recent version of
              % this license see http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
              % or http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt

              % QUESTO FILE E' MODIFICATO RISPETTO ALL'ORIGINALE MA, MALGRADO LA LICENZA NE CONSENTA
              % LA MAODIFICA, NON E' POSSIBILE CAMBIARGLI IL NOME COME LA LICENZA RICHIEDE.
              %
              % ******************************************
              % * LO SI USI A PROPRIO RISCHIO E PERICOLO *
              % ******************************************

              \ProvidesFile{t1lmvtt.fd}[2009/10/30 v1.6 Font defs for Latin Modern]
              \DeclareFontFamily{T1}{lmvtt}{}

              \ifx\lmtt@use@light@as@normal\@empty
              % macro defined, so we use the light variant as medium (m), and
              % medium as semi-bold (sb):
              \DeclareFontShape{T1}{lmvtt}{sb}{n}
              {<-> ec-lmvtt10}{}
              \DeclareFontShape{T1}{lmvtt}{sb}{sl}
              {<-> ec-lmvtto10}{}
              \DeclareFontShape{T1}{lmvtt}{sb}{it}
              {<->sub*lmvtt/m/sl}{}
              %%%%%%%% light (l) and dark (b) variants:
              \DeclareFontShape{T1}{lmvtt}{m}{n}
              {<-> ec-lmvtl10}{}
              \DeclareFontShape{T1}{lmvtt}{m}{sl}
              {<-> ec-lmvtlo10}{}
              \DeclareFontShape{T1}{lmvtt}{m}{it}
              {<->sub*lmvtt/l/sl}{}

              \else
              % usual setup of variants:
              \DeclareFontShape{T1}{lmvtt}{m}{n}
              {<-> [0.95] ec-lmvtt10}{}
              \DeclareFontShape{T1}{lmvtt}{m}{sl}
              {<-> [0.95] ec-lmvtto10}{}
              \DeclareFontShape{T1}{lmvtt}{m}{it}
              {<->sub*lmvtt/m/sl}{}
              %%%%%%%% light (l) and dark (b) variants:
              \DeclareFontShape{T1}{lmvtt}{l}{n}
              {<-> [0.95] ec-lmvtl10}{}
              \DeclareFontShape{T1}{lmvtt}{l}{sl}
              {<-> [0.95] ec-lmvtlo10}{}
              \DeclareFontShape{T1}{lmvtt}{l}{it}
              {<->sub*lmvtt/l/sl}{}
              \fi
              % bold is always bold (b):
              \DeclareFontShape{T1}{lmvtt}{b}{n}
              {<-> [0.95] ec-lmvtk10}{}
              \DeclareFontShape{T1}{lmvtt}{b}{sl}
              {<-> [0.95] ec-lmvtko10}{}
              \DeclareFontShape{T1}{lmvtt}{b}{it}
              {<->sub*lmvtt/b/sl}{}
              \DeclareFontShape{T1}{lmvtt}{bx}{n}
              {<->ssub*lmvtt/b/n}{}
              \DeclareFontShape{T1}{lmvtt}{bx}{sl}
              {<->ssub*lmvtt/b/sl}{}
              \DeclareFontShape{T1}{lmvtt}{bx}{it}
              {<->sub*lmvtt/b/sl}{}
              \endinput
              %%
              %% End of file `t1lmvtt.fd'.`

              Vedrai che fra parentesi quadre tro 0.95; sostituiscine il valore con quello che più si adatta con gli altri tuoi font. Qui ti metto un esempio minimo compilabile.`\documentclass{article}
              \usepackage[T1]{fontenc}
              \usepackage{lmodern}
              \renewcommand*\ttdefault{lmvtt}

              \begin{document}
              \sffamily Questo testo viene scritto con un font lineare, mentre
              \ttfamily questo testo viene scritto in teletype a spaziatura variabile.
              \end{document}`

              Se al posto di 0.95 ci metti 0.5 vedi un cambio drammatico…; ovviamente non devi usare un fattore di scala così piccolo, ma te lo dicevo solo per mostrarti l’effetto di quei comandi.
              Siccome non mi hai detto quali altri font stai usando con questi lmvtt, non sono ingrado di mettere qualche altra cosa al posto di 0.95, che ho messo solo a titolo d’esempio.

              Questa non è un Hummer, ma è una comune vetture con i pneumatici MD (mud and snow).

              [EDIT] Aggiunta di una modifica.

              Ti propongo una modifica che ti rende il lavoro più semplice.

              Prendi il file t1lmvtt.fd e sostituisci il valore 0.95 in tutte le sue posizioni con la macro [tt]\lmvtt@scale@factor[/tt]. poi prova il seguente esempio minimo compilabile:`\documentclass{article}
              % Define commands for setting a scaling factor for Latin Modern Variable teletype fonts
              % (only T1 encoded)
              \usepackage{etoolbox}
              % Provide a default value
              \csdef{lmvtt@scale@factor}{1.0}
              % define a setting command
              \newcommand*\scalelmvttfonts[1]{\csdef{lmvtt@scale@factor}{#1}}

              \usepackage[T1]{fontenc}
              % before first mention of lmvtt fonts set a value different from default
              \scalelmvttfonts{0.95}
              \usepackage{lmodern}
              \renewcommand*\ttdefault{lmvtt}

              \begin{document}

              \sffamily Questo testo viene scritto con un font lineare, mentre \ttfamily questo testo viene scritto in teletype a spaziatura variabile.
              \end{document}`

              Semplicemente usando la macro \scalelmvttfonts con un argomento diverso da 1.0 puoi vedere i risultati senza bisogno di modificare ogni volta il file .fd.

              Va da sé che il file .fd, comunque, deve restare confinato nella cartella del documento dove ne vuoi fare uso.

            • #99144
              samiel
              Partecipante
                Up
                0
                Down
                ::


                Tempo fa mi ero creato la versione “scaled” di qualche font (ad esempio l’Avantguarde
                prima che il clone fosse disponibile nei TeX Gyre) creando il file .sty e il relativo .fd.
                Procedura peraltro relativamente lunga e noiosa… Quando mi chiedevo se fosse possibile
                scalarlo intendevo dire se eragiò disponibile l’opzione scaled. Grazie a OldClaudio per il codice.
                Il font che uso nel testo è l’EB Garamond, per questo il LM risulta un po’ più grande.
                In ogni caso è vero, troppa fatica per un font usato per pochissimi URL, meglio ricorrere
                a Xelatex o semplicemente cambiare font 🙂

                m

              • #99145
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Già, non ci avevo pensato; con u file.sty tutto si ridurrebbe a chiamare il pacchetto con un’opzione costituita dal fattore di scala. Molto più semplice. Se vuoi ti scrivo il file .sty.

                  In realtà mi domando perché, specialmente per i Latin Modern che sono scalabili con continuità a tratti non ci abbiano pensato quelli del GUST.

                • #99146
                  samiel
                  Partecipante
                    Up
                    0
                    Down
                    ::

                    Se vuoi ti scrivo il file .sty.

                    Troppo lusso !! 🙂
                    Forse non c’è molto da cambiare rispetto a quello
                    che avevo creato tempo addietro per Avantgarde…
                    `\ProvidesPackage{myavant}
                    \RequirePackage{keyval}
                    \define@key{AVG}{scaled}[.95]{%
                    \def\AVG@scale{#1}}
                    \def\ProcessOptionsWithKV#1{%
                    \let\@tempc\relax
                    \let\AVG@tempa\@empty
                    \ifx\@classoptionslist\relax\else
                    \@for\CurrentOption:=\@classoptionslist\do{%
                    \@ifundefined{KV@#1@\CurrentOption}%
                    {}%
                    {%
                    \edef\AVG@tempa{\AVG@tempa,\CurrentOption,}%
                    \@expandtwoargs\@removeelement\CurrentOption
                    \@unusedoptionlist\@unusedoptionlist
                    }%
                    }%
                    \fi
                    \edef\AVG@tempa{%
                    \noexpand\setkeys{#1}{%
                    \AVG@tempa\@ptionlist{\@currname.\@currext}%
                    }%
                    }%
                    \AVG@tempa
                    \let\CurrentOption\@empty
                    }
                    \ProcessOptionsWithKV{AVG}
                    \AtEndOfPackage{%
                    \let\@unprocessedoptions\relax
                    }
                    \renewcommand{\sfdefault}{pagscaled}
                    \endinput`

                  • #99147
                    OldClaudio
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Usando il pacchetto xkeyval le definizioni per le opzioni sono più semplici; mettendo nel pacchetto anche la descrizione del font modificata con l’aggiunta del fattore di scala, si ha il duplice vantaggio di poter specificare con una opzione il fattore di scala nella chiamata del pacchetto, e non si ha nessuna interferenza fra la descrizione dei font di questo pacchetto e quella degli altri font; quindi puoi salvarlo nel tuo albero personale e usarlo con qualunque documento.`\NeedsTeXFormat{LaTeX2e}
                      \ProvidesPackage{lmvttscaled}[2014/12/19 v.1.0 Load Latin Modern variable teletype font with appropriate scale factor]
                      \RequirePackage{xkeyval}
                      \DeclareOptionX{scalefactor}[1.0]{\def\lmvtt@scale@factor{#1}}
                      \DeclareOptionX*{PackageWarning{lmvttscaled}{`\CurrentOption' ignored}}
                      \ExecuteOptionsX{scalefactor=1.0}
                      \ProcessOptionsX

                      \DeclareFontFamily{T1}{lmvtt}{}

                      \ifx\lmtt@use@light@as@normal\@empty
                      % macro defined, so we use the light variant as medium (m), and
                      % medium as semi-bold (sb):
                      \DeclareFontShape{T1}{lmvtt}{sb}{n}
                      {<-> [\lmvtt@scale@factor] ec-lmvtt10}{}
                      \DeclareFontShape{T1}{lmvtt}{sb}{sl}
                      {<-> [\lmvtt@scale@factor] ec-lmvtto10}{}
                      \DeclareFontShape{T1}{lmvtt}{sb}{it}
                      {<->sub*lmvtt/m/sl}{}
                      %%%%%%%% light (l) and dark (b) variants:
                      \DeclareFontShape{T1}{lmvtt}{m}{n}
                      {<-> [\lmvtt@scale@factor] ec-lmvtl10}{}
                      \DeclareFontShape{T1}{lmvtt}{m}{sl}
                      {<-> [\lmvtt@scale@factor] ec-lmvtlo10}{}
                      \DeclareFontShape{T1}{lmvtt}{m}{it}
                      {<->sub*lmvtt/l/sl}{}

                      \else
                      % usual setup of variants:
                      \DeclareFontShape{T1}{lmvtt}{m}{n}
                      {<-> [\lmvtt@scale@factor] ec-lmvtt10}{}
                      \DeclareFontShape{T1}{lmvtt}{m}{sl}
                      {<-> [\lmvtt@scale@factor] ec-lmvtto10}{}
                      \DeclareFontShape{T1}{lmvtt}{m}{it}
                      {<->sub*lmvtt/m/sl}{}
                      %%%%%%%% light (l) and dark (b) variants:
                      \DeclareFontShape{T1}{lmvtt}{l}{n}
                      {<-> [\lmvtt@scale@factor] ec-lmvtl10}{}
                      \DeclareFontShape{T1}{lmvtt}{l}{sl}
                      {<-> [\lmvtt@scale@factor] ec-lmvtlo10}{}
                      \DeclareFontShape{T1}{lmvtt}{l}{it}
                      {<->sub*lmvtt/l/sl}{}
                      \fi
                      % bold is always bold (b):
                      \DeclareFontShape{T1}{lmvtt}{b}{n}
                      {<-> [\lmvtt@scale@factor] ec-lmvtk10}{}
                      \DeclareFontShape{T1}{lmvtt}{b}{sl}
                      {<-> [\lmvtt@scale@factor] ec-lmvtko10}{}
                      \DeclareFontShape{T1}{lmvtt}{b}{it}
                      {<->sub*lmvtt/b/sl}{}
                      \DeclareFontShape{T1}{lmvtt}{bx}{n}
                      {<->ssub*lmvtt/b/n}{}
                      \DeclareFontShape{T1}{lmvtt}{bx}{sl}
                      {<->ssub*lmvtt/b/sl}{}
                      \DeclareFontShape{T1}{lmvtt}{bx}{it}
                      {<->sub*lmvtt/b/sl}{}
                      \AtBeginDocument{\renewcommand*\ttdefault{lmvtt}}

                      \endinput` Puoi verificare con questo esempio minimo`\documentclass{article}

                      \usepackage[T1]{fontenc}

                      \usepackage{lmodern}
                      \usepackage[scalefactor=0.9]{lmvttscaled}

                      \begin{document}

                      \sffamily Questo testo viene scritto con un font lineare, mentre \ttfamily questo testo viene scritto in teletype a spaziatura variabile.

                      \end{document}`L’opzione alla chiamata del pacchetto è facoltativa, nel senso che se non specifichi nessun fattore di scala viene usato il valore unitario.

                    • #99148
                      samiel
                      Partecipante
                        Up
                        0
                        Down
                        ::


                        grazie mille,
                        adesso è troppo tardi, ma domani provo

                        m

                      • #99149
                        samiel
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Due quesiti:
                          1) i file lmvttscaled deve avere estensione .sty?
                          2) lo salvo in una directory qualsiasi di /usr/local/texlive/texmf-local
                          e poi devo anche lanciare a) mktexlsr, b) updmap-sys, c) fc-cache -fv ?

                          m

                        • #99150
                          OldClaudio
                          Partecipante
                            Up
                            0
                            Down
                            ::

                            samiel” post=98791Due quesiti:
                            1) i file lmvttscaled deve avere estensione .sty?
                            2) lo salvo in una directory qualsiasi di /usr/local/texlive/texmf-local
                            e poi devo anche lanciare a) mktexlsr, b) updmap-sys, c) fc-cache -fv ?

                            m

                            1) Sì.
                            2) Potresti se alla tua macchina accedono più utenti; altrimenti io lo metterei nell’albero personale ~/texmf/tex/latex/lmvttscalati/
                            3) Tre domande, tre risposte:
                            a) con TeXLive nell’albero personale non serve fare nulla; con il ramo /texmf-local bisogna eseguire mktexlsr.
                            b) non ci sono font coinvolti, solo le lor descrizioni, cioè le interfacce fa l’utente e LaTeX; i font effettivamante usati sono gli stessi Latin Modern Variable-width TeleType che si usano senza scalarli, ma con questo pacchetto le informazioni di caricamento prevedono un fattore di scala.
                            c) fc-cache -fv che io sappia serve per aggiornare la cache dei font OpenType e TrueType da usare con xelatex e (in modo più complesso) da lualatex; con pdflatex ci vuole solo la mappa dei font che non va cambiata perché non sono coinvolti nuovi font.

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

                        Go to top