Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[eptex] \pdfsavepos の原点 #62

Closed
h-kitagawa opened this issue Aug 30, 2018 · 9 comments

Comments

@h-kitagawa
Copy link
Member

commented Aug 30, 2018

\pdfsaveposの闇や対応する e-pTeX のチケット,さらには texjporg:devel でも話題になりましたが,\mag が 1000 でない場合に \pdflast{x,y}pos の指す値が実際の値からずれるという症状がありました.

これは,(少なくとも dvips や dvipdfmx, xdvi では)dvi の原点が用紙左上から (1truein, 1truein) となっている一方で,\pdflast{x,y}pos の計算では左上から (1in, 1n) になっていることによるものです. d42a67f で (1truein, 1truein) とみなして計算するコードを加えました.テストが tests/pdforigin.{sh,tex} にあります.

なおこのパッチに伴い,\pdfpageheight=0pt の場合,用紙高さは「\shipout されたボックスの高さ+深さ」から 2(1truein+\voffset) を加えた量として扱われます.

@h-kitagawa

This comment has been minimized.

Copy link
Member Author

commented Aug 30, 2018

e-pTeX には \special{papersize=...pt,...pt} という「pt 単位で指定された papersize special」により \pdfpagewidth, \pdfpageheight を設定するという機能があります.ここでの寸法は常に true 付きとして扱われることが慣習になっているということを失念していたため, a8e789f で直しました.

上の機能は「用紙サイズの指定という意味では,\pdfpagewidth, \pdfpageheight の設定と papersize special の設定は同じではないか」という考えに基づいて入れたものですが,単位が pt しか許されない(truept もダメ)という点で非常に中途半端なものになっています.改修するとしたら以下の 2 つのどちらかでしょう:

  1. mm, cm, zw など全単位を扱えるようにする
  2. 逆に機能自体をさっくり削除する
@abenori

This comment has been minimized.

Copy link

commented Aug 31, 2018

ずれることがわかっていれば値を補正して使えばよいだけなので,無理に直さなくてもよいかなと思います.pdftexのdviモードも1inが原点ならば,それと同じ方がわかりやすいとも思いますし.

\special の件ありがとうございます.もともとe-pTeXを意識していないコードに対しても\pdfpagewidth等がきちんと設定されるようにということかと思うので,拡張はしなくてもよいかと思います.「papersize specialを使って\pdfpagewidth等を設定しよう」と考える人もいないでしょうし.削除してもよいかもしれませんが.

\pdfpagewidth\pdfpageheightのどっちもが0の時にのみ発動,なんてのも考えましたが,papersize specialが何度も発行されることもあるでしょうから,あまり意味ないかも.

@h-kitagawa

This comment has been minimized.

Copy link
Member Author

commented Aug 31, 2018

ずれることがわかっていれば値を補正して使えばよいだけなので,無理に直さなくてもよいかなと思います.pdftexのdviモードも1inが原点ならば,それと同じ方がわかりやすいとも思いますし.

コメントありがとうございます.そうすると,こういう方針でいきましょうか?

  • d42a67f (\pdflast{x,y}pos における原点を左上から (1in,1in) から現状に合わせて (1truein,1truein) にする)-> e-pTeX 単独では採用しない.入れるなら (e-TeX/)pdfTeX/XeTeX も合わせて.
  • a8e789f, 3ef7215 (papersize special の件) -> e-pTeX 独自挙動のため,採用
@abenori

This comment has been minimized.

Copy link

commented Sep 1, 2018

\pdflast(x|y)postの方はそれがわかりやすいと思います.

papersize special,結局拡張されたのですね.邪魔くさいこともあるので,明示的に無効化できるとよいかなとも思ったのですが,papersize special自身は至る所で発行されてしまうので,管理下にあるもののみ無効化できても意味がないかな.(現在は,の後にスペースを入れておけば無効化されるので,それで十分な気もします.)

@h-kitagawa

This comment has been minimized.

Copy link
Member Author

commented Sep 1, 2018

papersize special,結局拡張されたのですね.邪魔くさいこともあるので,明示的に無効化できるとよいかなとも思ったのですが

5ba018d で有効/無効を切り替える \readpapersizespecial を追加しました(標準値は 0: 解釈しない です).

@abenori

This comment has been minimized.

Copy link

commented Sep 1, 2018

ありがとうございます(試せていませんが)ちょっと確認させてください.

  • 「幅と高さの間には,空白なしの,でなければならない」というのは仕様として固定されていると見なしてよいでしょうか.(これがあれば個別に無効化することができるので.)

  • そもそもpapersize specialを解釈するというこの機能の目的は何でしょうか.「古い / e-pTeXを知らないコードでも\pdfpageheight等が極力正しく設定されるように」かと思っていたのですが,それだと

    標準値は 0: 解釈しない です

    と矛盾するので.

@h-kitagawa

This comment has been minimized.

Copy link
Member Author

commented Sep 1, 2018

「幅と高さの間には,空白なしの,でなければならない」

dvips や dvipdfmx のコードを見ると空白や「コンマなし」が許容されていたりするようですが,今回の話では一切許さないことにしましょう.

  <papersize special> → "papersize=" <length> "," <length>
  <length> → <fraction> <unit>
  <unit> → <unit2> | "true" <unit2> 
  <unit2> → "pt" | "pc" | "in" | "cm" | "mm" | "bp" | "dd" | "cc" | "sp"
  <fraction> → <nat> | <nat> "." <nat>
  <nat> → "" | <nat> "0" | <nat> "1" | ... 

そもそもpapersize specialを解釈するというこの機能の目的は何でしょうか.「古い / e-pTeXを知らないコードでも\pdfpageheight等が極力正しく設定されるように」かと思っていたのですが,

その通りです.フォーマット側で設定すればいいやと思っていたのですが,古いコードや互換性のことを考えると 1: 解釈する を標準にした方が良いでしょうか.

@abenori

This comment has been minimized.

Copy link

commented Sep 1, 2018

確かに空白が許容されるかは実装次第という感じですね.とりあえずもし必要な場合はここに空白を入れて個別の無効化を計ります.

フォーマット側で設定すればいいやと思っていたのですが,

言われてみればそうですが,

1: 解釈する を標準にした方が良いでしょうか.

の方が一貫性があってわかりやすいかなと思います.

@aminophen

This comment has been minimized.

Copy link
Member

commented Sep 4, 2018

#63 をマージしたので完了としておきます。

@aminophen aminophen closed this Sep 4, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.