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

ascmac + pict2e で縦書き #60

Closed
aminophen opened this Issue Dec 19, 2017 · 3 comments

Comments

Projects
None yet
1 participant
@aminophen
Member

aminophen commented Dec 19, 2017

「ascmac + pict2e を pLaTeX 系列の縦書きで使うと screen / itembox / \keytop の角丸の向きが壊れる」

# ちなみに LuaTeX-ja 縦書きでは,pict2e 使用時でも向きは壊れませんが,微妙に角がずれる

という問題があります。これに対処する実験をやってみました。\oval の定義自体をいじるのは怖いので,ascmac の \@hobox(= ascmac の中で \oval を呼び出す唯一の命令)をいじって,「\oval を横組のボックス内で組んでしまう」という手をとります。

\documentclass[dvipdfmx]{tarticle}
\usepackage{pict2e}
\usepackage{ascmac}

\makeatletter
\newbox\ascmac@hoboxa
\newbox\ascmac@hoboxb
\def\ascmac@parse@ovarg#1{%
 \iftdir % for pLaTeX and upLaTeX
 %\ifnum\ltjgetparameter{direction}=3\relax % lltjp-tascmac.sty
  \def\ascmac@ovarg{}%
  \@tfor\reserved@a:=#1\do{%
    \if l\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg t}%
    \else\if t\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg r}%
    \else\if r\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg b}%
    \else\if b\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg l}%
    \fi\fi\fi\fi}%
 \else
  \def\ascmac@ovarg{#1}%
 \fi
}
\def\ascmac@pass@oval#1#2{\oval(#2,#2)[#1]}
\def\@hobox#1#2#3{%
  \ascmac@parse@ovarg{#1}\setbox\ascmac@hoboxa=\hbox{\yoko
    \expandafter\ascmac@pass@oval\expandafter{\ascmac@ovarg}{#3}\hss}%
  \ascmac@parse@ovarg{#2}\setbox\ascmac@hoboxb=\hbox{\yoko
    \expandafter\ascmac@pass@oval\expandafter{\ascmac@ovarg}{#3}\hss}%
  \wd\ascmac@hoboxa=\z@ \wd\ascmac@hoboxb=\z@
  %\ltjsetwd\ascmac@hoboxa=\z@ \ltjsetwd\ascmac@hoboxb=\z@ % lltjp-tascmac.sty
  \hbox to\@scw{\box\ascmac@hoboxa\hfil\box\ascmac@hoboxb\relax
  \dimen\z@=#3\unitlength\advance\dimen\z@\@wholewidth
  \vrule\@width\z@\@height\z@\@depth.5\dimen\z@}}
\makeatother
\begin{document}

\begin{screen}
ここはscreen環境です。
\end{screen}

\begin{screen}[4]
ここはscreen環境です。
\end{screen}

\begin{itembox}{枠タイトル}
ここはitembox環境です。
\end{itembox}

キートップ\keytop{A}です。

\end{document}

このコードを使うと,pLaTeX / upLaTeX / LuaTeX-ja 全て縦組を綺麗にできます。

[edit] \wd をいじるところは luatexja では \ltjsetwd にする必要あり。

@aminophen

This comment has been minimized.

Member

aminophen commented Dec 22, 2017

[edit] \wd をいじるところは luatexja では \ltjsetwd にする必要あり。

よく考えたら,ここで作っている「箱」はどうせ寸法全部ゼロでいいので

  \wd\ascmac@hoboxa=\z@ \wd\ascmac@hoboxb=\z@
  \ht\ascmac@hoboxa=\z@ \ht\ascmac@hoboxb=\z@
  \dp\ascmac@hoboxa=\z@ \dp\ascmac@hoboxb=\z@

としてしまえば「現行の ascmac + 新しい lltjp-ascmac(\iftdir → \ifnum\ltjgetparameter)」というリリース時期のズレが起きても問題が起きなくてよさそうですね。これでいこう。

[さらに edit] 名前空間は \asc@ でなく \ascmac@ にしておこうと思います。

@aminophen

This comment has been minimized.

Member

aminophen commented Dec 22, 2017

というわけで 2974c43 で開発版に入れてみました。LuaTeX-ja の lltjp-tascmac.sty に

\def\ascmac@parse@ovarg#1{%
  \ifnum\ltjgetparameter{direction}=3\relax % lltjp-tascmac.sty
    \def\ascmac@ovarg{}%
    \@tfor\reserved@a:=#1\do{%
      \if l\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg t}%
      \else\if t\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg r}%
      \else\if r\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg b}%
      \else\if b\reserved@a \edef\ascmac@ovarg{\ascmac@ovarg l}%
      \fi\fi\fi\fi}%
  \else
    \def\ascmac@ovarg{#1}%
  \fi
}

を足しさえすれば,あとは問題がなさそうな感じです。

@aminophen

This comment has been minimized.

Member

aminophen commented Mar 9, 2018

pLaTeX2e 2018/03/09 を出し,同時に ascmac は独立させて CTAN に submit しました。反映されるまで今しばらくお待ちください。

@aminophen aminophen closed this Mar 9, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment