La “soluzione” per (3) che sto sperimentando è:
`\makeatletter
\lst@Key{addtobasicstyle}\relax{%
\toks@=\expandafter{\lst@basicstyle #1}%
\edef\lst@basicstyle{\the\toks@}}
\makeatother`
Ho trovato di meglio 🙂 In rosso sono le aggiunte al codice di \lstinline:
`\makeatletter
\lst@Key{addtobasicstyle}\relax{%
\toks@=\expandafter{\lst@basicstyle #1}%
\edef\lst@basicstyle{\the\toks@}}
\def\calc@current@size{%
\edef\current@size{%
\noexpand\fontsize{\f@size}{\f@baselineskip}\noexpand\selectfont}}
\renewcommand\lstinline[1][]{%
\leavevmode\bgroup % \hbox\bgroup \bgroup
\calc@current@size
\def\lst@boxpos{b}%
\lsthk@PreSet
\lstset{flexiblecolumns,addtobasicstyle=\current@size,#1}%
\lsthk@TextStyle
\@ifnextchar\bgroup{\afterassignment\lst@InlineG \let\@let@token}%
\lstinline@}
\makeatother`
In questo modo \lstinline userà sempre il corpo corrente, perché la chiamata di \currentsize viene eseguita dopo eventuali \small (o simili) dati come valore di basicstyle. È possibile anche scrivere
`\lstinline[addtobasicstyle=\tiny]!Pippo!`
e ottenere un corpo più piccolo. Certo, viene valutato il corpo da scegliere due o tre volte, ma fra tutte le macro eseguite da \lstinline a ogni chiamata, il rallentamento non si dovrebbe sentire.
Non c’è più bisogno di definire un comando diverso, \lstinline userà sempre, a meno che non si specifichi qualcos’altro con basicstyle o addtobasicstyle, il corpo corrente.
Ciao
Enrico