Re: Font greci “stile codice” dentro un codice listing

#55617
lorenzo.pantieri
Partecipante
    Up
    0
    Down
    ::


    Cari Enrico e Claudio, permettetemi di chiedervi ancora qualche chiarimento.

    Ricapitolo: nel mio documento (che per la cronaca non può usare teubner, visto che usa pesantemente amsmath) ho bisogno di due comandi: uno, diciamo \greco, per inserire il testo greco “normale”, e l’altro, diciamo \grecosf, da usare esclusivamente all’interno di codici ottenuti con listings, che produca font greci sans serif.

    Come primo tentativo avevo pensato a questo codice (compilabile):
    `\documentclass{scrreprt}
    \usepackage[writefile]{listings}
    \usepackage{classicthesis-ldpkg}
    \usepackage[beramono]{classicthesis}
    \usepackage[polutonikogreek,italian]{babel}
    \usepackage[italian]{arsclassica}

    \newcommand{\greco}[1]{%
    \begin{otherlanguage*}{greek}#1\end{otherlanguage*}}

    \newcommand{\grecosf}[1]{%
    \begin{otherlanguage*}{greek}\sffamily#1\end{otherlanguage*}}

    \lstset{basicstyle=\normalfont\ttfamily,frame=lines}
    \lstset{escapeinside={£*}{*£}}

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

    \begin{document}
    \greco{abc}
    \begin{codice}
    £*\grecosf{abc}*£
    \end{codice}
    \end{document}`
    Come vedete, mentre \greco è perfetto, \grecosf non funziona: la colpa è di ArsClassica (se lo si commenta funziona benissimo).

    Adesso provo con il codice suggerito da Enrico.
    `\documentclass{scrreprt}
    \usepackage[writefile]{listings}
    \usepackage{classicthesis-ldpkg}
    \usepackage[beramono]{classicthesis}
    \usepackage[polutonikogreek,italian]{babel}
    \usepackage[italian]{arsclassica}

    \newcommand{\greco}[1]{%
    \begin{otherlanguage*}{greek}
    \testfamily#1%
    \end{otherlanguage*}}

    \newcommand{\greeksf}{\fontfamily{cmss}\selectfont}
    \makeatletter
    \edef\grs@sans{\sfdefault}
    \edef\grs@tt{\ttdefault}
    \def\testfamily{%
    \ifx\f@family\grs@sans\greeksf\fi
    \ifx\f@family\grs@tt\greeksf\fi}
    \makeatother
    \DeclareFontFamily{LGR}{\ttdefault}{}
    \DeclareFontShape{LGR}{\ttdefault}{m}{n}{<->cmtt10}{}
    \DeclareFontFamily{LGR}{\sfdefault}{}
    \DeclareFontShape{LGR}{\sfdefault}{m}{n}{<->cmss10}{}

    \lstset{basicstyle=\normalfont\ttfamily,frame=lines}
    \lstset{escapeinside={£*}{*£}}

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

    \begin{document}
    \greco{abc}
    \begin{codice}
    £*\greco{abc}*£
    \end{codice}

    \greeksf{abc}
    \begin{codice}
    £*\greeksf{abc}*£
    \end{codice}

    \end{document}`
    Mi pare che il comando \greeksf non faccia niente (a me vengono fuori lettere latine, non greche), mentre \greco vada bene: fuori da listings produce greco normale, dentro listings produce greco sans serif. Ho capito bene?

    Non sarebbe possibile avere due comandi distinti, \greco e \grecosf? A me questo \greco
    `\newcommand{\greco}[1]{%
    \begin{otherlanguage*}{greek}#1\end{otherlanguage*}}
    `
    va benissimo, e (se possibile) non vorrei toccarlo: è di \grecosf che ho bisogno…

    Grazie,
    L.

    Go to top