%% %% This is file 'bxtexlogo.sty'. %% %% Copyright (c) 2016-2026 Takayuki YATO (aka. "ZR") %% GitHub: https://github.com/zr-tex8r %% Twitter: @zr_tex8r %% %% This package is distributed under the MIT License. %% %% package declaration \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bxtexlogo}[2026/05/23 v0.8] %% preparation \def\bxlg@pkgname{bxtexlogo} \providecommand\bxDebug[1]{} % NOTE. The sets of primary and secondary logos % are frozen until v1.0. %--------------------------------------- general %% packages \IfFileExists{hologo.sty}{% \RequirePackageWithOptions{hologo} }{} \RequirePackage{keyval}\relax %% hologo import list \def\bxlg@hologo@import@primary{% AmSLaTeX,AmSTeX,BibTeX,ConTeXt,eTeX,LaTeX,LaTeXe,% LuaLaTeX,LuaTeX,LyX,METAFONT,METAPOST,pdfTeX,pdfLaTeX,% TeX,XeLaTeX,XeTeX} \def\bxlg@hologo@import@secondary{% HanTheThanh,KOMAScript,LaTeXTeX,NTS,PiCTeX,SageTeX,% SLiTeX,teTeX,TTH} \def\bxlg@hologo@import@nolevel{% (La)TeX,biber,BibTeX8,emTeX,ExTeX,iniTeX,La,LaTeX2e,% LaTeX3,MetaFun,MetaPost,MiKTeX,OzMF,OzMP,OzTeX,OzTtH,% PCTeX,PiC,plainTeX,SliTeX,teTeX,TeX4ht,virTeX,VTeX,Xe} \@onlypreamble\bxlg@hologo@import@primary \@onlypreamble\bxlg@hologo@import@secondary \@onlypreamble\bxlg@hologo@import@nolevel %% constants \def\bxlg@@star{*} \def\bxlg@@dblstar{**} %% variables \newif\ifbxlg@ok \newif\ifbxlg@forced \newif\ifbxlg@onego \newif\ifbxlg@hologo@ok \newif\ifbxlg@ifincsname@ok \newif\ifbxlg@default@import %% unique tokens \def\bxlg@end{\bxlg@end@} \def\bxlg@mk{\bxlg@mk@} %% errors \def\bxlg@err@ukval#1{\PackageError\bxlg@pkgname {Unknown value '#1'}% {\@eha}} \def\bxlg@err@uknam#1{\PackageError\bxlg@pkgname {Unknown logo name '#1'}% {\@ehc}} \def\bxlg@err@ivkvl#1#2{\PackageError\bxlg@pkgname {Invalid value for key '#1':\MessageBreak\@spaces#2}% {\@eha}} %% \ifbxlg@incsname % Equivalent to \ifincsname if it is available; otherwise \iffalse. \let\ifbxlg@incsname\iffalse \edef\bxlg@tmpa{\meaning\ifincsname}\edef\bxlg@tmpb{\string\ifincsname} \def\bxlg@next{\let\ifbxlg@incsname\ifincsname \bxlg@ifincsname@oktrue} \ifx\bxlg@tmpa\bxlg@tmpb \bxlg@next \fi %% \bxlg@cond\ifXXX..\fi{}{} \@gobbletwo\if\if \def\bxlg@cond#1\fi{% #1\expandafter\@firstoftwo \else \expandafter\@secondoftwo\fi} %% \bxlg@cslet{}\CSb \def\bxlg@cslet#1#2{% \expandafter\let\csname#1\endcsname=#2} %% \bxlg@csletcs{}{} \def\bxlg@csletcs#1#2{% \expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname} %% \bxlg@jump@exit...\bxlg@exit \@gobble\if \long\def\bxlg@jump@exit#1\bxlg@exit{\fi} \let\bxlg@exit\relax %% \bxlg@checkdefinable \DeclareRobustCommand*\CS... % Does \DeclareRobustCommand* with checking definability. \def\bxlg@checkdefinable{% \bxlg@checkdef@a\@gobble} %% \bxlg@preamble@checkdefinable \DeclareRobustCommand*\CS... % It is \bxlg@checkdefinable plus \@onlypreamble declaration. \def\bxlg@preamble@checkdefinable{% \bxlg@checkdef@a\@onlypreamble} \def\bxlg@checkdef@a#1#2*#3{% \def\bxlg@next{\providecommand\bxlg@next}% \@ifdefinable#3{% \def\bxlg@next{#1#3\DeclareRobustCommand*#3}}% \bxlg@next} %% \bxlg@handle@key{}{}{} \def\bxlg@handle@key#1#2#3{% \bxlg@csletcs{bxlg@tmpa}{bxlg@#3}% \ifx\bxlg@tmpa\relax \bxlg@err@ivkvl{#1}{#2}% \else \bxlg@tmpa \fi} %% \bxlg@handle@enum@key{}{}{} \def\bxlg@handle@enum@key#1#2#3{% \bxlg@csletcs{bxlg@tmpa}{bxlg@#3@@#2}% \ifx\bxlg@tmpa\relax \bxlg@err@ivkvl{#1}{#2}% \else \bxlg@cslet{bxlg@#3}\bxlg@tmpa \fi} %% \bxlg@protect % Does \protect except in csname. \def\bxlg@protect{% \bxlg@cond\ifbxlg@incsname\fi{}{\protect}} %% \bxlg@semirobustify{} % Replaces '\protect' with '\bxlg@protect' in the definition of % a LaTeX-protected command \. \def\bxlg@semirobustify#1{% \expandafter\bxlg@semirobustify@a\csname #1\expandafter\endcsname \csname #1 \endcsname} \def\bxlg@semirobustify@a#1#2{% \def#1{\bxlg@protect#2}} %% \bxlg@logo@do{}{} % Uses \texorpdfstring if available. \def\bxlg@logo@do{% \bxlg@cond\ifbxlg@incsname\fi{\@secondoftwo}{% \bxlg@cond\ifx\texorpdfstring\@undefined\fi {\@firstoftwo}{\texorpdfstring}}} %% \bxlg@stringify{}\CScont % Expands and detokenizes it. \def\bxlg@stringify#1{% \expandafter\expandafter\expandafter\bxlg@stringify@a \expandafter\string\csname bxlg@lcmd@@#1\endcsname\bxlg@end} \begingroup\lccode`\?=`\@ \lowercase{% \gdef\bxlg@stringify@a#1??#2\bxlg@end#3{#3{#2}}% }\endgroup %% \bxlg@write@fbstr{} \def\bxlg@write@fbstr#1{% \bxlg@stringify{#1}\bxlg@fbstr} %--------------------------------------- hologo fallback %% \bxlg@hologo{} % Forwards to \hologo if it is available; otherwise does the original % fallback procedure. \@ifundefined{hologo}{% \bxlg@hologo@okfalse \def\bxlg@fbstr@hologo#1{?#1?}% same as in hologo \def\bxlg@hologo#1{% \expandafter\bxlg@hologo@a\csname bxlg@holf@@#1\endcsname{#1}} \def\bxlg@hologo@a{% \bxlg@logo@do{\bxlg@hologo@do}{\bxlg@hologo@b}} \def\bxlg@hologo@b#1#2{% \bxlg@cond\ifbxlg@incsname\fi{% \bxlg@stringify{#2}\@firstofone }{\bxlg@cond\ifx#1\relax\fi{% \bxlg@stringify{#2}\bxlg@fbstr@hologo }{#2}}} \DeclareRobustCommand*\bxlg@hologo@do[2]{% \PackageError\bxlg@pkgname{% \ifx#1\relax Unknown logo '#2'% \else The logo '#2' is not available,\MessageBreak because the package 'hologo' is not found% \fi }{\@ehc}% \bxlg@hologo@b#1{#2}} % For compatibility with old versions, \hologo itself as fallback % is alsod defined. This feature will be abolished in future. \@namedef{hologo}{\bxlg@hologo} }{%else \bxlg@hologo@oktrue \def\bxlg@hologo{\hologo} } %%<+> \bxtexlogoHologo{} % Just a public name for \bxlg@hologo. \newcommand*\bxtexlogoHologo{\bxlg@hologo} %--------------------------------------- registration %% constants \chardef\bxlg@level@@primary=1 \chardef\bxlg@level@@secondary=2 \chardef\bxlg@level@@=0 % no-level (not for bulk import) %% variables \let\bxlg@list\@empty %\[bxlg@flag@@]% level value %\[bxlg@logo@@]% real definition %\[bxlg@lcmd@@]% core definition %\[bxlg@holf@@]% hologo flag %% \bxlg@ghosted \let\bxlg@ghosted\@firstofone %%<+> \bxtexlogoDeclare{}{}[]{} % If [] is omitted, it defaults to . % If is empty, is always used. \@onlypreamble\bxtexlogoDeclare \newcommand*\bxtexlogoDeclare{\bxlg@declare} \@onlypreamble\bxlg@declare \def\bxlg@declare#1#2{%{}{} \@ifnextchar[% {\bxlg@declare@a{#1}{#2}}% {\bxlg@declare@a{#1}{#2}[#2]}} \@onlypreamble\bxlg@declare@a \def\bxlg@declare@a#1{% \begingroup \expandafter\bxlg@declare@b\csname bxlg@level@@#1\endcsname{#1}} \@onlypreamble\bxlg@declare@b \def\bxlg@declare@b#1#2#3[#4]{% \LEVEL{}{}[] \ifx#1\relax \bxlg@err@ukval{#2}% \def\bxlg@next{\endgroup}% \else \g@addto@macro\bxlg@list{\do{#3}}% \ifnum#1>\z@ \global\bxlg@cslet{bxlg@flag@@#3}#1\fi \def\bxlg@next{\bxlg@declare@c{#3}{#4}}% \fi \afterassignment\bxlg@next \toks@}% read {} \@onlypreamble\bxlg@declare@c \def\bxlg@declare@c#1{%{} \expandafter\bxlg@declare@d\csname bxlg@lcmd@@#1\expandafter \endcsname\csname bxlg@logo@@#1\endcsname} \@onlypreamble\bxlg@declare@d \def\bxlg@declare@d#1#2#3{%\LCMD\LOGO{} \ifx\bxlg@mk#3\bxlg@mk \gdef#1{\bxlg@logo@do{\bxlg@ghosted{\protect#2}}{#2}}% \else \gdef#1{\bxlg@logo@do{\bxlg@ghosted{\protect#2}}{#3}}% \fi \xdef#2{\the\toks@}% \endgroup} %% import from hologo \def\bxlg@tmpa#1#2{% \expandafter\bxlg@cslet{bxlg@holf@@#2}{t}% % All hologo logos support PDF-strings. \bxlg@declare{#1}{#2}[]{\bxlg@hologo{#2}}} \@for\bxlg@tmpb:=\bxlg@hologo@import@primary\do{% \edef\bxlg@next{\noexpand\bxlg@tmpa{primary}{\bxlg@tmpb}% }\bxlg@next} \@for\bxlg@tmpb:=\bxlg@hologo@import@secondary\do{% \edef\bxlg@next{\noexpand\bxlg@tmpa{secondary}{\bxlg@tmpb}% }\bxlg@next} \@for\bxlg@tmpb:=\bxlg@hologo@import@nolevel\do{% \edef\bxlg@next{\noexpand\bxlg@tmpa{}{\bxlg@tmpb}% }\bxlg@next} %--------------------------------------- registry %% very famous somewhere \bxtexlogoDeclare{primary}{pTeX}{p\kern-.05em\bxlg@TeX} \bxtexlogoDeclare{primary}{epTeX}[e-pTeX]{% \mbox{\bxlg@epsilon-\bxlg@logo@@pTeX}} \bxtexlogoDeclare{primary}{pLaTeX}[]{p\bxlg@LaTeX} \bxtexlogoDeclare{primary}{pLaTeXe}[]{p\bxlg@LaTeXe} \bxtexlogoDeclare{primary}{upTeX}{up\kern-.05em \bxlg@TeX} \bxtexlogoDeclare{primary}{eupTeX}[e-upTeX]{% \mbox{\bxlg@epsilon-\bxlg@logo@@upTeX}} \bxtexlogoDeclare{primary}{upLaTeX}[]{up\bxlg@LaTeX} \bxtexlogoDeclare{primary}{upLaTeXe}[]{up\bxlg@LaTeXe} \bxtexlogoDeclare{primary}{JBibTeX}{% \leavevmode\lower.5ex\hbox{J}\bxlg@akern{-.15}\bxlg@hologo{BibTeX}} \bxtexlogoDeclare{primary}{pBibTeX}[]{p\bxlg@hologo{BibTeX}} \bxtexlogoDeclare{primary}{upBibTeX}[]{up\bxlg@hologo{BibTeX}} \bxtexlogoDeclare{primary}{TikZ}{% Ti\bxtexlogoItalicOrSlant{k}Z\bxlg@nonuc} %% old or not-so-famous \bxtexlogoDeclare{secondary}{JTeX}{% \leavevmode\lower.5ex\hbox{J}\bxlg@akern{-.17}\bxlg@TeX} \bxtexlogoDeclare{secondary}{JLaTeX}{% \leavevmode\lower.5ex\hbox{J}\bxlg@akern{-.15}\LaTeX} \bxtexlogoDeclare{secondary}{pTeXsT}{% p\kern-.21em \bxlg@TeX\kern-.10em s\kern-.21em T\bxlg@nonuc} \bxtexlogoDeclare{secondary}{XyM}{% X\kern-.30em % \smash{\raise.50ex\hbox to0.8em{\hss\bxlg@Grk{7}\hss}}% \kern -.30em M} \bxtexlogoDeclare{secondary}{XyMTeX}{% \bxlg@logo@@XyM \kern-.1em \bxlg@TeX} \bxtexlogoDeclare{secondary}{KET}{% K\kern-.16em \lower.5ex\hbox{E}\kern-.12emT} \bxtexlogoDeclare{secondary}{KETpic}{% \bxlg@logo@@KET pic} \bxtexlogoDeclare{secondary}{logoOmega}[Omega]{\bxlg@Grk{10}} \bxtexlogoDeclare{secondary}{logoLambda}[Lambda]{\bxlg@Grk{3}} \bxtexlogoDeclare{secondary}{logoAleph}[Aleph]{\bxlg@Aleph} \bxtexlogoDeclare{secondary}{logoLamed}[Lamed]{\bxlg@Lamed} \bxtexlogoDeclare{secondary}{LaTeXiT}{% \LaTeX \kern-.09em \raise.36ex\hbox{i}\kern-.06em T\bxlg@nonuc} \bxtexlogoDeclare{secondary}{LaTeXML}{% \bxlg@hologo{La}\kern-.15em T\kern-.1667em \lower.5ex\hbox{E}% \bxlg@smaller{XML}\bxlg@nonuc} \bxtexlogoDeclare{secondary}{HeVeA}{% H\kern-.08em \begingroup \setbox\z@\hbox{H}% \vbox to\ht\z@{\vss\hbox{\bxlg@smaller{E}}\vss}% \kern-.07em V\kern-.08em \vbox to\ht\z@{\vss\hbox{\bxlg@smaller{E}}\vss}% \endgroup \kern-.09em A\bxlg@nonuc} \bxtexlogoDeclare{secondary}{KaTeX}{% K\kern-.26em \begingroup \setbox\z@\hbox{T}% \vbox to\ht\z@{\kern.05em \hbox{\bxlg@smaller{A}}\vss}% \endgroup \kern-.23em \bxlg@TeX} \bxtexlogoDeclare{secondary}{ApTeX}{A\kern-.08em \bxlg@logo@@pTeX} \bxtexlogoDeclare{secondary}{DVIPDFMx}{% obsolete logo DVI\-PDFM\bxtexlogoItalicOrSlant{x}} \bxtexlogoDeclare{secondary}{OpTeX}{Op\kern-.05em \bxlg@TeX} \bxtexlogoDeclare{secondary}{CSTUG}{\leavevmode \bxlg@cal{C}\kern-.3em \lower.67ex\hbox{\bxlg@cal{S}}% \kern-.145em TUG\bxlg@nonuc} \bxtexlogoDeclare{secondary}{HiTeX}[]{Hi\bxlg@TeX} \bxtexlogoDeclare{secondary}{TeXXeT}[TeX--XeT]{% \bxlg@TeX-\textbf{-}\bxlg@logo@@XeT} %% fancy things (Not!) \bxtexlogoDeclare{secondary}{BaSiX}{% B\kern-.18em \lower.45ex\hbox{A}\kern-.15em % S\kern-.1em \lower.45ex\hbox{I}\kern-.1em X\bxlg@nonuc} \bxtexlogoDeclare{secondary}{logoon}[on]{\bxtexlogoSmcp{on}} \bxtexlogoDeclare{secondary}{TeXonLaTeX}[TeX on LaTeX]{% \bxlg@TeX\ \bxlg@logo@@logoon\ \LaTeX} \bxtexlogoDeclare{secondary}{OneTeX}[1TeX]{% \bxlg@One\kern-0.2em \bxlg@TeX} \bxtexlogoDeclare{secondary}{SuyahTeX}{\bxlg@Suyah\bxlg@TeX} %% logos of "no-level" \bxtexlogoDeclare{}{LuaMetaTeX}{% LuaMeta\kern-.083333em \bxlg@TeX} \bxtexlogoDeclare{}{HiLaTeX}[]{Hi\bxlg@LaTeX} \bxtexlogoDeclare{}{Prote}{% P\kern-0.08em R\kern-0.10em\raise0.06em\hbox{o}% \kern-0.13em T\kern-0.04em E\bxlg@nonuc} \bxtexlogoDeclare{}{XeT}{% \textbf{\bxtexlogoReflect{\bxlg@TeX}{XeT}}\bxlg@nonuc} \bxtexlogoDeclare{}{e}{\bxlg@epsilon} \bxtexlogoDeclare{}{lowe}[e]{\bxlg@in@math{_{\textstyle\varepsilon}}} \bxtexlogoDeclare{}{1TeX}{\bxlg@logo@@OneTeX}%alias \bxtexlogoDeclare{}{LuahbTeX}[LuaHBTeX]{% experimental Lua\bxtexlogoSmcp{hb}\kern-.05em \bxlg@TeX} \bxtexlogoDeclare{}{arara}{\bxlg@arara} \bxtexlogoDeclare{}{One}[1]{\bxlg@One} \bxtexlogoDeclare{}{Suyah}{\bxlg@Suyah} \bxtexlogoDeclare{}{Yukidaruma}{\bxlg@Yukidaruma} \bxtexlogoDeclare{}{YukidarumaTeX}{\bxlg@Yukidaruma\bxlg@TeX} %% other than TeX \bxtexlogoDeclare{secondary}{SATySFi}{% S\kern-0.1em A\kern-0.18em T\kern-0.22em \lower0.2em\hbox{Y}\kern-0.08em S\kern-0.04em F\kern-0.12em \lower0.2em\hbox{I}} %--------------------------------------- import %% variables \let\bxlg@name\relax \let\bxlg@pfx\relax %%<*> \bxtexlogoimport{} \@onlypreamble\bxtexlogoimport \newcommand*\bxtexlogoimport{% \bxlg@onegotrue \bxlg@import} \@onlypreamble\bxtexlogoImport \newcommand*\bxtexlogoImport{% \bxlg@onegofalse \bxlg@import} \@onlypreamble\bxlg@import \def\bxlg@import#1{% \global\let\bxlg@default@import\relax \@for\bxlg@name:=#1\do{% \begingroup \bxlg@split@name \ifx\bxlg@name\bxlg@@star \bxlg@import@all\bxlg@level@@primary \else\ifx\bxlg@name\bxlg@@dblstar \bxlg@import@all\bxlg@level@@secondary \else\expandafter\ifx\csname bxlg@logo@@\bxlg@name\endcsname\relax \bxlg@err@uknam\bxlg@name \else \bxlg@import@one\bxlg@name \fi\fi\fi \endgroup}} %% \bxlg@import@one \@onlypreamble\bxlg@import@one \def\bxlg@import@one#1{% \expandafter\ifx\csname\bxlg@pfx#1\endcsname\relax \bxlg@oktrue \else\ifbxlg@forced \bxlg@oktrue \PackageWarning\bxlg@pkgname {'\@backslashchar\bxlg@pfx#1' redefined}% \else \bxlg@okfalse \fi\fi \ifbxlg@onego \global\bxlg@cslet{bxlg@flag@@#1}\@undefined \fi \ifbxlg@ok \expandafter\bxlg@import@one@a\csname\bxlg@pfx#1\expandafter \endcsname\csname bxlg@lcmd@@#1\endcsname \fi} \def\bxlg@import@one@a#1#2{% \bxDebug{defined: \string#1}% \ifbxlg@default@import \gdef#1{\bxlg@mark@default@import #2}% \else \global\let#1#2% \fi} %% \bxlg@import@all{} \@onlypreamble\bxlg@import@all \def\bxlg@import@all#1{% \let\bxlg@tmpb#1% \let\do\bxlg@import@all@do \bxlg@list} \@onlypreamble\bxlg@import@all@do \def\bxlg@import@all@do#1{% \expandafter\ifx\csname bxlg@flag@@#1\endcsname\bxlg@tmpb \bxlg@import@one{#1}% \fi} %% \bxlg@split@name \@onlypreamble\bxlg@split@name \def\bxlg@split@name{% \bxlg@split@name@a+\ifx\bxlg@pfx\relax \bxlg@split@name@a-\ifx\bxlg@pfx\relax \bxlg@forcedfalse \let\bxlg@pfx\@empty \else \bxlg@forcedfalse \fi \else \bxlg@forcedtrue \fi} \@onlypreamble\bxlg@split@name@a \def\bxlg@split@name@a#1{% \def\bxlg@next##1#1##2\bxlg@end{\bxlg@split@name@b{##1}{##2}}% \expandafter\bxlg@next\bxlg@name\bxlg@mk#1\bxlg@end} \@onlypreamble\bxlg@split@name@b \def\bxlg@split@name@b#1#2{% \ifx\bxlg@end#2\bxlg@end \let\bxlg@pfx\relax \else \def\bxlg@pfx{#1}\bxlg@split@name@c#2\bxlg@end% \fi} \@onlypreamble\bxlg@split@name@c \def\bxlg@split@name@c#1\bxlg@mk#2\bxlg@end{% \def\bxlg@name{#1}} %% \bxlg@default@import \@onlypreamble\bxlg@default@import \def\bxlg@default@import{% \bxlg@default@importtrue \bxtexlogoimport{*}% \bxlg@default@importfalse} \AtBeginDocument{\bxlg@default@import} %% \bxlg@mark@default@import \def\bxlg@mark@default@import{% \bxlg@logo@do{\global\bxlg@default@importtrue}{}} \def\bxlg@mark@default@import@a{% \ifbxlg@default@import \bxlg@mark@default@import@b \fi} \def\bxlg@mark@default@import@b{% \PackageWarning\bxlg@pkgname {Implicit logo import is assumed!!\MessageBreak This feature will be abolished in future, so\MessageBreak you must write an explicit import command:\MessageBreak \@spaces \string\bxtexlogoimport{*}\@gobbletwo}} \AtEndDocument{\bxlg@mark@default@import@a} %--------------------------------------- basic logo matters %% \bxlg@if@hologo@for@basic \let\bxlg@if@hologo@for@basic\@secondoftwo %% \bxlg@declare@basic\CS{}{} \@onlypreamble\bxlg@declare@basic \def\bxlg@declare@basic#1#2{%\CS{} \expandafter\bxlg@declare@basic@a\csname#2\expandafter\endcsname \csname bxlg@incs@@#2\expandafter\endcsname \csname bxlg@lcmd@@#2\expandafter\endcsname \csname bxlg@logo@@#2\endcsname#1} \def\bxlg@declare@basic@a#1#2#3#4#5#6{%\NAME\INCS\LCMD\LOGO\CS{} \def#5{% \bxlg@cond\ifbxlg@incsname\fi#2{%else \bxlg@if@hologo@for@basic#4{%else % if the logo is imported, use LOGO macro \bxlg@cond\ifx#1#3\fi#4#1}}}% \def#2{#6}} %% \bxlg@TeX / \bxlg@LaTeX / \bxlg@LaTeXe \bxlg@declare@basic\bxlg@TeX{TeX}{TeX} \bxlg@declare@basic\bxlg@LaTeX{LaTeX}{LaTeX} \bxlg@declare@basic\bxlg@LaTeXe{LaTeXe}{LaTeX2e} %--------------------------------------- user interface % NOTE: LaTeX-protection is ignored in PDF-strings, % whereas engine-protection does not work well. %% \bxlg@fbstr{} % The string form for writing unknown logo names. \def\bxlg@fbstr#1{}% currently empty %%<*> \bxtexlogo{} \@ifdefinable\bxtexlogo{% \DeclareRobustCommand*\bxtexlogo[1]{% \expandafter\bxlg@use@a\csname bxlg@lcmd@@#1\endcsname{#1}} \bxlg@semirobustify{bxtexlogo} \def\bxlg@use@a#1#2{% \bxlg@cond\ifx#1\relax\fi{\bxlg@use@b{#2}}{#1}} \def\bxlg@use@b#1{%{} \bxlg@logo@do{\bxlg@err@uknam{#1}}{}% \bxlg@write@fbstr{#1}} } %%<+> \bxtexlogoTest % The test output. \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoTest{% \par \let\do\bxlg@logo@test@do \bxlg@list} \def\bxlg@logo@test@do#1{% \texttt{#1}:\quad\@nameuse{bxlg@logo@@#1}\par} %%<*> \bxtexlogosetup{=,...} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogosetup{% \setkeys{\bxlg@pkgname}} %% 'one-font=normal|bboldx' \define@key{\bxlg@pkgname}{one-font}{% \bxlg@handle@key{one-font}{#1}{kv@one@font@@#1}} \def\bxlg@kv@one@font@@normal{% \let\bxlg@One\bxlg@One@normal} \def\bxlg@kv@one@font@@bboldx{% \let\bxlg@One\bxlg@One@BBX} %% 'smallcaps=auto|real|fake' \define@key{\bxlg@pkgname}{smallcaps}{% \bxlg@handle@enum@key{smallcaps}{#1}{smcp@mode}} %% 'fake-smallcaps-for={,...}' \define@key{\bxlg@pkgname}{fake-smallcaps-for}{% \edef\bxlg@use@fake@list{\bxlg@use@fake@list,#1}} %% 'ghost=' \define@key{\bxlg@pkgname}{ghost}[true]{% \bxlg@handle@key{ghost}{#1}{kv@ghost@@#1}} \def\bxlg@kv@ghost@@true{% \ifx\eghostguarded\@undefined \PackageWarning\bxlg@pkgname {Setting 'ghost=true' cannot be applied\MessageBreak because the package 'bxghost' is not loaded,\MessageBreak reported}% \else \let\bxlg@ghosted\eghostguarded \fi} \def\bxlg@kv@ghost@@false{% \let\bxlg@ghosted\@firstofone} %% 'hologo-for-basic=' \define@key{\bxlg@pkgname}{hologo-for-basic}[true]{% \bxlg@handle@key{hologo-for-basic}{#1}{kv@hologo@for@basic@@#1}} \def\bxlg@kv@hologo@for@basic@@true{% \let\bxlg@if@hologo@for@basic\@firstoftwo} \def\bxlg@kv@hologo@for@basic@@false{% \let\bxlg@if@hologo@for@basic\@secondoftwo} %--------------------------------------- font %% variables \chardef\bxlg@genfam=0 %% \bxlg@find@genfam \def\bxlg@find@genfam{% \edef\bxlg@tmpa{\f@family}\chardef\bxlg@genfam=\z@ \edef\bxlg@tmpb{\sfdefault}% \ifx\bxlg@tmpa\bxlg@tmpb \chardef\bxlg@genfam=\@ne \fi \edef\bxlg@tmpb{\ttdefault}% \ifx\bxlg@tmpa\bxlg@tmpb \chardef\bxlg@genfam=\tw@ \fi} %% \bxlg@check@bold \def\bxlg@check@bold{% \if b\expandafter\@car\f@series.\@nil \bxlg@oktrue \else \bxlg@okfalse \fi} %% \bxlg@declare@family@mw{}{} \def\bxlg@declare@family@mw#1#2{% \DeclareFontFamily{#1}{#2}{}% \DeclareFontShape{#1}{#2}{m}{it}{<->ssub*#2/m/n}{}% \DeclareFontShape{#1}{#2}{m}{sl}{<->ssub*#2/m/n}{}% \DeclareFontShape{#1}{#2}{m}{sc}{<->ssub*#2/m/n}{}% \DeclareFontShape{#1}{#2}{b}{it}{<->ssub*#2/b/n}{}% \DeclareFontShape{#1}{#2}{b}{sl}{<->ssub*#2/b/n}{}% \DeclareFontShape{#1}{#2}{b}{sc}{<->ssub*#2/b/n}{}% \DeclareFontShape{#1}{#2}{bx}{n}{<->ssub*#2/b/n}{}% \DeclareFontShape{#1}{#2}{bx}{it}{<->ssub*#2/bx/n}{}% \DeclareFontShape{#1}{#2}{bx}{sl}{<->ssub*#2/bx/n}{}% \DeclareFontShape{#1}{#2}{bx}{sc}{<->ssub*#2/bx/n}{}} %% \bxlg@declare@family{}{} \def\bxlg@declare@family#1#2{% \bxlg@declare@family@mw{#1}{#2}% \DeclareFontShape{#1}{#2}{b}{n}{<->ssub*#2/m/n}{}} %% \bxlg@use@family{}{} \def\bxlg@use@family#1#2{% \fontencoding{#1}\fontfamily{#2}\selectfont} %% \bxlg@if@ipaex@ok \IfFileExists{c70ipxg.fd}{% \let\bxlg@if@ipaex@ok\@firstoftwo }{\let\bxlg@if@ipaex@ok\@secondoftwo} %% \bxlg@declare@ipaex@family{} \@onlypreamble\bxlg@declare@ipaex@family \def\bxlg@declare@ipaex@family#1{% \bxlg@if@ipaex@ok{% \expandafter\ifx\csname U+bxlgjar#1\endcsname\relax \bxlg@declare@family{U}{bxlgjas#1}% \DeclareFontShape{U}{bxlgjas#1}{m}{n}{<->ipxg-r-u#1}{}% \bxlg@declare@family@mw{U}{bxlgjar#1}% \DeclareFontShape{U}{bxlgjar#1}{m}{n}{<->ipxm-r-u#1}{}% \DeclareFontShape{U}{bxlgjar#1}{b}{n}{<->ssub*bxlgjas#1/m/n}{}% \fi}{}} %% \bxlg@ipaex{} \def\bxlg@ipaex#1{% \fontencoding{U}\fontfamily{bxlgjar#1}\selectfont} %% \bxlg@warn@logo{} \def\bxlg@warn@logo#1{% \bxlg@warn@package{#1}{Logo '#1' cannot be properly rendered}} %% \bxlg@warn@setting{} \def\bxlg@warn@setting#1{% \bxlg@warn@package{#1}{Setting '#1' cannot be applied}} \def\bxlg@warn@package#1#2{% \expandafter\ifx\csname bxlg@fpkg@@#1\endcsname\relax\else \PackageWarning\bxlg@pkgname {#2\MessageBreak because the package '\csname bxlg@fpkg@@#1\endcsname'% \MessageBreak is unavailable,}% \global\bxlg@cslet{bxlg@fpkg@@#1}\relax \fi} %% \bxlg@required@package{}{} \@onlypreamble\bxlg@required@package \def\bxlg@required@package#1#2{% \@namedef{bxlg@fpkg@@#1}{#2}} %% \bxlg@One \bxlg@declare@family{U}{bxlgone} \def\bxlg@next#1{\DeclareFontShape{U}{bxlgone}{m}{n}{<->#1}{}} \IfFileExists{udsrom.fd}{% \bxlg@next{s*[1.44]dsrom10}% }{\IfFileExists{ubbm.fd}{% \bxlg@next{s*[1.44]bbm10}% }{\IfFileExists{ubbold.fd}{% \bxlg@next{s*[1.44]bbold10}% }{%else fallback using ordinary bold \bxlg@next{s*[1.44]cmbx10}% }}} \def\bxlg@One@normal{\bxtexlogoFontSlant{% \usefont{U}{bxlgone}{m}{n}1}} \let\bxlg@One\bxlg@One@normal % bboldx version \IfFileExists{bboldx.sty}{% \bxlg@declare@family@mw{U}{bxlgoneBBX}% \DeclareFontShape{U}{bxlgoneBBX}{m}{n}{<->s*[1.44]BBOLDX-Thin}{}% \DeclareFontShape{U}{bxlgoneBBX}{b}{n}{<->s*[1.44]BBOLDX-Regular}{}% \def\bxlg@One@BBX{\bxtexlogoFontSlant{% \usefont{U}{bxlgoneBBX}{\f@series}{n}1}}% }{%else \bxlg@required@package{one-font=bboldx}{bboldx}% \def\bxlg@kv@one@font@@bboldx{% \bxlg@warn@setting{one-font=bboldx}}} %%<+D>\bxtexlogoUseBboldx: [DEPRECATED} %%<+D>\bxtexlogoNoUseBboldx: [DEPRECATED} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoUseBboldx{% \bxtexlogosetup{one-font=bboldx}} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoNoUseBboldx{% \bxtexlogosetup{one-font=normal}} %% \bxlg@select@OTi \def\bxlg@select@OTi{% \fontencoding{OT1}\selectfont \expandafter\ifx\csname OT1+\f@family\endcsname\@empty \bxlg@find@genfam \ifcase\bxlg@genfam \fontfamily{cmr}\selectfont \or \fontfamily{cmss}\selectfont \or \fontfamily{cmtt}\selectfont \fi \fi} %% \bxlg@Grk{} \def\bxlg@Grk#1{% \bgroup \bxlg@select@OTi \char#1\relax \egroup} %% \bxlg@Aleph %% \bxlg@Lamed \IfFileExists{cjhebrew.sty}{% \bxlg@declare@family{U}{bxlghbr}% \DeclareFontShape{U}{bxlghbr}{m}{n}{<->rcjhbltx}{}% \def\bxlg@Aleph{% \bgroup \usefont{U}{bxlghbr}{m}{n}\char39\egroup}% \def\bxlg@Lamed{% \bgroup \usefont{U}{bxlghbr}{m}{n}\char108\egroup}% }{%else \bxlg@required@package{logoAleph}{cjhebrew}% \def\bxlg@Aleph{\bxlg@warn@logo{logoAleph}\textsf{Aleph}}% \bxlg@required@package{logoLamed}{cjhebrew}% \def\bxlg@Lamed{\bxlg@warn@logo{logoLamed}\textsf{Lamed}}% } %% \bxlg@arara \IfFileExists{comfortaa.sty}{% \bxlg@declare@family{U}{bxlgcomf}% \DeclareFontShape{U}{bxlgcomf}{m}{n}{<->Comfortaa-Bold-T1}{}% \def\bxlg@arara{% \bxlg@matchlc{0.21}{\usefont{U}{bxlgcomf}{m}{n}arara}}% }{%else \bxlg@required@package{arara}{bxlgcomf}% \def\bxlg@arara{\bxlg@warn@logo{arara}\textsf{arara}}% } %% \bxlg@matchlc{}{} % NB. Here coeff is (1pt / 1ex). \def\bxlg@matchlc#1#2{% \ifx\scalebox\@undefined \mbox{#2}% \else \begingroup \@tempdima#1ex \xdef\bxlg@@g@tmpa{\strip@pt\@tempdima}% \endgroup \scalebox{\bxlg@@g@tmpa}{#2}% \fi} %% \bxlg@akern \def\bxlg@akern#1{% \begingroup \setbox\z@\hbox{i}% \dimen@\wd\z@ \advance\dimen@-0.2em \dimen@12.8\dimen@ \ifdim\dimen@<\z@ \dimen@\z@ \fi \ifdim\dimen@>1em \dimen@1em \fi \kern#1\dimen@ \endgroup} %% \bxlg@smaller{} \def\bxlg@smaller#1{% \begingroup \check@mathfonts \fontsize\sf@size\z@ \math@fontsfalse\selectfont #1% \endgroup} %% \bxlg@nonuc \def\bxlg@nonuc{% \spacefactor\@m} %% \bxlg@in@math{} \def\bxlg@in@math#1{% \begingroup \m@th \if b\expandafter\@car\f@series?\@nil \boldmath \fi $#1\relax$% \endgroup} %--------------------------------------- slant %% variables \let\bxlg@slant@val\relax \newdimen\bxlg@g@height %%<+> \bxtexlogoFontSlant % Uses the slant value of the current font. %%<+> \bxtexlogoSlant{} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoFontSlant{% \begingroup \@tempdima\fontdimen\@ne\font \bxlg@slant@a} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoSlant[1]{% \begingroup \@tempdima=#1\p@ \bxlg@slant@a} \def\bxlg@slant@a{% \bxlg@implement@slant \edef\bxlg@slant@val{\strip@pt\@tempdima}% \afterassignment\bxlg@slant@b \setbox\z@\hbox} \def\bxlg@slant@b{% \aftergroup\bxlg@slant@c} \def\bxlg@slant@c{% \leavevmode \global\bxlg@g@height\ht\z@ \ifdim\bxlg@slant@val\p@=\z@ \box\z@ \else \@tempdima\wd\z@ \wd\z@\z@ \bxlg@slant@start \box\z@ \bxlg@slant@end \kern\@tempdima \fi \endgroup} %% \bxlg@slant@start %% \bxlg@slant@end \def\bxlg@slant@start{% \PackageWarning\bxlg@pkgname {Cannot implement synthetic slant, perhaps\MessageBreak 'graphicx' (or 'graphics') is not loaded,\MessageBreak reported}% \global\let\bxlg@slant@start\relax} \let\bxlg@slant@end\relax %% \bxlg@implement@slant \def\bxlg@implement@slant{% \begingroup \chardef\bxlg@tmpb=0 \def\bxlg@tmpa{\special{ps: currentpoint grestore moveto}}% \ifx\bxlg@tmpa\Grot@end \chardef\bxlg@tmpb=1 \fi \def\bxlg@tmpa{\special{pdf:etrans}}% \ifx\bxlg@tmpa\Grot@end \chardef\bxlg@tmpb=2 \fi \def\bxlg@tmpa{\pdfrestore}% \ifx\bxlg@tmpa\Grot@end \chardef\bxlg@tmpb=3 \fi \def\bxlg@tmpa{\pdfextension restore\relax}% \ifx\bxlg@tmpa\Grot@end \chardef\bxlg@tmpb=4 \fi \def\bxlg@tmpa{\special{dvisvgm:bbox unlock}\special{dvisvgm:raw }}% \ifx\bxlg@tmpa\Grot@end \chardef\bxlg@tmpb=5 \fi \def\bxlg@tmpa{dvipdfmx.def}% \ifx\bxlg@tmpa\Gin@driver \chardef\bxlg@tmpb=2 \fi \def\bxlg@tmpa{xetex.def}% \ifx\bxlg@tmpa\Gin@driver \chardef\bxlg@tmpb=2 \fi \bxDebug{[gdriver=\the\bxlg@tmpb]}% \ifcase\bxlg@tmpb % unknown, then leave unimplmented \or % dvips \gdef\bxlg@slant@start{\special{% ps: gsave currentpoint currentpoint translate [1 0 \bxlg@neg@slant@val\space 1 0 0] concat neg exch neg exch translate}} \gdef\bxlg@slant@end{\special{ps: currentpoint grestore moveto}} \or % dvipdfmx \gdef\bxlg@slant@start{\special{% pdf:btrans matrix 1 0 \bxlg@slant@val\space 1 0 0}} \gdef\bxlg@slant@end{\special{pdf:etrans}} \or % pdftex \gdef\bxlg@slant@start{% \pdfsave \pdfsetmatrix{1 0 \bxlg@slant@val\space 1}} \gdef\bxlg@slant@end{\pdfrestore} \or % luatex (new) \gdef\bxlg@slant@start{% \pdfextension save\relax \pdfextension setmatrix{1 0 \bxlg@slant@val\space 1}} \gdef\bxlg@slant@end{\pdfextension restore\relax} \or % dvisvgm \gdef\bxlg@slant@start{% \special{dvisvgm:raw }} \gdef\bxlg@slant@end{\special{dvisvgm:raw }} \fi \global\let\bxlg@implement@slant\relax \endgroup} \AtBeginDocument{\bxlg@implement@slant} %% \bxlg@neg@slant@val \def\bxlg@neg@slant@val{% \expandafter\bxlg@neg@slant@val@a\bxlg@slant@val\relax} \def\bxlg@neg@slant@val@a#1#2\relax{% \if#1-\else-#1\fi#2} %% \bxlg@fallback@slant \def\bxlg@fallback@slant{0.167} %%<+> \bxtexlogoItalicOrSlant % Uses the slant value of the current font. \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoItalicOrSlant[1]{% \textit{% \@tempdima\fontdimen\@ne\font \ifdim\@tempdima>\z@ #1% \else \bxtexlogoSlant\bxlg@fallback@slant{#1}% \@tempdima\bxlg@fallback@slant\bxlg@g@height \kern.75\@tempdima \fi}} %--------------------------------------- reflect %%<+> \bxtexlogoReflect{}{} \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoReflect{% \bxlg@cond\ifx\reflectbox\@undefined\fi {\bxlg@reflect@b}{\bxlg@reflect@a}} \def\bxlg@reflect@a#1#2{\reflectbox{\upshape#1}} \def\bxlg@reflect@b{% \PackageWarning\bxlg@pkgname {Package 'graphics' is not loaded,\MessageBreak reported}% \global\let\bxlg@reflect@b\@secondoftwo \@secondoftwo} %--------------------------------------- small-caps %% constants \chardef\bxlg@smcp@mode@@auto=0 \chardef\bxlg@smcp@mode@@real=1 \chardef\bxlg@smcp@mode@@fake=2 %% variables \let\bxlg@use@fake@list\@empty \let\bxlg@smcp@mode\bxlg@smcp@mode@@auto %%<+> \bxtexlogoSmcp{} \@ifdefinable\bxtexlogoSmcp{% \DeclareRobustCommand\bxtexlogoSmcp[1]{% \bxtexlogoSmcpChoice{\MakeLowercase{#1}}{\MakeUppercase{#1}}} } %%<+> \bxtexlogoSmcpChoice{}{} \@ifdefinable\bxtexlogoSmcpChoice{% \DeclareRobustCommand\bxtexlogoSmcpChoice[2]{% \begingroup \bxlg@check@smcp \ifbxlg@ok \scshape #1% \else \bxlg@smaller{#2}% \fi \endgroup} } %%<+D> \bxtexlogoSmcpAs{} % [DEPRECATED] values: auto, real, fake \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoSmcpAs[1]{% \bxtexlogosetup{smallcaps=#1}} %%<+Deprecated> \bxtexlogoSmcpAsFakeFor \bxlg@checkdefinable \DeclareRobustCommand*\bxtexlogoSmcpAsFakeFor[1]{% \bxtexlogosetup{fake-smallcaps-for={#1}}} %% \bxlg@check@smcp \def\bxlg@check@smcp{% \ifx\bxlg@smcp@mode\bxlg@smcp@mode@@real \bxlg@oktrue \else\ifx\bxlg@smcp@mode\bxlg@smcp@mode@@fake \bxlg@okfalse \else \bxlg@check@smcp@manual \ifbxlg@ok \bxlg@check@smcp@auto \fi \fi\fi \bxDebug{[check->\meaning\ifbxlg@ok]}} \def\bxlg@check@smcp@manual{% \bxlg@oktrue \begingroup \@for\bxlg@tmpb:=\bxlg@use@fake@list\do{% \expandafter\bxlg@check@smcp@manual@a\bxlg@tmpb/?/?/?\bxlg@end}% \endgroup \bxDebug{[manual->\meaning\ifbxlg@ok]}} \def\bxlg@check@smcp@manual@a#1/#2/#3/#4\bxlg@end{% \bxlg@check@smcp@manual@b{#1}{\f@encoding}% \if@tempswa\else \bxlg@jump@exit \fi \bxlg@check@smcp@manual@b{#2}{\f@family}% \if@tempswa\else \bxlg@jump@exit \fi \bxlg@check@smcp@manual@b{#3}{\f@series}% \if@tempswa\else \bxlg@jump@exit \fi \aftergroup\bxlg@okfalse \bxlg@exit} \def\bxlg@check@smcp@manual@b#1#2{% \def\bxlg@tmpa{#1}% \@tempswafalse \ifx\bxlg@@star\bxlg@tmpa \@tempswatrue \else\ifx#2\bxlg@tmpa \@tempswatrue \fi\fi} \def\bxlg@check@smcp@auto{% \bxlg@oktrue \begingroup \bxlg@setcurfont\bxlg@fn@orig \edef\bxlg@sl@orig{\ifdim\fontdimen1\font>\z@ 1\else 0\fi}% \scshape \bxlg@setcurfont\bxlg@fn@smcp \edef\bxlg@sl@smcp{\ifdim\fontdimen1\font>\z@ 1\else 0\fi}% \ifx\bxlg@fn@orig\bxlg@fn@smcp \aftergroup\bxlg@okfalse \else\ifnum\bxlg@sl@orig=\bxlg@sl@smcp\else \aftergroup\bxlg@okfalse \fi\fi \endgroup \bxDebug{[auto->\meaning\ifbxlg@ok]}} %% \bxlg@setcurfont\CS \def\bxlg@setcurfont#1{% \edef\bxlg@tempa{\expandafter\meaning\the\font}% \expandafter\bxlg@setcurfont@a\bxlg@tempa\bxlg@mk#1} \def\bxlg@setcurfont@a#1 #2 #3\bxlg@mk#4{\def#4{#3}} %--------------------------------------- components %% \bxlg@epsilon \def\bxlg@epsilon{% \bxlg@in@math{\varepsilon}} %% \bxlg@cal{} \def\bxlg@cal#1{% \bxlg@in@math{\mathcal{#1}}} %% \bxlg@Suyah %% \bxlg@Yukidaruma \bxlg@if@ipaex@ok{% \bxlg@declare@ipaex@family{ff}% \def\bxlg@syt{\kern-0.06em}% \def\bxlg@Suyah{\bxtexlogoFontSlant{% \bxlg@ipaex{ff}\bfseries% \char125\bxlg@syt\char148\bxlg@syt\char103 }}% \bxlg@declare@ipaex@family{26}% \def\bxlg@Yukidaruma{\bxtexlogoFontSlant{% \bxlg@ipaex{26}\char3 }}% }{%else \bxlg@required@package{SuyahTeX}{ipaex-type1}% \def\bxlg@Suyah{\bxlg@warn@logo{SuyahTeX}% \textsf{Suyah}}% \bxlg@required@package{YukidarumaTeX}{ipaex-type1}% \def\bxlg@Yukidaruma{\bxlg@warn@logo{YukidarumaTeX}% \textsf{Yukidaruma}}% } %--------------------------------------- initial setup \bxtexlogosetup{ one-font=normal, smallcaps=auto, fake-smallcaps-for={*/cmss/*,*/lmss/*}, } %--------------------------------------- done \endinput