summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/latex-uni8
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-16 22:27:39 +0000
committerKarl Berry <karl@freefriends.org>2019-01-16 22:27:39 +0000
commitc9a9749afe93ec038e88e295e3190c13d4ff2d07 (patch)
tree8f1a7bdaa6a399b3823419ccc892452f3b645eb4 /Master/texmf-dist/tex/latex/latex-uni8
parenta156fa469363be1d0b84e3da6bcbc475a9cf3940 (diff)
latex-uni8 (16jan19)
git-svn-id: svn://tug.org/texlive/trunk@49729 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/latex-uni8')
-rw-r--r--Master/texmf-dist/tex/latex/latex-uni8/uni8.sty281
1 files changed, 281 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/latex-uni8/uni8.sty b/Master/texmf-dist/tex/latex/latex-uni8/uni8.sty
new file mode 100644
index 00000000000..c6b4402346a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/latex-uni8/uni8.sty
@@ -0,0 +1,281 @@
+%
+% uni8.sty: Universal inputenc, fontenc and babel for pdflatex + lualatex
+% by pts@fazekas.hu at Fri Jan 11 15:48:05 CET 2019
+%
+% License for uni8.sty: LPPL (https://opensource.org/licenses/LPPL)
+%
+% See the project page https://github.com/pts/latex-uni8 for example files
+% and the latest updates.
+%
+% uni8.sty does these:
+%
+% * It sets up hyphenation patterns correctly for pdflatex and lualatex,
+% with or without fontspec.
+% * It works with pdflatex and lualatex.
+% * It works with hyperref.sty.
+% * It works with color.sty and xcolor.sty.
+% * It defines \ul for underlining text.
+% * It sets the default fonts with [font=...] options.
+% * It sets the input encoding with [inputenc=...] options.
+% * It loads fontspec.sty with the [fontspec] option.
+% * It sets the page size based on [a4paper] etc. to \documentclass.
+% * It hides useless warnings about inputenc.sty or t1enc.sty by magyar.ldf.
+%
+% See README.txt for more features and detailed documentation.
+%
+\ProvidesPackage{uni8}[2019/01/14 v0.03 Universal inputenc, fontenc and babel for pdflatex + lualatex]
+
+% Extra customization from .tex: \PassOptionsToPackage{hungarian}{babel}
+
+% Defaults.
+\def\@univ@font{cm}
+\def\@univ@inputenc{utf8}\def\@univ@inputenc@isutfe{1}
+\def\@univ@fontspec{0}
+
+\DeclareOption{fontspec}{\def\@univ@fontspec{1}}
+\DeclareOption{fontspec=yes}{\def\@univ@fontspec{1}}
+\DeclareOption{fontspec=no}{\def\@univ@fontspec{0}}
+\DeclareOption{inputenc=utf8}{\def\@univ@inputenc{utf8}\def\@univ@inputenc@isutfe{1}}
+\DeclareOption{inputenc=utf8x}{\def\@univ@inputenc{utf8x}\def\@univ@inputenc@isutfe{1}}
+\DeclareOption{inputenc=latin1}{\def\@univ@inputenc{latin1}\def\@univ@inputenc@isutfe{0}}
+\DeclareOption{inputenc=latin2}{\def\@univ@inputenc{latin2}\def\@univ@inputenc@isutfe{0}}
+\DeclareOption{font=cm}{\def\@univ@font{cm}} % Preferred.
+\DeclareOption{font=lm}{\def\@univ@font{cm}}
+\DeclareOption{font=ec}{\def\@univ@font{cm}}
+\DeclareOption{font=lmodern}{\def\@univ@font{cm}}
+\DeclareOption{font=tg}{\def\@univ@font{times}}
+\DeclareOption{font=times}{\def\@univ@font{times}} % Preferred.
+\DeclareOption{font=old-times}{\def\@univ@font{oldtimes}} % Preferred.
+\DeclareOption{font=oldtimes}{\def\@univ@font{oldtimes}}
+\DeclareOption{nop}{}
+\ProcessOptions\relax
+
+\def\@univ@fatal@ifpackage#1{%
+ \expandafter\ifx\csname ver@#1.sty\endcsname\relax\else
+ \PackageError{uni8}{Package #1 is already loaded.\MessageBreak
+ Solution: remove \string\usepackage...{#1}}{}\expandafter\@@end
+ \fi}
+% We fail early if any of these packages are already loaded, because we
+% want to load them, in the correct order.
+\@univ@fatal@ifpackage{t1enc}
+\@univ@fatal@ifpackage{fontenc}
+\@univ@fatal@ifpackage{inputenc}
+\@univ@fatal@ifpackage{luainputenc}
+\@univ@fatal@ifpackage{fontspec}
+\@univ@fatal@ifpackage{babel}
+
+\def\@univ@fatal@ifpackageopt#1{%
+ \expandafter\ifx\csname opt@#1.sty\endcsname\relax\else
+ \PackageError{uni8}{Package #1 already has options.\MessageBreak
+ Solution: remove \string\PassOptionsToPackage{...}{#1}}{}%
+ \expandafter\@@end
+ \fi}
+% We fail early if any of these packages already have options, becase we
+% want to specify and control the correct options for them.
+\@univ@fatal@ifpackageopt{t1enc}
+\@univ@fatal@ifpackageopt{fontenc}
+\@univ@fatal@ifpackageopt{inputenc}
+\@univ@fatal@ifpackageopt{luainputenc}
+%\@univ@fatal@ifpackageopt{fontspec} % Passing options to fontspec.sty is OK.
+%\@univ@fatal@ifpackageopt{babel} % Passing options to babel.sty is OK.
+
+% if #1 specifies an UTF-8 encoding, runs #2, otherwise runs #3.
+% @param #1 a control sequence.
+\def\@univ@ifutfe#1#2#3{%
+ \ifx#1\@univ@ifutfe@a
+ #2%
+ \else
+ \ifx#1\@univ@ifutfe@b#2\else#3\fi
+ \fi}
+\def\@univ@ifutfe@a{utf8}
+\def\@univ@ifutfe@b{utf8x}
+
+\expandafter\ifx\csname opt@babel.sty\endcsname\relax
+ % english is the default language (including default hyphenation) if
+ % \PassOptionsToPackage{...}{babel} was not specified.
+ \expandafter\def\csname opt@babel.sty\endcsname{english}\fi
+
+\if1\@univ@fontspec
+ \ifnum0\ifx\luatexversion\@undefined1\fi\ifx\luatexversion\relax1\fi>0
+ \PackageError{uni8}{[fontspec] needs to be run with lualatex}{}
+ \def\@univ@fontspec{0}% Disable [fontspec] as a fallback.
+ \fi
+\fi
+\if1\@univ@fontspec
+ \RequirePackage{babel}
+ % It's important to load luainputenc.sty after babel.sty, otherwise
+ % loadhyph-hu.tex loaded by babel.sty would load hyphenation patterns
+ % (e.g. hyph-hu.tex) with conv-utf8-ec.tex. But we are using TU font
+ % encoding, and conv-utf8-ec.tex would make hyphenation patterns use the
+ % T1 font encoding.
+ \@univ@ifutfe\@univ@inputenc{}{
+ \expandafter\RequirePackage\expandafter[\@univ@inputenc]{luainputenc}}
+ \RequirePackage{fontspec} % lmodern font is the default for fontspec.
+ % Override magyar.ldf loaded by babel.sty to prevent useless warning about
+ % \usepackage{t1enc}.
+ \def\magyar@sugg@to#1{}
+
+ \def\@univ@font@cm{% Latin Modern fonts, bettern than CM and EC for international text in T1 encoding.
+ % Even though Latin Modern is the default text font for lualatex (see
+ % fonttext.cfg in format generation time, it loads tulmr.fd), cmr is
+ % still the default math font. By loading lmodern.sty we also change the
+ % default math font to (non-Unicode) Latin Modern (e.g. lmmi10.pfb).
+ \RequirePackage{lmodern}
+ }
+ \def\@univ@font@times{% TeX Gyre fonts, great alternative for Times, Helvetica and Courier.
+ \RequirePackage{unicode-math}
+ \setmainfont{TeX Gyre Termes}
+ \setsansfont{TeX Gyre Heros}[Scale=MatchLowercase]
+ \setmonofont{TeX Gyre Cursor}[Scale=MatchLowercase]
+ \setmathfont{TeX Gyre Termes Math}
+ }
+ \def\@univ@font@oldtimes{% Times, Helvetica and Courier.
+ \@univ@font@times % old-times is not available in Unicode, using times.
+ }
+ \csname @univ@font@\@univ@font\endcsname
+ \normalfont\selectfont
+\else
+ \ifnum0\ifx\luatexversion\@undefined1\fi\ifx\luatexversion\relax1\fi>0
+ % luainputenc would also work, but we don't want to depend on it, to
+ % remain compatible with earlier versions of pdflatex.
+ \expandafter\RequirePackage\expandafter[\@univ@inputenc]{inputenc}
+ \else
+ % Needed for ő and ű in non-fontspec fonts.
+ \expandafter\RequirePackage\expandafter[\@univ@inputenc]{luainputenc}
+ \fi
+ \def\encodingdefault{T1} % Part of t1enc.sty
+ \fontencoding{T1} % Part of t1enc.sty.
+ % We don't run \selectfont here (t1enc.sty does), to avoid loading
+ % ecrm1000.tfm here when it is not available (e.g. no
+ % sudo apt-get install texlive-fonts-recommended).
+ % TODO(pts): Add [font=tnr] for Times New Roman, Helvetica, Courier New.
+ \def\@univ@font@cm{% Latin Modern fonts, bettern than CM and EC for international text in T1 encoding.
+ \RequirePackage{lmodern}
+ }
+ \def\@univ@font@times{% TeX Gyre fonts, great alternative for Times, Helvetica and Courier.
+ % Also changes math fonts. Load before tgtermes so that tgtermes can
+ % change text fonts back.
+ %
+ % TODO(pts): Better with newtxtext and newtxmath?
+ % https://tex.stackexchange.com/q/469726/820
+ % TODO(pts): Check txfonts.sty aand https://ctan.org/pkg/newtx as well.
+ \RequirePackage{mathptmx}
+ \RequirePackage{tgtermes}
+ \RequirePackage{tgheros}
+ \RequirePackage{tgcursor}
+ }
+ \def\@univ@font@oldtimes{% Times, Helvetica and Courier.
+ % Ugly spacing of the accent in \H{o}. Use [font=times] instead.
+ %
+ % Doesn't affect math fonts.
+ %\RequirePackage{times}
+ % Also changes math fonts.
+ \RequirePackage{mathptmx}
+ }
+ \csname @univ@font@\@univ@font\endcsname
+ % Without this \cf@encoding would remain TU (Unicode), but we want both
+ % \cf@encoding and \f@encoding T1.
+ \normalfont\selectfont
+
+ % Without this lualatex wouldn't consider the characters ő and ű in font
+ % encoding T1 as letters during hyphenation.
+ %
+ % This magic is based on https://tex.stackexchange.com/a/469909/820
+ \@tempcnta128 \loop\ifnum\@tempcnta<159 \ifnum\lccode\@tempcnta=0
+ \lccode\@tempcnta\@tempcnta\fi \advance\@tempcnta1 \repeat
+ \@tempcnta160 \loop\ifnum\@tempcnta<190 \ifnum\lccode\@tempcnta=0
+ \lccode\@tempcnta\@tempcnta\fi \advance\@tempcnta1 \repeat
+ \@tempcnta192 \loop\ifnum\@tempcnta<256 \ifnum\lccode\@tempcnta=0
+ \lccode\@tempcnta\@tempcnta\fi \advance\@tempcnta1 \repeat
+
+ % Make loadhyph-hu.tex loaded by babel.sty in TeX Live 2019 load
+ % hyph-hu.ec.tex rather than hyph-hu.tex in lualatex.
+ %
+ % This magic is based on https://tex.stackexchange.com/a/469909/820
+ \let\kanjiskip\hsize
+ % Without loading babel, hyphenation \language macros such as \l@english and
+ % \l@hungarian wouldn't be defined in lualatex.
+ \RequirePackage{babel}
+ \let\kanjkiskip\@undefined % Undo our hack above.
+\fi
+
+% Override magyar.ldf loaded by babel.sty to prevent useless warning about
+% \usepackage[...]{inputenc}.
+\def\magyar@sugg@ie#1{}
+
+\edef\reserved@a{\csname inputencodingname\endcsname}
+\@univ@ifutfe\reserved@a{\def\@univ@inputenc@isutfe{1}}{}
+
+\ifnum10=\@univ@inputenc@isutfe\@univ@fontspec
+ \IfFileExists{soulutf8.sty}{\IfFileExists{soul.sty}{
+ % For non-utf8 input encodings, use \usepackage{soul}.
+ \RequirePackage{soulutf8}
+ \def\underline{\ul} % \underline is built-in. Let's use soul's.
+ \def\uline{\ul} % \uline is from ulem. Let's use soul's.
+ }{}}{}
+\else
+ \IfFileExists{soul.sty}{
+ \usepackage{soul}
+ \def\underline{\ul} % \underline is built-in. Let's use soul's.
+ \def\uline{\ul} % \uline is from ulem. Let's use soul's.
+ }{}
+\fi
+
+% Propagate a4paper, a5paper, b5paper, letterpaper, legalpaper,
+% executivepaper, landscape documentclass options to actual paper size
+% as understood by dvips (\special{papersize=...}), pdflatex (\pdfpagewidth)
+% and lualatex (\pagewidth).
+\def\UnivFixPaperSize{%
+ \ifx\pdfpagewidth\undefined
+ \ifx\pagewidth\undefined\special{papersize=\paperwidth,\paperheight}\else
+ \pagewidth\paperwidth \pageheight\paperheight \fi\else
+ \pdfpagewidth\paperwidth \pdfpageheight\paperheight \fi}
+\UnivFixPaperSize
+
+% Display a warning if the user calls \fontencoding{...} unexpectedly in the
+% preamble.
+\def\@univ@sugg@fontenc{%
+ % We want T1 font encoding, because hyphenation patterns are in T1
+ % encoding.
+ \edef\reserved@a{%
+ \expandafter\ifx\csname ver@fontspec.sty\endcsname\relax T1\else TU\fi}%
+ \edef\reserved@b{\f@encoding}%
+ \ifx\reserved@a\reserved@b\else
+ \PackageWarningNoLine{uni8}{The font encoding is
+ \expandafter\strip@prefix\meaning\reserved@b, should be
+ \expandafter\strip@prefix\meaning\reserved@a}%
+ \fi}
+% Display a warning if the user loads a package in the preamble which would
+% break what uni8.sty has set up.
+\def\@univ@sugg@fontspec@package#1{%
+ \expandafter\ifx\csname ver@fontspec.sty\endcsname\relax\else
+ \expandafter\ifx\csname ver@#1.sty\endcsname\relax\else
+ \PackageWarningNoLine{uni8}{[fontspec] conflicts with #1.sty\MessageBreak
+ Solution: remove \string\usepackage...{#1}}%
+ \fi
+ \fi}
+\def\@univ@sugg@inputencoding{%
+ \if1\@univ@inputenc@isutfe
+ \expandafter\ifx\csname ver@fontspec.sty\endcsname\relax\else
+ \expandafter\ifx\csname inputencodingname\endcsname\relax\else
+ % Actually, if \inputencodingname is lutf8, that would work here,
+ % but we display the warning anyway to discourage the user to do
+ % \usepackage[...]{luainputenc} manually. By doing so we we make
+ % things less diverse, thus less likely to fail.
+ \PackageError{uni8}{[fontspec] conflicts with input encoding:
+ \expandafter\strip@prefix\meaning\inputencodingname\MessageBreak
+ Solution: remove \string\usepackage...{luainputenc}}{}\@@end
+ \fi
+ \fi
+ \fi}
+
+\AtBeginDocument{%
+ \selectfont % Make \f@encoding and \cf@encoding match.
+ \@univ@sugg@fontspec@package{t1enc}%
+ \@univ@sugg@fontspec@package{fontenc}%
+ \@univ@sugg@fontspec@package{inputenc}%
+ \@univ@sugg@fontenc
+ \@univ@sugg@inputencoding
+}
+
+\endinput