マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

もっと新しくなったbxtexlogoの話(v0.8)

前回のbxtexlogoの記事は0.4版のときのものだったので、それより後の改修点について解説する。

ロゴがもっと増えた件

追加されたやつ

※上の4つ(OpTeXCSTUGHiTeXTeXXeT)は**による一括インポートの対象となる。それ以外は一括インポートの対象外で、個別にインポートする必要がある。
1TeXOneTeXと等価である。\bxtexlogo命令で使う用途で用意した。
XeT以下の6つはロゴを構成する部品である。loweは「LaTeX2e」のロゴに現れる「下がったε」の部分。
YukidarumaTeXは素敵っぽいが何を指すかは不明である(ざんねん🙃)

さっそく新しいロゴを使ってみた文書の例。

% upLaTeX+dvipdfmx文書
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx,bxtexlogo}
% "Prote"等は一括インポートの対象外なので個別に指定する
\bxtexlogoimport{*,**,Prote,lowe,One,Yukidaruma}
\begin{document}
\begin{itemize}
\item 現在の{\HiTeX}{\eTeX}拡張をもつ。\\{\Prote}の実装を利用しているらしい。\\
  ※ただし{\TeXXeT}拡張は除外されている。
\item {\LaTeX}3{\lowe}(非存在)
\item sc{\One}Typstしましょう!{\Yukidaruma}
\end{itemize}
\end{document}

hologoのロゴが全部使える件

「一括インポート対象外のロゴ」という概念を導入したついでに、今まで省いていたものも含めて全てのhologo提供のロゴをbxtexlogoでも使用可能にした。以下に示すのはその中の一部である。

追加されたhologoのやつ(抜粋)

新たに追加したものは一括インポート(***)の対象外なので、個別にインポートするか、または後述の\bxtexlogo命令を1使う必要がある。

% upLaTeX+dvipdfmx文書
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx,bxtexlogo}
% やはり個別にインポートする
\bxtexlogoimport{La,PiC}
\newcommand\+{\hspace{0pt}}% 和欧文間空白を消すトリック
\begin{document}
\begin{itemize}
\item アレ/{\La}アレ Advent Calendar
  % ちなみに"\TeX"は(カーネル定義済なので)常に使える
\item あたま{\TeX}\+ァ\+{\TeX}\+ァ さえて{\PiC}\+ァ\+{\PiC}\+ァ(違う)
\end{itemize}
\end{document}

\bxtexlogo: インポートせずに使える件

\hologo{‹名前›}と書く必要のあるhologoのロゴを単一命令にして使いやすくする」のが本パッケージの当初の目的であったが、本パッケージ独自のロゴが増えてきたので、逆に「独自の(稀に使う)ロゴをわざわざインポートせずに\hologoみたいな命令で直接書きたい」という要望が想定できる。そこで、名前を引数に指定してロゴを出力する命令である\bxtexlogo命令を用意した。

※命令としてのインポートの有無にかかわらず\bxtexlogo命令は常に使用可能である。

% upLaTeX+dvipdfmx文書
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx,bxtexlogo}
\bxtexlogoimport{LuaTeX}% "\LuaTeX"をインポートした
\begin{document}
{\LuaTeX}とか% インポートしたので使える
\bxtexlogo{LuaTeX}とか% "\bxtexlogo"は無条件に使える
\bxtexlogo{LuahbTeX}とか。% やはり無条件に使える
\end{document}

今回新たに追加したロゴの中には1TeXや(hologoの)(La)TeXのように非英字を含む名前のものがある。これらはインポートして命令にする使い方はできない2が、\bxtexlogoで使うことが想定されている。

% upLaTeX+dvipdfmx文書
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{graphicx,bxtexlogo}
\begin{document}
\bxtexlogo{OneTeX}とか
\bxtexlogo{1TeX}とか% 数字が入っても問題無し
\bxtexlogo{(La)TeX}とか。% hologo提供のロゴ("TeXLaTeX"と同じ)
\end{document}

dvipsとかdvisvgmでマトモに1TeXできる話

