tikzの\drawでline width=0ptの線は不可?

tikzの\drawでline width=0ptの線は不可?

- 本田 知亮 の投稿
返信数: 4
\documentclass[dvipdfmx]{article}%%pdftexでも同じ

\usepackage{tikz}

\begin{document}
\tikz{\draw[line width=0pt](0,0) --++ (10mm,10mm);}
\end{document}

これを処理すると,線幅が0なので,
何も描画されないように思いますが,
実際は結構くっきり,なんとなく幅0.4ptくらいで
斜め線が描画されます.

幅0ならそもそも書かなければいいので,
実害はないんですが,これはどういうことなのでしょうか
こういう仕様なのか,どこかに言及があるとか,
何かご教示いただければ嬉しいです.

%-------

対症療法的には
pgfcorepathusage.code.texの中の
\pgfusepathの定義の中の最初の方にある
\pgfset{#1}のあとで

\ifdim\pgflinewidth=\z@
\let\pgf@up@stroke\pgfutil@empty
\fi

なんてのをいれると,上の例のようなケースは期待通りになるのですが,
乱暴すぎるように思います.

本田 知亮 への返信

Re: tikzの\drawでline width=0ptの線は不可?

- Z. R. の投稿

PDF描画命令をみると

q 0.0 w 0.0 0.0 m 28.3468 28.3468 l S Q

となっていて(wはPostScriptのsetlinewidth)“線幅ゼロ”の線が描かれていました。要するに、TikZの仕様としては、線幅ゼロを指定されたらそのまま“線幅ゼロ”で描画するようです。

PDFの仕様※では、“線幅ゼロ”はいわゆる「ヘアライン」(当該のデバイスで可能な最も細い線)を意味するようです。自分の手元のAcrobat Readerでは「いくら表示を拡大してもずっと1ピクセル幅で表示される」ような線になっています。

※PDF Referenceの“Details of Graphics State Parameters”節:

A line width of 0 denotes the thinnest line that can be rendered at device resolution: 1 device pixel wide. However, some devices cannot reproduce 1-pixel lines, and on high-resolution devices, they are nearly invisible. Since the results of rendering such zero-width lines are device-dependent, their use is not recommended.
Z. R. への返信

Re: tikzの\drawでline width=0ptの線は不可?

- 和田 勇 の投稿

Z.R さんの引用に重複すると思いますが、以下のようにもコメントが書かれています。

texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
232-% - linewidth
233:%   The `thickness' of the line. A width of 0 is the thinnest width
234-%   renderable on the device. On a high-resolution printer this may
235-%   become invisible and should be avoided. A good choice is 0.4pt,
236-%   which is the default.
和田 勇 への返信

Re: tikzの\drawでline width=0ptの線は不可?

- 本田 知亮 の投稿
ご教示ありがとうございます.

>以下のようにもコメントが書かれています

こんなところにコメントがあったんですね.
全然気が付いてませんでした.
ずっと\pgfusepathを追いかけていて見逃してました.

それにしても・・

>On a high-resolution printer this may become invisible

もともと遭遇した現象が,まさにこれです.
手元のプリンタの基準の設定だと消える上に
pdfviewerの類でも普通の表示倍率では見えない
(viewerと倍率を変えると見えたり,消えたりする)
ということから
\drawでline width=0ptだとどうなるんだ?ということに至ったのです.
ドライバかデバイスかそういう方面かとも考えていましたが,
どうやらそのようですね.

ありがとうごさいました.
Z. R. への返信

Re: tikzの\drawでline width=0ptの線は不可?

- 本田 知亮 の投稿
ありがとうございます.

>q 0.0 w 0.0 0.0 m 28.3468 28.3468 l S Q

この手を失念してました.
PDFを読むという手が残ってました,
dviは結構よく読む(この時点で話がおかしいですけど)んですが,
今回の「line width=0pt」の元ネタで焦ってて,
まったく考えが及んでませんでした.

>※PDF Referenceの“Details of Graphics State Parameters”節:

そういう仕様なんですね・・これはある意味,参りました.

これから類推するに,
黒い領域の上から同じ大きさの白い領域を
「ぴったり」上書きするなんてものも
微妙な感じですね・・・

じつは「元ネタ」は
「下が色付きfill,上が白のfillをぴったり重ねる」という状況で,
これでピンと来られる方もいらっしゃると思いますが,
tcolorboxでrightruleの類を0ptにしたcolback=whiteのケースです


ぴったり重なっているはずなのに
ドライバやらプリンタやら解像度やら,
AdobeReaderやらSmatra,VScodeのPDFviewerやら,
挙句には,同じデータ同じ出力方法でも1枚目と2枚目でとか
重ねの下側の色が微妙に薄い線で出たり出なかったりという事象に遭遇して,
それなら実際に本当に細い線ならどうなるということで
\draw[line width=0pt]をやってみたという次第だったりします.

微妙そうなのでtcolorboxでは
emptyスキンかframe engin/interior engin=emptyで
枠を直接書くことにします.


理解と納得ができました,重ねてお礼申し上げます