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.