after having handwaved myself through the ideas of specifying glyph collections rather than font encodings, here is a "hand waving" sort of implementation of the idea. basically \fontencoding is changed to accept a comma list of encodings and \selectfont is changed to try these encodings in order (keeping the other font characteristics) until it finds a font or runs out of encodings. in the latter case it trys to find a font by changing the characteristics to defaults. the latter process could and should be made smarter, eg given encodings T1,OT1 family xxx series yyy shape zzz it will try T1/xxx/yyy/zzz OT1/xxx/yyy/zzz T1/xxx/yyy/<defaultshape> T1/xxx/<defaultseries>/<defaultshape> T1/<defaultfamily>/<defaultseries>/<defaultshape> FAIL instead of T1/xxx/yyy/zzz OT1/xxx/yyy/zzz T1/xxx/yyy/<defaultshape> OT1/xxx/yyy/<defaultshape> T1/xxx/<defaultseries>/<defaultshape> OT1/xxx/<defaultseries>/<defaultshape> ... which might be a better approach. anyway, here it is and it seems to work more or less. what do you think? frank --------------------------- glyphcoll.tex \documentclass{article} \usepackage[T1,OT6,OT1]{fontenc} \makeatletter \DeclareRobustCommand\fontencoding[1]{\edef\glyph@collection{#1}} \DeclareRobustCommand\Xfontencoding[1]{% \expandafter\ifx\csname T@#1\endcsname\relax \@latex@error{Encoding scheme `#1' unknown}\@eha \else \edef\f@encoding{#1}% \ifx\cf@encoding\f@encoding \let\enc@update\relax \else \let\enc@update\@@enc@update \fi \fi } \DeclareRobustCommand\Xselectfont {% \ifx\f@linespread\baselinestretch \else \set@fontsize\baselinestretch\f@size\f@baselineskip \fi \expandafter\get@next@encoding\glyph@collection,\@nil \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \Xpickup@font \font@name \size@update \enc@update } \def\get@next@encoding#1,#2\@nil{% \Xfontencoding{#1}% \def\sub@glyph@collection{#2}% } \def\Xpickup@font{% \@font@warning{Trying for \font@name ...}% \expandafter \ifx \font@name \relax \Xdefine@newfont \fi} \def\Xdefine@newfont{% \@font@warning{ ... undefined ... try to load it ...}% \begingroup \let\typeout\@font@info \escapechar\m@ne \expandafter\expandafter\expandafter \split@name\expandafter\string\font@name\@nil \try@load@fontshape % try always \expandafter\ifx \csname\curr@fontshape\endcsname \relax \@font@warning{ ... unloadable ... }% \Xwrong@fontshape\else \@font@warning{ ... loadable ... extract it}% \extract@font\fi \endgroup} \def\Xwrong@fontshape{% \expandafter\get@next@encoding\sub@glyph@collection,\@nil \ifx\f@encoding\@empty \expandafter\get@next@encoding\glyph@collection,\@nil \wrong@fontshape \else \xdef\font@name{% \csname\curr@fontshape/\f@size\endcsname}% \Xpickup@font \fi } \makeatother \begin{document} \fontfamily{cmr} \fontencoding{OT6,T1}\selectfont AA \fontfamily{ptm}\selectfont BB \fontseries{b}\selectfont CC \showoutput \stop