% \iffalse meta-comment % % Copyright 2006-2010 Will Robertson % Copyright 2009-2010 Elie Roux % Copyright 2009-2010 Khaled Hosny % % Distributable under the LaTeX Project Public License, % version 1.3c or higher (your choice). The latest version of % this license is at: http://www.latex-project.org/lppl.txt % % This work is "maintained" (as per LPPL maintenance status) % by Will Robertson. % % This work consists of the file euenc.dtx and various derived files. % %<*dtxinfo> \ProvidesFile{euenc.dtx} % %\ProvidesFile{eu1enc.def} %\ProvidesFile{eu2enc.def} %<*eu1|eu2> [2010/05/27 v0.1h Experimental Unicode font encodings] % % %<*internalbatchfile> \begingroup % %<*batchfile> \input docstrip.tex \keepsilent \preamble _____________________________________ The EUENC bundle Will Robertson, Elie Roux, Khaled Hosny License information appended. \endpreamble \postamble Copyright 2006-2010 Will Robertson Copyright 2009-2010 Elie Roux Copyright 2009-2010 Khaled Hosny Distributable under the LaTeX Project Public License, version 1.3c or higher (your choice). The latest version of this license is at: http://www.latex-project.org/lppl.txt This work is "maintained" (as per LPPL maintenance status) by Will Robertson. This work consists of the file \jobname.dtx and various derived files. \endpostamble \askforoverwritefalse \generate{\file{eu1enc.def}{\from{\jobname.dtx}{eu1}}} \generate{\file{eu2enc.def}{\from{\jobname.dtx}{eu2}}} \generate{\file{test-euxlm.ltx}{\from{\jobname.dtx}{lmtest}}} % %\endbatchfile %<*internalbatchfile> \generate{\file{euenc.ins}{\from{\jobname.dtx}{batchfile}}} \generate{\file{euenc-style.sty}{\from{\jobname.dtx}{dtx-style}}} \nopreamble\nopostamble \generate{\file{convert-lmfd.sh}{\from{\jobname.dtx}{lmscript}}} \generate{\file{sed-eu1lm.sed}{\from{\jobname.dtx}{eu1sedlm}}} \generate{\file{sed-eu2lm.sed}{\from{\jobname.dtx}{eu2sedlm}}} \endgroup % % %<*driver> \documentclass{ltxdoc} \EnableCrossrefs \CodelineIndex \RecordChanges %\OnlyDescription \usepackage{euenc-style} \begin{document} \DocInput{euenc.dtx} \end{document} % % % \fi % % \CheckSum{0} % \errorcontextlines=999 ^^A% Show up all my mistakes % \GetFileInfo{euenc.dtx} % % \title{The Experimental Unicode `\EUx' Encodings} % \author{Will Robertson \and Elie Roux \and Khaled Hosny} % \date{\filedate \qquad \fileversion} % % \maketitle % % \begin{abstract}\noindent % This file documents some experimental Unicode font encodings, % used for \XeTeX\ and Lua\TeX. Includes Latin Modern font definitions for version 1.6 and later of those fonts. % \end{abstract} % % \tableofcontents % % \section{Introduction} % % \LaTeX's font encoding system provides a method for ensuring that % characters in a document can be rendered properly by glyphs in the output. % It is also a sensible system for typesetting multilingual documents % while remaining within \TeX's restrictions of 8-bit fonts. % % When \XeTeX\ came along, no work had been done on using % this infrastructure for Unicode fonts. For one thing, the notion of a well-defined % font encoding --- which neatly pigeonholes a font into a category of containing % a specific set of glyphs --- doesn't work so well when designers have % an essentially unrestricted selection of glyphs they may add to their fonts. % % Both technical advantages of \LaTeX's font encodings --- error checking, and % multilingual typesetting --- were no longer relevant with \XeTeX, due to % impracticality for the former and redundancy in the latter; \XeTeX's support % of OpenType fonts obviates the need for font switching (for glyph coverage only) by necessity when changing % languages, although multiple fonts will often be used for stylistic purposes. % % Nonetheless, font encodings are tied inextricably into \LaTeX's font selection % mechanisms. For the first couple of years of \XeTeX's life, defined font families % were placed in the |U| encoding; appropriate, given the Unicode initial, but % \emph{inappropriate} within the framework of \LaTeX\ itself. The |U| encoding % stands for `undefined', to be used for fonts that contain glyphs that are essentially % arbitrary; for example, a Dingbats font. % % Since \XeLaTeX\ documents didn't interact with the `regular' world so much, % this overloading of the encoding didn't really matter in the long run. But eventually, % it became apparent that it would be appropriate to use font encodings to represent % Unicode subsets and/or different methods of font loading. With the advent of Lua\TeX, % this latter use has justified the approach originally taken here. % % % \section{The \EU1 encoding} % % The \EU1 encoding represents the first attempt of providing a % standard \LaTeX\ encoding for Unicode fonts. % At present, it loads and defines nothing in terms of declaring text % glyphs and accents. That r\^{o}le is played for now by Ross Moore's \pkg{xunicode} % package; in the future I hope some of that package will migrate here. % % Because we can assume that all current \TeX\ distributions will % contain the Latin Modern OpenType fonts (\path{fonts/opentype/public/lm}), % these are selected as the default fonts. More details on this later. % % I am now defining the convention that \EU1 encoded fonts have no % necessary subsets of Unicode. Perhaps in the future this will be restricted % to fonts that support Unicode accent characters. % % Furthermore, no restrictions are made on the method used to load the font. % \XeTeX\ allows fonts of two types: system installed fonts (also accessible % via regular applications or programs); and `local' fonts, which are specified % by filename to be found either in a |texmf| tree of the local directory. % \iffalse %<*eu1> % \fi % \begin{macrocode} \DeclareFontEncoding{EU1}{}{} \DeclareErrorFont{EU1}{lmr}{m}{n}{10} \DeclareFontSubstitution{EU1}{lmr}{m}{n} % \end{macrocode} % The |:| character needs to be sanitised in case \pkg{babel} makes it active: % \begin{macrocode} \g@addto@macro\nfss@catcodes{\@makeother:} % \end{macrocode} % \changes{v0.1d}{2008/03/08}{Bug fix for French babel.} % \iffalse % % \fi % % \section{The \EU2 encoding} % % The \EU2 encoding is to be used with Lua\TeX. It is the same as % \EU1 for now; the actual difference is in the font definition files. % % \iffalse %<*eu2> % \fi % \begin{macrocode} \DeclareFontEncoding{EU2}{}{} \DeclareErrorFont{EU2}{lmr}{m}{n}{10} \DeclareFontSubstitution{EU2}{lmr}{m}{n} % \end{macrocode} % The |:| character needs to be sanitised in case \pkg{babel} makes it active: % \begin{macrocode} \g@addto@macro\nfss@catcodes{\@makeother:} % \end{macrocode} % \iffalse % % \fi % % \section{The Latin Modern OpenType fonts} % % Version 0.1g of \pkg{euenc} supports version~1.6 of the LM fonts, released in October 2009. % % \subsection{Conversion scripts} % The |.fd| files are converted from the \enc{T1} encoding % with the following shell script. % Only the package maintainers need to be able to run this script and those following. % % \subsubsection{Encoding conversion shell script} % % \iffalse %<*lmscript> % \fi % \begin{macrocode} sed -f sed-eu1lm.sed `kpsewhich t1lmr.fd` > eu1lmr.fd sed -f sed-eu1lm.sed `kpsewhich t1lmdh.fd` > eu1lmdh.fd sed -f sed-eu1lm.sed `kpsewhich t1lmss.fd` > eu1lmss.fd sed -f sed-eu1lm.sed `kpsewhich t1lmssq.fd` > eu1lmssq.fd sed -f sed-eu1lm.sed `kpsewhich t1lmvtt.fd` > eu1lmvtt.fd sed -f sed-eu2lm.sed `kpsewhich t1lmr.fd` > eu2lmr.fd sed -f sed-eu2lm.sed `kpsewhich t1lmdh.fd` > eu2lmdh.fd sed -f sed-eu2lm.sed `kpsewhich t1lmss.fd` > eu2lmss.fd sed -f sed-eu2lm.sed `kpsewhich t1lmssq.fd` > eu2lmssq.fd sed -f sed-eu2lm.sed `kpsewhich t1lmvtt.fd` > eu2lmvtt.fd sed -f sed-eu1lm.sed -e \ 's/:mapping=tex-text//g' `kpsewhich t1lmtt.fd` > eu1lmtt.fd sed -f sed-eu2lm.sed -e \ 's/;.trep;.tlig;//g' `kpsewhich t1lmtt.fd` > eu2lmtt.fd % \end{macrocode} % \iffalse % % \fi % % \subsubsection{Encoding conversion \texttt{sed} scripts} % The shell script above requires the following |sed| scripts. % % \paragraph{Sed scripts} % \iffalse %<*eu1sedlm,eu2sedlm> % \fi % \begin{macrocode} /^%.*/d %s/{T1}/{EU1}/g %s/t1lm/eu1lm/g %s/{T1}/{EU2}/g %s/t1lm/eu2lm/g s/ec-lmri\([0-9]*\)/lmroman\1-italic/g s/ec-lmro\([0-9]*\)/lmromanslant\1-regular/g s/ec-lmr\([0-9]*\)/lmroman\1-regular/g s/ec-lmcsco\([0-9]*\)/lmromancaps\1-oblique/g s/ec-lmcsc\([0-9]*\)/lmromancaps\1-regular/g s/ec-lmbxo\([0-9]*\)/lmromanslant\1-bold/g s/ec-lmbxi\([0-9]*\)/lmroman\1-bolditalic/g s/ec-lmbx\([0-9]*\)/lmroman\1-bold/g s/ec-lmbo\([0-9]*\)/lmromandemi\1-oblique/g s/ec-lmb\([0-9]*\)/lmromandemi\1-regular/g s/ec-lmdunh\([0-9]*\)/lmromandunh\1-regular/g s/ec-lmduno\([0-9]*\)/lmromandunh\1-oblique/g s/ec-lmss\([0-9]\{1,\}\)/lmsans\1-regular/g s/ec-lmsso\([0-9]\{1,\}\)/lmsans\1-oblique/g s/ec-lmssdc\([0-9]\{1,\}\)/lmsansdemicond\1-regular/g s/ec-lmssdo\([0-9]\{1,\}\)/lmsansdemicond\1-oblique/g s/ec-lmssbx\([0-9]\{1,\}\)/lmsans\1-bold/g s/ec-lmssbo\([0-9]\{1,\}\)/lmsans\1-boldoblique/g s/ec-lmssq\([0-9]\{1,\}\)/lmsansquot\1-regular/g s/ec-lmssqo\([0-9]\{1,\}\)/lmsansquot\1-oblique/g s/ec-lmssqbx\([0-9]\{1,\}\)/lmsansquot\1-bold/g s/ec-lmssqbo\([0-9]\{1,\}\)/lmsansquot\1-boldoblique/g s/ec-lmtt\([0-9]\{1,\}\)/lmmono\1-regular/g s/ec-lmtto\([0-9]\{1,\}\)/lmmonoslant\1-regular/g s/ec-lmtti\([0-9]\{1,\}\)/lmmono\1-italic/g s/ec-lmtcsc\([0-9]\{1,\}\)/lmmonocaps\1-regular/g s/ec-lmtcso\([0-9]\{1,\}\)/lmmonocaps\1-oblique/g s/ec-lmtl\([0-9]\{1,\}\)/lmmonolt\1-regular/g s/ec-lmtlo\([0-9]\{1,\}\)/lmmonolt\1-oblique/g s/ec-lmtk\([0-9]\{1,\}\)/lmmonolt\1-bold/g s/ec-lmtko\([0-9]\{1,\}\)/lmmonolt\1-boldoblique/g s/ec-lmtlc\([0-9]\{1,\}\)/lmmonoltcond\1-regular/g s/ec-lmtlco\([0-9]\{1,\}\)/lmmonoltcond\1-oblique/g s/ec-lmvtt\([0-9]\{1,\}\)/lmmonoprop\1-regular/g s/ec-lmvtto\([0-9]\{1,\}\)/lmmonoprop\1-oblique/g s/ec-lmvtl\([0-9]\{1,\}\)/lmmonoproplt\1-regular/g s/ec-lmvtlo\([0-9]\{1,\}\)/lmmonoproplt\1-oblique/g s/ec-lmvtk\([0-9]\{1,\}\)/lmmonoproplt\1-bold/g s/ec-lmvtko\([0-9]\{1,\}\)/lmmonoproplt\1-boldoblique/g %s/\(>.[ ]*\)\(lm[a-z0-9\-]\{1,\}\)/\1"[\2]:mapping=tex-text"/g %s/\(>.[ ]*\)\(lm[a-z0-9\-]\{1,\}\)/\1file:\2:script=latn;+trep;+tlig;/g % \end{macrocode} % \changes{v0.1}{2007/01/18}{`ssdc' and `ssdo' were switched with the upright for some reason.} % \changes{v0.1d}{2008/03/08}{Missed typewriter italic somehow.} % \changes{v0.1e}{2008/05/14}{Oblique mono was wrong (?!).} % \iffalse % % \fi % % % \section{Latin Modern test file} % Adapted and improved from my Prac\TeX\ Journal article on the Latin Modern fonts. % % \iffalse %<*lmtest> % \fi % \begin{macrocode} \documentclass[12pt]{article} \usepackage[margin=2.5cm]{geometry} \newenvironment{vrb} {\begin{tabular}{@{}p{7cm}l@{}}} {\end{tabular}} \usepackage{fancyvrb} \DefineShortVerb{\|} \usepackage{slantsc} \usepackage{ifluatex} \usepackage{ifxetex} \ifxetex \def\EU{EU1} \else \ifluatex \usepackage{luaotfload} \def\EU{EU2} \else \def\EU{T1} \fi \fi \usepackage[\EU]{fontenc} \usepackage{lmodern} \begin{document} \title{Testing the Latin Modern \texttt{\EU} encoding} \author{Will Robertson} \maketitle \thispagestyle{empty} \pagestyle{empty} \section*{Roman} \fontfamily{lmr}\selectfont \begin{vrb} |\rmdefault| & {\selectfont Latin Modern Roman} \\ | \itshape| & {\itshape Latin Modern Roman Italic} \\ | \slshape| & {\slshape Latin Modern Roman Oblique} \\ | \scshape| & {\scshape Latin Modern Roman Small Caps} \\ | \slshape| & {\scshape\slshape Latin Modern Roman Oblique Small Caps} \\ | \bfseries| & {\bfseries Latin Modern Roman Bold Extended} \\ | \itshape| & {\bfseries\itshape Latin Modern Roman Bold Italic Extended} \\ | \slshape| & {\bfseries\slshape Latin Modern Roman Bold Oblique Extended} \\ | \fontseries{b}| & {\fontseries{b}\selectfont Latin Modern Roman Bold} \\ | \fontseries{b}\slshape| & {\fontseries{b}\slshape Latin Modern Roman Bold Oblique} \\ \end{vrb} \section*{Dunhill} \fontfamily{lmdh}\selectfont \begin{vrb} |\fontfamily{lmdh}\selectfont| & {Latin Modern Dunhill} \\ | \slshape| & {\slshape Latin Modern Dunhill Oblique} \\ \end{vrb} \section*{Sans} \fontfamily{lmss}\selectfont \begin{vrb} |\sffamily| & {\selectfont Latin Modern Sans} \\ | \slshape| & {\slshape Latin Modern Sans Oblique} \\ | \bfseries| & {\bfseries Latin Modern Sans Bold} \\ | \slshape| & {\bfseries\slshape Latin Modern Sans Bold Oblique} \\ | \fontseries{sbc}\selectfont| & {\fontseries{sbc}\selectfont Latin Modern Sans Demi Condensed} \\ | \slshape| & {\fontseries{sbc}\selectfont\slshape Latin Modern Sans Demi Condensed Oblique} \\ \end{vrb} \section*{Sans Quotation} \fontfamily{lmssq}\selectfont \begin{vrb} |\renewcommand\sfdefault{lmssq}| \\ |\sffamily | & {\selectfont Latin Modern Sans Extended} \\ | \slshape | & {\slshape Latin Modern Sans Extended Oblique} \\ | \bfseries | & {\bfseries Latin Modern Sans Bold Extended} \\ | \slshape | & {\bfseries\slshape Latin Modern Sans Bold Extended Oblique} \\ \end{vrb} \section*{Typewriter} \fontfamily{lmtt}\selectfont \begin{vrb} |\ttfamily | & {\selectfont Latin Modern Typewriter} \\ | \itshape | & {\itshape Latin Modern Typewriter Italic} \\ | \slshape | & {\slshape Latin Modern Typewriter Oblique} \\ | \scshape | & {\scshape Latin Modern Typewriter Small Caps} \\ | \scshape\slshape | & {\scshape\slshape Latin Modern Typewriter Oblique Small Caps} \\ | \bfseries | & {\bfseries Latin Modern Typewriter Dark} \\ | \slshape | & {\bfseries\slshape Latin Modern Typewriter Dark Oblique} \\ | \fontseries{b}\selectfont | & {\fontfamily{lmtt}\fontseries{b}\selectfont Latin Modern Typewriter Dark} \\ | \fontseries{b}\slshape | & {\fontfamily{lmtt}\fontseries{b}\slshape Latin Modern Typewriter Dark Oblique} \\ | \fontseries{l}\selectfont | & {\fontfamily{lmtt}\fontseries{l}\selectfont Latin Modern Typewriter Light} \\ | \fontseries{l}\slshape | & {\fontfamily{lmtt}\fontseries{l}\slshape Latin Modern Typewriter Light Oblique} \\ | \fontseries{lc}\selectfont | & {\fontfamily{lmtt}\fontseries{lc}\selectfont Latin Modern Typewriter Light Condensed} \\ | \fontseries{lc}\slshape | & {\fontfamily{lmtt}\fontseries{lc}\slshape Latin Modern Typewriter Light Condensed Oblique} \\ \end{vrb} \section*{Variable-width Typewriter} \fontfamily{lmvtt}\selectfont \def\fixedspacing{\fontdimen3\font0pt\fontdimen4\font0pt} \begin{vrb} |\renewcommand\ttdefault{lmvtt}| \\ |\ttfamily | & {\selectfont \fixedspacing Latin Modern Typewriter Proportional} \\ | \slshape | & {\slshape \fixedspacing Latin Modern Typewriter Proportional Oblique} \\ | \fontseries{l}\selectfont | & {\fontseries{l}\selectfont \fixedspacing Latin Modern Typewriter Proportional Light} \\ | \fontseries{l}\slshape | & \mbox{\fontseries{l}\slshape \fixedspacing Latin Modern Typewriter Proportional Light Oblique} \\ | \fontseries{b}\selectfont | & {\fontseries{b}\selectfont \fixedspacing Latin Modern Typewriter Proportional Dark} \\ | \fontseries{b}\slshape | & \mbox{\fontseries{b}\slshape \fixedspacing Latin Modern Typewriter Proportional Dark Oblique} \\ \end{vrb} \end{document} % \end{macrocode} % \iffalse % % \fi % % \clearpage % \PrintChanges % % \clearpage % % \PrintIndex % % \Finale % %\iffalse % %<*dtx-style> % \begin{macrocode} \ProvidesPackage{euenc-style} \def\@dotsep{1000} \setcounter{tocdepth}{2} \setlength\columnseprule{0.4pt} \renewcommand\tableofcontents{\relax \begin{multicols}{2}[\section*{\contentsname}]\relax \@starttoc{toc}\relax \end{multicols}} \setcounter{IndexColumns}{2} \renewenvironment{theglossary} {\small\list{}{} \item\relax \glossary@prologue\GlossaryParms \let\item\@idxitem \ignorespaces \def\pfill{\hspace*{\fill}}} {\endlist} \usepackage{booktabs,calc,color,fancyvrb,graphicx,ifthen,refstyle,url,varioref} \usepackage{metalogo} \usepackage{tgpagella,eulervm} \usepackage[scaled=1.1]{inconsolata} \usepackage[ bookmarks=true, colorlinks=true, linkcolor=niceblue, urlcolor=niceblue, citecolor=niceblue, pdftitle={The Experimental Unicode 'EUx' Encodings}, pdfsubject={Experimental Unicode font encodings for Unicode TeX engines}, pdfauthor={Will Robertson}, pdfkeywords={xetex, xelatex, luatex, lualatex, unicode, fontenc} ]{hyperref} \definecolor{niceblue}{rgb}{0.4,0.6,1.000} \newenvironment{example} {\hrulefill\par\VerbatimEnvironment \begin{VerbatimOut}[gobble=4]{\examplefilename}} {\end{VerbatimOut}\relax \begingroup \color{niceblue} \typesetexample \endgroup\par\hrulefill} \let\examplesize\normalsize \let\auxwidth\relax \newlength\examplewidth\newlength\verbatimwidth \newlength\exoutdent \newlength\exverbgap \setlength\exverbgap{1em} \setlength\exoutdent{-0.15\textwidth} \newsavebox\verbatimbox \edef\examplefilename{\jobname.example} \newcommand\typesetexample{\relax \begin{lrbox}{\verbatimbox}\relax \BVerbatimInput[fontsize=\small]{\examplefilename}\relax \end{lrbox} \begin{list}{}{\setlength\itemindent{0pt} \setlength\leftmargin\exoutdent \setlength\rightmargin{0pt}}\item \ifx\auxwidth\relax \setlength\verbatimwidth{\wd\verbatimbox}\relax \else \setlength\verbatimwidth{\auxwidth}\relax \fi \begin{minipage}[c]{\textwidth-\exoutdent-\verbatimwidth-\exverbgap} \catcode`\%=14\centering\examplesize\input\examplefilename\relax \end{minipage}\hfill \begin{minipage}[c]{\verbatimwidth} \usebox\verbatimbox \end{minipage} \end{list} \global\let\examplesize\normalsize} \newcommand*\setexsize[1]{\let\examplesize#1} \newcommand*\setverbwidth[1]{\def\auxwidth{#1}} \newcommand*\name[1]{{#1}} \newcommand*\pkg[1]{\textsf{#1}} \newcommand*\enc[1]{\texttt{#1}} \let\latin\textit \def\eg{\latin{e.g.}} \def\ie{\latin{i.e.}} \def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}} %% LOGOS, tuned for Pagella: \setlogokern{Te}{-0.12em}% \setlogokern{eT}{-0.12em}% \setlogokern{eX}{-0.12em}% \setlogokern{Xe}{-0.12em}% \setlogokern{La}{-0.3em}% \setlogokern{aT}{-0.12em}% \setlogokern{eL}{-0.1em} \def\MacOSX{Mac~OS~X} \DeclareRobustCommand\ExTeX{\textrm{\relax \ensuremath{\textstyle\varepsilon_{\kern-0.15em\mathcal{X}}}\relax \kern-.15em\TeX}} \def\EU#1{\enc{EU#1}} \def\EUx{\enc{EU$x$}} %% (La)TeX font-related declarations: \linespread{1.05} % Pagella needs more space between lines \frenchspacing % Remove ugly extra space after punctuation % \end{macrocode} % %\fi % % \makeatother % \typeout{*************************************************************} % \typeout{*} % \typeout{* To finish the installation you have to move the following} % \typeout{* files into a directory searched by LaTeX:} % \typeout{*} % \typeout{* \space\space\space eu1enc.def, \space eu2enc.def, \space eu*.fd, } % \typeout{*} % \typeout{*************************************************************} % \endinput