Lettere greche in un codice – listings

  • Creatore
    Topic
  • #83179
    Up
    0
    Down
    ::


    Ciao a tutti,

    nella tesi che sto scrivendo avrei bisogno di inserire del codice Mathematica con il quale ho svolto dei calcoli. In questo codice compaiono diverse lettere greche. Non trovo alcun modo per inserirle anche nel codice scritto con l’uso del pacchetto [tt]listings.[/tt] Voi ne conoscete uno? Riporto un breve codice compilabile con il quale, chi è più esperto di me e pensa di potermi dare una mano, possa fare delle prove.
    `\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}

    \usepackage{etex}
    \usepackage{etoolbox}
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[greek,italian]{babel}
    \usepackage{microtype}

    \usepackage{listings}
    \lstset{language=Mathematica,
    basicstyle=\footnotesize\ttfamily,
    keywordstyle=\footnotesize\bfseries,
    identifierstyle=,
    commentstyle=\color{grigioScuro},
    stringstyle=\ttfamily,
    showstringspaces=false,
    numbers=left,
    numberstyle=\tiny}

    \begin{document}

    \begin{lstlisting}
    \[Sigma]
    \end{lstlisting}

    \end{document}`

    Grazie mille e buona giornata,
    Marco.

Visualizzazione 17 filoni di risposte
  • Autore
    Risposte
    • #83180
      admin
      Amministratore del forum
        Up
        0
        Down
        ::


        Non ho capito bene cosa vuoi, comunque, se scrivi `escapechar={|}` in [tt]\lstset[/tt] e poi scrivi `\[|$\sigma$|]` esce una sigma.

        Ciao,
        Orlando

      • #83181
        Up
        0
        Down
        ::


        Altra possibilità: http://www.guitex.org/home/it/forum/5-tex-e-latex/73104-listings-e-unicode#73113

        egreg9″ post=73113[tt]\lstset{literate={ä}{\”a}1{ö}{\”o}1{ü}{\”u}1}[/tt]

        Aggiungi tutte le lettere che ti servono.

        Ciao
        Enrico

      • #83182
        Up
        0
        Down
        ::


        Ciao Orlando,

        intanto grazie davvero! 😀 Il risultato in cui speravo è proprio quello che ottengo con il codice che mi hai indicato. Non so perché, ma nel copia-incolla viene aggiunto [tt]\[ [/tt] prima del simbolo e [tt]][/tt] dopo. In realtà io voglio solo la lettera greca sigma. Ora provo a cercare un font a spaziatura fissa che supporti le lettere greche (se stessi usando XeLaTeX userei il font che Mathematica mette a disposizione del sistema).

        Ciao e grazie,
        Marco.

      • #83183
        Up
        0
        Down
        ::


        Ciao Elrond,

        non riesco a usare il codice che mi hai suggerito per far scrivere le lettere greche. Cercando in rete ho trovato questo codice di Enrico:
        `\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}

        \usepackage{etex}
        \usepackage{etoolbox}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage[greek,italian]{babel}
        \usepackage{microtype}

        \usepackage{listings}
        \lstset{language=Mathematica,
        basicstyle=\footnotesize\ttfamily,
        keywordstyle=\footnotesize\bfseries,
        identifierstyle=,
        commentstyle=\color{grigioScuro},
        stringstyle=\ttfamily,
        showstringspaces=false,
        numbers=left,
        numberstyle=\tiny,
        escapechar={|}}

        \newcommand{\greco}[1]{%
        \begin{otherlanguage*}{greek}
        \ifincode\greekcodefont\fi#1
        \end{otherlanguage*}}
        \newcommand{\greekcodefont}{\fontfamily{neohellenic}\selectfont}
        \newif\ifincode

        \lstnewenvironment{codice}%
        {\incodetrue\setkeys{lst}{columns=fullflexible,keepspaces=true}%
        \lstset{basicstyle=\small\ttfamily,escapeinside={£*}{*£}}%
        }%
        {}

        \begin{document}

        \begin{codice}
        £*\greco{s}*£ £*\greco{s}*£Table
        \end{codice}

        \end{document}`
        ma sorgono due problemi:

        1. La sigma che viene scritta è quella che compare al termine delle parole greche (se non sbaglio);
        2. La scritta che segue la lettera sigma è staccata da essa di uno spazio, mentre mi piacerebbe poterle avere attaccate.

        Ci sarà un modo per ovviare a questi problemi?

        Grazie e ciao,
        Marco.

      • #83184
        Up
        0
        Down
        ::


        Ti faccio l’esempio per qualche lettera, non chiedermi di ricopiare tutto l’alfabeto greco 🙂
        `\documentclass{article}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage{lmodern}

        \usepackage{listings}
        \lstset{
        language=Mathematica,
        basicstyle=\footnotesize\ttfamily,
        keywordstyle=\footnotesize\bfseries,
        identifierstyle=,
        commentstyle=\color{grigioScuro},
        stringstyle=\ttfamily,
        showstringspaces=false,
        numbers=left,
        numberstyle=\tiny,
        literate={α}{{\ensuremath{\alpha}}}1
        {β}{{\ensuremath{\beta}}}1
        {γ}{{\ensuremath{\gamma}}}1
        {µ}{{\ensuremath{\mu}}}1
        }
        \begin{document}
        \begin{lstlisting}
        αβγµ
        \end{lstlisting}
        \end{document}`
        Evidenze svantaggio: devi ricopiarti tutto l’alfabeto o almeno le lettere che utilizzi. Vantaggio: puoi usare senza modificarlo il codice originale, se include lettere greche come nel mio esempio (ho dato per scontato che fosse così)

        Edit: non conosco Mathematica, non so quale sia l’output che può dare, se nel codice hai [tt]\[Sigma][/tt] come nel tuo esempio allora devi usare istruzioni del tipo
        `literate={\\[Sigma]}{{\ensuremath{\Sigma}}}1`
        e poi nel codice da dare in pasto a listings puoi usare [tt]\[Sigma][/tt]

      • #83185
        Up
        0
        Down
        ::


        Ciao Elrond,

        grazie! 🙂

        Elrondnon chiedermi di ricopiare tutto l’alfabeto greco 🙂

        Ci mancherebbe! In realtà, però, Mathematica non copia mai il carattere greco, ma al massimo riesco a ottenere [tt]\alpha.[/tt] Con il codice del mio terzo messaggio se scrivo:
        `\begin{lstlisting}
        |$\alpha$|
        \end{lstlisting}`
        ottengo proprio la lettera α. Il problema è che così facendo il font usato non è quello a spaziatura fissa. Per questo avevo optato per il codice proposto da Enrico.

        Grazie comunque e buona serata,
        Marco.

      • #83186
        Up
        0
        Down
        ::

        Marco87″ post=82534Ciao Elrond,

        non riesco a usare il codice che mi hai suggerito per far scrivere le lettere greche. Cercando in rete ho trovato questo codice di Enrico:
        `\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}

        \usepackage{etex}
        \usepackage{etoolbox}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage[greek,italian]{babel}
        \usepackage{microtype}

        \usepackage{listings}
        \lstset{language=Mathematica,
        basicstyle=\footnotesize\ttfamily,
        keywordstyle=\footnotesize\bfseries,
        identifierstyle=,
        commentstyle=\color{grigioScuro},
        stringstyle=\ttfamily,
        showstringspaces=false,
        numbers=left,
        numberstyle=\tiny,
        escapechar={|}}

        \newcommand{\greco}[1]{%
        \begin{otherlanguage*}{greek}
        \ifincode\greekcodefont\fi#1
        \end{otherlanguage*}}
        \newcommand{\greekcodefont}{\fontfamily{neohellenic}\selectfont}
        \newif\ifincode

        \lstnewenvironment{codice}%
        {\incodetrue\setkeys{lst}{columns=fullflexible,keepspaces=true}%
        \lstset{basicstyle=\small\ttfamily,escapeinside={£*}{*£}}%
        }%
        {}

        \begin{document}

        \begin{codice}
        £*\greco{s}*£ £*\greco{s}*£Table
        \end{codice}

        \end{document}`
        ma sorgono due problemi:

        1. La sigma che viene scritta è quella che compare al termine delle parole greche (se non sbaglio);
        2. La scritta che segue la lettera sigma è staccata da essa di uno spazio, mentre mi piacerebbe poterle avere attaccate.

        Ci sarà un modo per ovviare a questi problemi?

        Grazie e ciao,
        Marco.

        Lo spazio lo metti tu. 🙂
        `\newcommand{\greco}[1]{%
        \begin{otherlanguage*}{greek}
        \ifincode\greekcodefont\fi#1% <--- Eccolo qui! \end{otherlanguage*}}` Per avere la sigma mediale, scrivi [tt]\gcode{s\noboundary}[/tt] Ma ti consiglio una definizione diversa per usare lettere greche nel codice: `\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont#1\noboundary}}` e così risolvi il problema molto meglio, senza accrocchi nel comando [tt]\greco[/tt]. Ciao Enrico

      • #83187
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::

          Ma ti consiglio una definizione diversa per usare lettere greche nel codice:
          `\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont#1\noboundary}}`
          e così risolvi il problema molto meglio, senza accrocchi nel comando \greco.

          Se vuoi il font greco a spaziatura fissa devi usare la famiglia a spaziatura fissa:
          `\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont\ttfamily#1\noboundary}}`
          Poi può piacerti di più o di meno, ma almeno è quallo che dovrebbe accompagnarsi con i font di testo se il file di descrizione dei font è corretto; lo è se usi font CM, oppure CM-super, oppure Latin Modern; se usi altri font allora devi leggere come fare nella documentazione del pacchetto teubner, per crearti i file grlxxxx.fd necessari per lavorare con la famiglia di font xxxx della collezione di caratteri che stai usando.

          Il comando [tt]\noboundary[/tt] è quello giusto e trattandosi di una macro non richiede il segno di commento dopo. Per altro il font greci che ho creato e che sono di default con la codifica LGR, possono usare la lettera v dopo la sigma (o dopo qualunque lettera, ma per le altre non è necessario) al fine di non farla sembrare una sigma finale, ma di rappresentarla come una sigma mediale; in sostanza v sostituisce [tt]\nobondary[/tt]; tutto ciò è documentato nella descrizione dei font greci leggibile con il comando texdoc greek dato dal terminale, ma secondo me è più chiaro leggendo la documentazione di teubner: texdoc teubner-doc da pagina 5 a pagina 8;; tieni presente che nell’esempio di pagina 7 compare uno switch [tt]\Lipsiandtrue[/tt] che contiene un rifuso come si capisce leggendo qualche riga più avanti; lo switch corretto è [tt]\Lipsiantrue[/tt] (me ne sono accorto ora cercando il riferimento per te — ora provvedo a correggere il file e chiederne la sostituzione nell’archivi CTAN e nella distribuzione TeX Live — per MiKTeX ci vuole più tempo…:-( )

        • #83188
          Up
          0
          Down
          ::


          Ciao,

          grazie infinite a Enrico e Claudio per le vostre soluzioni e le vostre spiegazioni. In effetti funzionano entrambe; l’unica differenza è che se scrivo:

          egreg9`\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont#1\noboundary}}`

          o

          OldClaudio`\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont\ttfamily#1\noboundary}}`

          ottengo due font diversi, ma entrambi mi sembrano a spaziatura fissa (nel documento il font di default è il Bera Mono).

          Grazie ancora e buona giornata,
          Marco.

        • #83189
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Per sapere se sono davvero entrambi a spaziatura fissa, oppure se soltanto sembrano tali, apri il file pdf con Adobe Acrobat, e premmi Ctrl+D; scegli la linguetta Fonts e leggi i nomi dei font usati; se per il font greco ottieni grmn1000 (o con un altro numero come 1200 o simili, che rappresenta il corpo ottico moltiplicato per 100) vuol dire che hai l’equivalente del tondo (il greco non ha il tondo in senso stretto) proporzionale; mentre se ottieni grtt1000, hai il greco monospaziato. siccome stai scrivendo un listato e, in particolare, la lettera greca che scrivi non fa parte di una parola, ma è un simbolo isolato, è molto probabile che lstlisting te la faccia apparire adeguatamente spaziata dagli altri simboli adiacenti, per cui non noti la spaziatura diversa.

            Usando il Bera Mono, potrebbe essere utile usare la procedura descritta in teubner per essere sicuro di avere la famiglia greca corrispondente a quella del testo circostante. Ma se il risultato del listato ti piace comunque, resta pure così.

          • #83190
            Up
            0
            Down
            ::


            Ciao Claudio,

            grazie della spiegazione. Ho provato a fare come mi hai detto. Usando il tuo codice il font usato, mi viene detto, è gttn1000. Usando il codice di Enrico non mi compare ne l’uno ne l’altro caso (fra grmn1000 e grtt1000) ma GFSNeohellenic-Regular.

            Per quanto riguarda l’uso del Bera Mono, invece, ho capito poco di quello che bisogna fare. Cercando di seguire la guida, ho visto nella documentazione del pacchetto [tt]beramono[/tt] che la famiglia monospaziata regolare dovrebbe chiamarsi “fvm”. Perciò ho scritto questo codice:
            `\documentclass[a4paper,11pt,extrafontsizes,twoside,openright]{memoir}

            \usepackage{etex}
            \usepackage{etoolbox}
            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage[greek,italian]{babel}
            \usepackage{microtype}
            \usepackage{xcolor}

            \usepackage{teubner}
            \usepackage[scaled=.85]{beramono}
            \Lipsiantrue
            \ifFamily{fvm}{cmr}

            \usepackage{listings}
            \lstset{language=Mathematica,
            basicstyle=\footnotesize\ttfamily,
            keywordstyle=\footnotesize\bfseries,
            identifierstyle=,
            commentstyle=\color{gray},
            stringstyle=\ttfamily,
            showstringspaces=false,
            numbers=left,
            numberstyle=\tiny,
            escapechar={|}}

            \newcommand{\greekcodefont}{\fontfamily{neohellenic}\selectfont}
            \newif\ifincode

            \lstnewenvironment{codice}%
            {\incodetrue\setkeys{lst}{columns=fullflexible,keepspaces=true}%
            \lstset{basicstyle=\small\ttfamily,escapeinside={|}{|}}%
            }%
            {}

            \newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont\ttfamily#1\noboundary}}

            \begin{document}

            \begin{codice}
            |\gcode{s}|Table
            (* commento *)
            \end{codice}

            \end{document}`
            Ma non viene usato il Bera Mono anche se al posto di [tt]neohellenic[/tt] nella definizione di [tt]\greekcodefont[/tt] sostituisco [tt]beramono[/tt] o [tt]fvm.[/tt]

            Cosa sbaglio? 🙁

            Ciao e grazie,
            Marco.

          • #83191
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Niente; Non è che per scrivere con pdflate e il beramono per il testo in caratteri latini, vai ad usare il beramno con i caratteri greci; usi invece i gttn e quello che hai ottenuto è corretto. Non so da dove vengano i Neohellenic di Enrico, forse da una impostazione accessoria del pacchetto beramono, mah. Comunque è corretto che epr scirvere in greco monospaziato con i font greci di default si usino i gttnXXXX.

              Ciao
              Claudio

            • #83192
              Up
              0
              Down
              ::

              Marco87″ post=82540Ciao,

              grazie infinite a Enrico e Claudio per le vostre soluzioni e le vostre spiegazioni. In effetti funzionano entrambe; l’unica differenza è che se scrivo:

              `\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont#1\noboundary}}`

              o

              OldClaudio`\newcommand{\gcode}[1]{\foreignlanguage{greek}{\greekcodefont\ttfamily#1\noboundary}}`

              ottengo due font diversi, ma entrambi mi sembrano a spaziatura fissa (nel documento il font di default è il Bera Mono).

              Grazie ancora e buona giornata,
              Marco.

              Mi pare ovvio. Dal momento che la riga
              `\newcommand{\greekcodefont}{\fontfamily{neohellenic}\selectfont}`
              è nel tuo codice, pensavo sapessi che fa: sceglie il font NeoHellenic che ha un aspetto vagamente simile a quello di Bera Mono, ma non è a spaziatura fissa.

              Se aggiungi [tt]\ttfamily[/tt] sei fritto: invece di NeoHellenic, ti trovi il normale font greco usato per il testo, perché non esistono né Bera Mono in codifica LGR né un font a spaziatura fissa per NeoHellenic.

              Ciao
              Enrico

            • #83193
              Up
              0
              Down
              ::


              Ciao,

              OldClaudioNiente; Non è che per scrivere con pdflate e il beramono per il testo in caratteri latini, vai ad usare il beramno con i caratteri greci; usi invece i gttn e quello che hai ottenuto è corretto.

              Credo proprio di aver capito; grazie.

              egreg9[…] Dal momento che la riga

              `\newcommand{\greekcodefont}{\fontfamily{neohellenic}\selectfont}`
              è nel tuo codice, pensavo sapessi che fa: sceglie il font NeoHellenic che ha un aspetto vagamente simile a quello di Bera Mono, ma non è a spaziatura fissa.

              Se aggiungi [tt]\ttfamily[/tt] sei fritto: invece di NeoHellenic, ti trovi il normale font greco usato per il testo, perché non esistono né Bera Mono in codifica LGR né un font a spaziatura fissa per NeoHellenic.

              Hai ragione, non ho prestato attenzione a quel passaggio. In realtà quel codice deriva da un copia-incolla più alcune prove.

              Credo che per i codici userò i Bera Mono, per le lettere non greche, e il NeoHellenic per quelle greche, a meno che non riscontri delle controindicazioni. Comunque mi resta una domanda: esiste un font a spaziatura fissa, che non sia o Computer Modern o Latin Modern, che abbia font greci e che possa usare con pdfLaTeX? (Nel “LaTeX Font Catalogue” non mi sembra che venga fornita questa indicazione sui font).

              Grazie ancora e buona giornata,
              Marco.

            • #83194
              OldClaudio
              Partecipante
                Up
                0
                Down
                ::


                Tra i font opentype ci sono diversi font monospaziati che contengono alche il greco, ma nessuno o molto pochi sono per tutte le piataforme, ma sono system dependent.

                Forse fra i pochi usabili c’è UMTypewriter, ma dubito che sia sostanzialmente diverso dai vari typewriter latini, greci, cirillici, eccetera messi assieme in un unico contenitore; infatti sono stati predisposti da Apostolos Syropoulos tra il 2008 e il 2009, come dice il suo copyright, e sono sicuro che sono un collage die varu font tt sparsi fra le diverse polizze standard del sistema TeX; forse ha preso qualche glifo da qualche altro font, (non riconosco come mio il coppa antico minuscolo, per esempio) ma in sostanza un testo scritto in typewriter UMTypewriter-Regular.otf non si distingue da un testo scritto con i font tt latini e greci usabili con pdflatex.

                Ci sarebbe la collezione GNU-freefont, con il FreeMono.otf che certamente è diverso dagli UMTypewriter,

                Bello è i Linux Libertine Mono (file LinMono_M.otf; chissà se fra i font Libertine usabili con pdflatex c’è anche questo già manipolato per essere usato con pdflatex (che non può maneggiare direttamente i font OpenType)?

                Ciao
                Claudio

              • #83195
                Up
                0
                Down
                ::


                Ciao,

                ho dato un’occhiata al Linux Libertine Mono, e ho scoperto dalla documentazione che, proprio da gennaio 2013, supporta anche il carattere monospaziato. Il problema, per me, è che non si può caricare il pacchetto per il solo carattere monospaziato.

                Non so se dico una cosa sensata o no, ma missà che un giorno passerò a XeLaTeX anche per i documenti che prevedono la matematica. L’unico limite che vedo per ora è la microtipografia, ma mi pare che stiano lavorando in tal senso.

                Grazie e buona serata,
                Marco.

              • #83196
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Marco, la microtipografia è una bella cosa senz’altro, ma se scarichi la versione beta che già in tanti abbiamo scaricato, vedrai che anche solamente la protrusione risolve una buona parte die problemi di buona composizione e buona giustificazione.

                  Per quel che mi riguarda ho già composto tante cose con XeLaTeX e non ho avuto problemi di sorta. Assolutamente. Gestisci i font OpenType con disinvoltura, anche se bisogna un po’ imparare ad usarli bene; per il resto l’uso e il risultato finale non sono inferiori a quello che si pu`ø ottenere con microtipografia completa che può usare pdflatex.

                  Il quale pdflatex, sia ben chiaro, riesce ad eseguire anche l’operazine di “font expansion and contraction”” purché esistano i file descrittivi particolari di microtype realtivi ai font che si vogliono espandere e contrarre; non tutti i font sono descritti con questi particolari file (i Bera Mono, per esempio, non mi pare che dispongano di tali file); dunque non sempre si ottiene il risultato ottimale con pdflatex.

                  Naturalmente questi particolari file esistono per i font standard, in particolare per i Latin Modern; anche la verisone beta adatta a xelatex ha i file particolari per i Latin Moderrn, sia pure solo per la protrusione.

                  Dunque, vedi, non è tutto oro quello che luce. Per fortuna con il nostro ben amato sistema TeX i risultati sono sempre eccellenti, sempre che non siamo noi stessi a compiere degli errori compositivi perché manchiamo della cultura tipografica di veri professionisti.

                • #83197
                  Up
                  0
                  Down
                  ::


                  Ciao Claudio,

                  grazie delle spiegazioni. 🙂 Bene, allora appena ho tempo sperimenterò anche l’ultima versione beta di [tt]microtype.[/tt]

                  Grazie e buona giornata,
                  Marco.

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

              Go to top