一般的に、TeX関連のロゴを斜体(イタリックも含む)の書体の中で用いる場合はロゴの文字も斜体で書く。しかしロゴで使われる特殊な記号の中には斜体のフォントが用意できないものもあり、本パッケージ提供のロゴでは、そういう部品について「斜体変形をかけた文字」(合成斜体)が使われている。例えば、「1TeX」(OneTeX)の「1」や「スヤァTeX」(SuyahTeX)の「スヤァ」の部分が該当する。

% pdfLaTeX文書
\documentclass[a4paper]{article}
\usepackage{graphicx,bxtexlogo}% ここではgraphicxは必須
\bxtexlogoimport{OneTeX,SuyahTeX,YukidarumaTeX}
\begin{document}
\itshape % 全体をイタリックに印字
\begin{itemize}
\item I like {\OneTeX} better than {\SuyahTeX}.
\item Do you know what {\YukidarumaTeX} is?
\end{itemize}
\end{document}

※「合成斜体」を使ったロゴを出力する場合はgraphicxパッケージの読込が必要である。これを忘れると警告が出る。

ところが諸般の事情(=手抜き🙃)のため、従来はこの「合成斜体」の処理がpdfTeX系とdvipdfmx系のドライバにおいてしか実装されてなかった。このため、例えば[dvisvgm]を使った場合は「合成斜体」が無効になりロゴの外見がイマイチなことになっていた。

0.8版においてdvipsおよびdvisvgmについても「合成斜体」の処理が実装されたので、それを使ったロゴの出力がマトモになる。

dvisvgmを使う場合は、(dvipdfmxの時と同じく)グローバルオプションにdvisvgmを指定する。これでgraphicxのドライバがdvisvgm用になり、bxtexlogoはgraphicxの設定に追随するので正しくdvisvgm用の処理が使われるようになる。

% 欧文LaTeX+dvisvgm文書
\documentclass[dvisvgm,a4paper]{article}% ドライバオプション指定
\usepackage{graphicx,bxtexlogo}% ここではgraphicxは必須
\bxtexlogoimport{OneTeX,SuyahTeX,YukidarumaTeX}
\begin{document}
\itshape % 全体をイタリックに印字
\begin{itemize}
\item I like {\OneTeX} better than {\SuyahTeX}.
\item Do you know what {\YukidarumaTeX} is?
\end{itemize}
\end{document}

※先のpdfLaTeX用のソースコードと異なるのはドライバオプション(dvisvgm)の追加の部分だけである。

余談であるが、Yukidarumaの“ロゴ”は、本来は(実態が不明な)「☃TeX」のロゴの部品として用意されているが、ロゴとは無関係に「☃」の文字を出す用途に使える。「斜体に対応した☃の文字」を出す手段は貴重であるので、本質的な語句を多用する人は記憶に留めておくといいかもしれない。

\bxtexlogosetup: パラメタ設定する件

key-value形式でパラメタ設定を行う命令が新設された。

\bxtexlogosetup{‹パラメタ›=‹値›,…}

現状で有効なパラメタを以降で紹介する。

ghost: ゴーストする件

TeX関連のロゴは基本的に欧文なので、和文の文書中で用いる場合は周りの和文文字との間に和欧文間空白が適切に入ることが望ましい。しかしロゴのような「凝った加工」を施した文字があると自動の和欧文間空白挿入が失敗することが多い。これへの回避策となるのがbxghostパッケージによる「ゴースト挿入」である。

bxtexlogoではロゴの周りに自動的にゴーストを入れる機能を用意して、ghostパラメタで有効化できる。

  • ghost=‹真偽値›(既定=偽): 自動ゴースト挿入を有効にするか。
    trueにする場合はbxghostが読み込まれている必要がある。

すなわち、以下の手順3で自動ゴースト挿入が有効になる。

  1. bxghostパッケージ4を読み込む。
  2. bxtexlogoのパラメタghosttrueに設定する。

ゴースト挿入の効果をみるための例を示す。

% upLaTeX+dvipdfmx文書
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{bxghost,bxtexlogo}% bxghostを読み込む
\bxtexlogoimport{SATySFi}
\begin{document}
% 比較のため, ghost無効の状態で出力する
お客様の中に{\SATySFi}芸人はおられますか。

% ghostを有効にして出力する
\bxtexlogosetup{ghost=true}% ghostする
お客様の中に{\SATySFi}芸人はおられますか。
\end{document}

※この文書ではゴースト挿入が有効と無効の状態を比較するために敢えて本文の途中でghosttrueにしているが、もちろん実際にはプリアンブルで設定することが普通であろう。

ghostを有効にするとSATySFiロゴの両側に正しく和欧文間空白が入っていることがわかる😊

one-font: 1を太くしたい話

「1TeX」のロゴの「1」の文字はいわゆる「黒板太字」で書かれる。「黒板太字」であればどの書体であっても「正しいロゴ」と見なされるわけだが、1TeXの作者(某ZR氏🙃)は「dsrom」という書体(doublestrokeパッケージ)を使っている。このため、bxtexlogoの既定の動作では「1」のフォントとしてdsromが優先的に5使っている。

dsromはカッコイイ書体(多分🙃)であるが「太字版がない」という欠点(ええっ😲6)がある。だから太字の書体の中で1TeXのロゴが現れる場面においては既定動作ではバランスが悪く見えるかもしれない。

太字版がある黒板太字のフォントというと「bboldx」というものが存在する。そこで、bxtexlogoではこのフォントに切り替えるためのパラメタを用意している。

  • one-font=‹値›: 「1TeX」ロゴの「1」の書体を指定する。
    • normal(既定): 既定の動作。最優先でdsromを使う。
    • bboldx: bboldxを使う。

実際に「1」の書体をbboldxに切り替える例を示す。

% pdfLaTeX文書
\documentclass[a4paper]{article}
\usepackage{graphicx,bxtexlogo}
\bxtexlogoimport{OneTeX}
\bxtexlogosetup{one-font=bboldx}
\begin{document}
I love {\OneTeX}! % 中字
\textbf{Yes, I love {\OneTeX}!!} % 太字
\end{document}

これで良くなったかは微妙だが、取りあえず太字のロゴとしての整合性は取れているだろう🙃

その他諸々の話

他のパラメタについては使用する機会が乏しいと思われるので詳細は省略する。

  • smallcaps=‹値›: スモールキャップの文字を出力する場合に、実際のフォントの指定を行うか疑似出力(小さいサイズの大文字を出す)を行うか。

    • auto(既定): 「CM Sans Serif」と「LM Sans Serif」のときだけ(スモールキャップがないことが判っているので)疑似にする。
    • real: 常に実際のフォントの指定を行う。書体にスモールキャップがない場合はフォールバックが起こるので不正確な出力がになりうる。
    • fake: 常に疑似にする。
  • hologo-for-basic=‹真偽値›(既定=偽): 本パッケージ提供のロゴの中の「TeX」「LaTeX」「LaTeX2e」の部分の出力にhologoの該当のロゴを使うか。偽の場合は現在定義されている\TeX\LaTeX\LaTeXe命令を使う。

まとめ

というわけで皆さん、新しいbxtexlogoパッケージでドンドン「1TeX」ロゴを書いていきましょう!💁(えっ😲)


  1. もっとも、hologo提供のロゴなら\hologo命令でも使えるので\bxtexlogoを使うメリットはないのであるが。
  2. ただしTeXのレベルで考えると、実は\bxtexlogoimport{1TeX}により1TeXという名前の制御綴は実際に定義される。
  3. 将来、一定の条件下でghostの既定値を有効にする改修を行うかもしれない。
  4. bxghostの代わりにbxghost-libを読み込んでもよい(知っている人向け情報)。
  5. 「dsrom→bbm→bbold」の順で最初に見つかったものを使い、どれもない場合は通常の太字の「CM Roman BoldExtended」にフォールバックする。
  6. 元々数式用の「黒板太字」なのだから太字版がないのはアタリマエである。