マクロツイーター

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

scdviout-pgf がアヒルに対応した件

scdviout-pgf でアヒルしてみる

dviout で PGF/TikZ が扱えるようになる画期的な scdviout-pgf パッケージであるが、先日、このパッケージについてチョットした問題点が指摘された。

確かに、「出力をゆきだるま☃にする」ことは問題解決になっているが、「出力をアヒル🦆にする」ことでも問題を解決できる。ならば、ゆきだるま☃でなく、むしろアヒル🦆を出力すべきではないか。

「出力をアヒル🦆にする」という手法が有効であることは確かである。しかし、「ゆきだるま☃とアヒル🦆のどちらがより有効か」という議論は、無用な争いを生む恐れがあるため、是非とも避けたいところである。

そういうわけで、scdviout-pgf について、「ゆきだるま☃とアヒル🦆のどちらを出力するか」をオプションで選べるようにする」という改修を行った。

新しい 0.82 版では、scdviout-pgf パッケージのオプションに duck を指定することで、TIkZ の出力をアヒル🦆にすることができる。

% pLaTeX文書
\documentclass[dviout,a4paper]{jsarticle}% dvioutしたい!
\usepackage[duck]{scdviout-pgf}% アヒルしたい!!!
\usepackage{tikz}
\usetikzlibrary{calc}
\colorlet{myblue}{blue!80!black}
\begin{document}

\begin{center}
% "三角形の外心"の図をTikZで頑張って作ったよ
\begin{tikzpicture}[x=5mm,y=5mm]
  \coordinate (A) at (4,4);
  \coordinate (B) at (0,0);
  \coordinate (C) at (6,0);
  \coordinate (O) at (3,1);
  \draw[myblue!80] (O)--($(A)!.5!(B)$);
  \draw[myblue!80] (O)--($(B)!.5!(C)$);
  \draw[myblue!80] (O)--($(C)!.5!(A)$);
  \draw[myblue!80,overlay] (O) circle[radius=3.16228];
  \fill[myblue] (O) circle[radius=2pt] node[left=2pt] {O};
  \draw[thick] (A)--(B)--(C)--cycle;
  \fill (A) circle[radius=2pt] node[above=2pt] {A};
  \fill (B) circle[radius=2pt] node[left =2pt] {B};
  \fill (C) circle[radius=2pt] node[right=2pt] {C};
\end{tikzpicture}
\end{center}

\end{document}

これを platexコンパイルして dviout で開くと、以下のような素敵な出力が得られる。

一方で、次のように scdviout-pgf のオプションを snowman にした場合は:

\usepackage[duck]{scdviout-pgf}% ゆきだるま!!!

従来通り、以下のような(これまた)素敵な出力が得られる。

“dc”な dviout-pgf

なお、オプションを省略した場合の既定値は snowman である。これは単純に旧版との互換性のための仕様であるが、熱狂的なアヒル者にとっては不満があるかも知れない。無用な争いは是非とも避けたいので、対策として、dcdviout-pgf というパッケージを新たに提供した。これは、「出力選択の既定値が duck である」ことを除いて、scdviout-pgf と全く同じ機能を有するものである。

% (互換性のため)出力は'snowman'
\usepackage{scdviout-pgf}

% 出力は'duck'
\usepackage{dcdviout-pgf}

% オプションを明示した場合は両者の差異はない
\usepackage[snowman]{scdviout-pgf}% 出力は'snowman'
\usepackage[snowman]{dcdviout-pgf}% 出力は'snowman'
\usepackage[duck]{scdviout-pgf}% 出力は'duck'
\usepackage[duck]{dcdviout-pgf}% 出力は'duck'

おまけ:出力を「無」にする

次のように、scdviout-pgf のオプションに phantom を指定すると:

\usepackage[phantom]{scdviout-pgf}

TikZ の出力は「無」に変わる。

無愛好家にとっては、こちらの方が素敵かも知れない。

おまけ:dvipdfmx で scdviout-pgf する

scdviout-pgf パッケージはドライバ指定が dviout でないと動作しないのであるが、実は、このパッケージが行っていることは「PGF のドライバを“pgfsys-scdviout”に設定する」だけであり、この pgfsys-scdviout 自体は dvipdfmx でも動作する*1。次のように、直接 PGF のドライバを設定すればよい。

\documentclass[dvipdfmx,a4paper]{jsarticle}% dvipdfmx したい!
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code BEGIN
\def\pgfsysdriver{pgfsys-scdviout.def}% でも出力はゆきだるま!!
%\def\scpgfsysessence{duck}% アヒルならさらにコレを追加
%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! TeX code END
\usepackage{tikz}

*1:一般に、dvips 互換の color special および tpic special をサポートした DVI ドライバであれば動作するはずである。