Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
% This file: % http://angg.twu.net/LATEX/mynewunicodechar.sty.html % http://angg.twu.net/LATEX/mynewunicodechar.sty % (find-angg "LATEX/mynewunicodechar.sty") % Author: Eduardo Ochs <eduardoochs@gmail.com> % % Based on: (find-es "tex" "newunicodechar") % (find-fline "/usr/local/texlive/2019/texmf-dist/tex/latex/newunicodechar/newunicodechar.sty") % % This is a modified version of Enrico Gregorio's newunicodechar.sty % that allows calling the main macro from anywhere - even outside the % preamble. % % Usage: put this in the preamble: % \usepackage{mynewunicodechar} % (find-LATEX "mynewunicodechar.sty") % \def\defunicodechar#1#2{\newunicodechar{#1}{#2}} % %\NeedsTeXFormat{LaTeX2e}[2018/04/01] %\ProvidesPackage{mynewunicodechar} % [2018/04/08 v1.2 Defining Unicode characters] %\@ifundefined{eTeXversion} % {\PackageError{mynewunicodechar}{LaTeX engine too old, aborting} % {Please upgrade your TeX system}\@@end}{} \DeclareOption{verbose}{\let\nuc@verbose=T} \ProcessOptions\relax \def\nuc@onebyteerr{\PackageError{mynewunicodechar} {ASCII character requested} {Only characters above U+007F may be defined; you asked for\MessageBreak a plain ASCII character and your definition has been ignored.}} \def\nuc@emptyargerr{\PackageError{mynewunicodechar} {Empty argument} {You shouldn't write \protect\newunicodechar{}{...}}} \def\nuc@invalidargerr{\PackageError{mynewunicodechar} {Invalid argument} {The first argument to \protect\newunicodechar\space is either\MessageBreak too long or an invalid sequence of bytes}} \begingroup \catcode`\^=7 \catcode30=12 \catcode`\!=12 % for safety \edef\next{\@gobble^^^^0021} \expandafter\endgroup \ifx\next\@empty % Start of code for Unicode engines \chardef\nuc@atcode=\catcode`\~ \catcode`\~=\active \def\newunicodechar#1#2{% \if\relax\detokenize{#1}\relax \nuc@emptyargerr \else \if\relax\detokenize\expandafter{\@cdr#1\@nil}\relax \ifnum`#1>\string"7F \catcode`#1=\active \begingroup\lccode`\~=`#1 \lowercase{\endgroup\protected\def~}{#2}% \else \nuc@onebyteerr \fi \else \nuc@invalidargerr \fi \fi} \catcode`\~=\nuc@atcode % \@onlypreamble\newunicodechar \expandafter\endinput \fi % End of code for Unicode engines \def\nuc@stop{\PackageWarningNoLine{mynewunicodechar} {This package only works if the document\MessageBreak encoding is `utf8'}% \let\newunicodechar\@gobbletwo\endinput} \edef\@tempa{\detokenize{utf8}} \edef\@tempb{\detokenize\expandafter{\inputencodingname}} \ifx\@tempb\@tempa\else \nuc@stop \fi \def\newunicodechar#1#2{% \@tempswafalse \edef\nuc@tempa{\detokenize{#1}}% \if\relax\nuc@tempa\relax \nuc@emptyargerr \else \edef\@tempb{\expandafter\@car\nuc@tempa\@nil}% \nuc@check \if@tempswa \@ifundefined{u8:\nuc@tempa}{} {\PackageWarning{mynewunicodechar} {Redefining Unicode character\ifdefined\nuc@verbose; it meant\MessageBreak ***\space\space\nuc@meaning\space\space***\MessageBreak before your redefinition\fi}}% \@namedef{u8:\nuc@tempa}{#2}% \fi \fi } \def\nuc@getlength#1{% \ifx#1\@nil \expandafter\relax \else +1\expandafter\nuc@getlength \fi} \ifdefined\nuc@verbose \def\nuc@meaning{\expandafter\expandafter\expandafter \strip@prefix\expandafter\meaning\csname u8:\nuc@tempa\endcsname} \fi \def\nuc@check{% \ifcase\numexpr0\expandafter\nuc@getlength\nuc@tempa\@nil \or %0 \nuc@onebyteerr\or %1 \nuc@ch@ck{192}\or %2 \nuc@ch@ck{224}\or %3 \nuc@ch@ck{240}\else %4 \nuc@invalidargerr \fi} \def\nuc@ch@ck#1{% \expandafter\ifnum\expandafter`\@tempb<#1\relax \nuc@invalidargerr \else \@tempswatrue \fi } % \@onlypreamble\newunicodechar \endinput