-
Notifications
You must be signed in to change notification settings - Fork 8
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
縦組クラス #30
Comments
[1] について,titlepage 環境の最初に ついでに,pldoc.pdf の titlepage の項を見ていると,
とあるのですが,説明通りの意図ならば [2] はあっても良いのではと個人的には思います.文庫本なんかだと左起こしの方が多いような気がしますし.もちろん互換性は維持したうえでの話です. [3] は現状維持でよいのでは. [4] は結果を見てみただけですが,確かに妙な感じがします. |
[4] は簡単には \def\p@thanks#1{\footnotemark
\protected@xdef\@thanks{\@thanks
\protect{\noindent\hbox{\yoko$\m@th^\thefootnote$}#1\protect\par}}} にすると違和感がなくなります。なお、pldoc.pdf の
の意図はよく理解できていません。挙動的には |
あけましておめでとうございます。本年もよろしくお願いします。 [1] の \cleardoublepage はちょっとよくわかりません。推測ですが
なお、kmaed さんご指摘の
は、コードの方は LaTeX2e の classes.pdf と同じなので
これを単に日本語訳しようとして訳し間違えたと思われます。ドキュメントを直します。 |
本当ですね.ありがとうございます. |
twoside の訳を c3caf47 で「両面」にしました。 先日 66fb747 で入れた openany の修正 (texjporg/jsclasses#48) と今回の誤訳修正は master に commit しましたが、これ以外の変更は未確ということでブランチを切りましょう。 |
TeXQ&A にときどき書き込んでいる 北見 けん です。 [1]と[2]に関連して、\cleardoublepage の扱いについて。 この件を検討する上で、 LaTeX 本体では \cleardoublepage は その上で、文書クラスにおいては、どの文書クラスでも、 そこで、問題点は そもそも、LaTeX 本体の設計時に、横書き左綴じの書籍しか考慮せずに、 互換性を考慮せずに根本的に設計を変えるとするならば、 まあ、互換性は簡単に捨てるわけにはいかないので、この案は採用できなさそうですが。 で、今後どのように変更するとしても、少なくとも上に書いた [A] と [B] の問題点を いきなりの長文で失礼いたしました。 |
北見さん、こちらでもよろしくお願いいたします。
ありがとうございます。実は考えをまとめる時間がとれず書いていませんでしたが、私も漠然とそのあたりのことが気にかかっています。いろいろ迷いますが、標準以外のクラスも考慮すると、[A] にあたる「\cleardoublepage がカーネルで再定義される」ということ自体は変えてはいけない気もしますね。 (あと私事ですが、1〜2月は議論や考察に対して私が充分な時間をとれないと思います。事実誤認などあるかもしれませんので、その際はどなたでも仰ってください。) |
早速レスポンスいただきありがとうございます。
やはり (p)LaTeX カーネルの変更は影響が大きいですね。 多くの方から意見が集まるといいですね。 |
あまりよく考えていませんが、おもしろそうだなと思ったのは
という北見さんの発想でした。これを (p)LaTeX カーネルに「追加する」のはアリではないかという気がしています。もちろん \cleardoublepage は従来どおりの挙動とし、互換性を崩さないという前提です。「古い pLaTeX + 新しいクラス」でもエラーにならないように、クラス毎に追加するほうがよいのかもしれませんが、どうせならカーネルに…と思わなくもない、という一つの意見です。 |
北見さんの発想と同様なことを、クラスファイル側に追加してすでにやっています。 某弊社では、cls(dtxにいたる)内で横書き、縦書きそれぞれに改丁に関する命令を追加しています。具体的なマクロは以下のとおりです。 横書き% \def\cleardoublepage{\clearpage\if@twoside\ifodd\c@page\else
% \hbox{}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\let\cleardoublepage@right\cleardoublepage
\def\cleardoublepage@left{\clearpage\if@twoside\ifodd\c@page
\hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\let\clearoddpage\cleardoublepage@left 縦書き\def\cleardoublepage{\clearpage\if@twoside\ifodd\c@page\else
\hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\let\cleardoublepage@left\cleardoublepage
\def\cleardoublepage@right{\clearpage\if@twoside\ifodd\c@page
\hbox{}\thispagestyle{empty}\newpage\if@twocolumn\hbox{}\newpage\fi\fi\fi}
\let\clearoddpage\cleardoublepage@right クラスオプションで各見出しにおける開始頁起こしの制御基本的に(1つの製作プロジェクトに含まれる) LaTeX 文章内に、 そこで、各見出しにおける開始頁起こしは、クラスオプションで
なお、このような制御をやりだすと、 さらに、前付 ここまで汎用クラスファイルで用意するかどうかはまた別の話かもしれません。 |
この点についてですが、pLaTeX および標準クラスのこの挙動に合わせた運用がこれまで実際になされていたという報告です。 TeX Q&Aの いな んずさんの書き込みです。 これだとやはり、すでに運用されていた仕様は追認しないと困ることになりそうですから、縦書きでの左ページ起こしオプションの「追加」が無難なところですね。どんなオプション構造がいいか、munepi さんが紹介なさっている方法も参考になります。 |
出来るところから進めていきたいと思います。今までの話でいくと
は従来の挙動を維持したままオプション追加ということでよいですかね。実装方法は、\celarナントカ を必要なだけクラスファイルに追加することになるでしょうか。 これに少し絡んできますが
これはどうなのでしょう。\cleardoublepage が \maketitle に入っているのが原因ですが、「従来の挙動を維持したまま」のほうがよいのかどうか。この挙動を前提にした運用が今までされてきたのか、という点について、ご存知の方はいらっしゃいますか?
現状でなにもしない。
これはどう見ても私には奇妙なのですが、修正ということで入れてよいでしょうか? 挙動が変わると困る場合があれば仰ってください。 |
本 issue #30 の実装を進めるため、tatecls ブランチを切りました。手始めに 8bff00c で % 著者名の脇に表示される合印は直立した数字、注釈側は横に寝た数字となっていまし
% たが、不自然なので|\hbox{\yoko ...}|を追加し、両方とも直立するようにしました。
% \changes{v1.7d}{????/??/??}{縦組クラスの所属表示の番号を直立にした}
% \begin{macrocode}
\def\p@thanks#1{\footnotemark
\protected@xdef\@thanks{\@thanks
\protect{\noindent\hbox{\yoko$\m@th^\thefootnote$}#1\protect\par}}}
% \end{macrocode}
% \end{macro} |
\clearナントカpage を実装して openleft を増やす話ですが、調べてみると \cleartooddpage / \cleartoevenpage については nextpage.sty というパッケージに同名の命令があります。これが既存のドキュメントに使われている可能性は十分あるので、名称については衝突しないものを考案する必要があります。 そこで、「非ユーザ向け内部命令」ということにして
の 4 つを jclasses の中で定義し、クラスファイル内ではこれを使ってみました (b748feb) 。欧文 LaTeX の \cleardoublepage が 3. に、また pLaTeX の \cleardoublepage が 2. にあたるものです。 文字化けして読みづらい説明文: % \subsection{改ページ(日本語\TeX{}開発コミュニティ版のみ)}
%
% |\cleardoublepage|命令は、\LaTeX{}カーネルでは「奇数ページになるまでページを
% 繰る命令」として定義されています。しかしp\LaTeX{}カーネルでは、アスキーの方針
% により「横組では奇数ページになるまで、縦組では偶数ページになるまでページを
% 繰る命令」に再定義されています。すなわち、p\LaTeX{}では縦組でも横組でも
% 右ページになるまでページを繰ることになります。
%
% p\LaTeX{}標準クラスのbookは、横組も縦組も|openright|がデフォルトになっていて、
% これは従来p\LaTeX{}カーネルで定義された|\cleardoublepage|を利用していました。
% しかし、縦組で奇数ページ始まりの文書を作りたい場合もあるでしょうから、
% コミュニティ版クラスでは以下の命令を追加します。
% \begin{enumerate}
% \item|\pltx@cleartorightpage|:右ページになるまでページを繰る命令
% \item|\pltx@cleartoleftpage|:左ページになるまでページを繰る命令
% \item|\pltx@cleartooddpage|:奇数ページになるまでページを繰る命令
% \item|\pltx@cleartoevenpage|:偶数ページになるまでページを繰る命令
% \end{enumerate}
% また、コミュニティ版クラスの内部では、p\LaTeX{}カーネルの|\cleardoublepage|の
% 代わりに上記の命令を使って|openright|および|openleft|オプションを実装します。
% \changes{v1.7d}{????/??/??}{\cs{cleardoublepage}の代用となる命令群を追加} |
7881f2c で機械的に openleft オプションを追加しました。従来の openright の挙動を元に、対称性を重視して実装してあります。これが妥当な挙動かどうかは議論が必要と思います。特に、タイトル前の白紙ページについてはどうすべきでしょうか。 |
これは「openright かつ book のとき」 縦組クラスは (u)pLaTeX 系およびその派生物以外に見当たりませんので、横書きの openleft について既存の cls 達を調べてみると、openleft の実装があるのは memoir と koma-script だけでした。koma-script の場合では key=val 方式であるという syntax の違いはありますが \documentclass[headings=openleft]{scrbook}
%\documentclass[headings=openleft]{scrreprt}
\title{hoge}
\author{fuga}
\usepackage{lipsum}
\begin{document}
\maketitle
\lipsum[1-2]
\end{document} の挙動が現在の platex の tatecls ブランチ e27ec11 と同じになっています(= scrbook の場合もやはりタイトルの前に白ページあり、scrreprt の場合は白ページなし)。koma-script は割と LaTeX 標準クラスに近いシリーズものなので、これと同じであるということは割と妥当な挙動といえるかもしれません。 memoir のほうは book クラスからかなりの改変を加えたものになっているようですが、これはタイトルの前に白ページが入ることはありません。 \let\printglossary\relax % pLaTeX カーネルで定義済みのためエラーになるのを防ぐ
\documentclass[openleft]{memoir} とはいえ、これに合わせるような変更を入れると現行のドキュメントのページ数が変わってしまうので、pLaTeX のクラスについても「openleft/openright に合わせてタイトルページ前に白ページが入ることもあるという仕様」ということで定めてもよい気がしてきました。 |
いろいろ試していると、別の疑問が生じました。何度かフォーラムにも出ていた気がしますが、これでいいのかどうか… (なお、openleft な scrbook でも同様の現象です) \documentclass{tbook}
\usepackage{lipsum}
\title{hoge}
\author{fuga}
\begin{document}
\maketitle
\chapter{AAA}
\lipsum[1-2]
\end{document} この場合最初が白ページ、その次にタイトルページが来ますが、これは openright により \cleartorightpage が発行されたからだとわかります(つまり右になるように最初を白ページにした)。しかし、titlepage 環境の定義により、タイトル自体のページ番号は「1」に設定しなおされます(titlepage 環境が強制的に さらにその次の \chapter のページは、「2」になりますが、これは右ページのレイアウトを持ちます。つまり「右に送られたけれど間違った左用のレイアウトを持つページ」と「右に送られて正しい右用のレイアウトを持つページ」が連続するという挙動になっています。 タイトルページが「縦組の右」および「横組の左」に来る場合はそのページ番号を |
本 issue であがった一連の話題について、いったん整理します。tatecls ブランチをどこまで master にマージしてよいか考えているところなのですが、案としては以下のように列挙できます。 [1] 本ブランチは master に入れない。 [2] 所属の [3] 上記 [2] に加えて openleft オプションの追加 dc5559d までを採用する。このコミットまでは、openleft オプションを使った場合だけ挙動が変化するため、openleft でない場合の挙動については完全な後方互換性があります。また、openleft の挙動は openright と対称性を保っているので、容易に想像できると思われます。 [4] 上記 [3] に加えて、上のコメントに書いた「右ページと右ページが連続する」という現象などへの対処も加える。これは互換性という観点からは変えてはまずいことになると思われますが、意図に反したバグと認定して直したほうがよいという意見があってもよいとも思います。 このどれがよいか(あるいは別の可能性があればそれも)については影響も大きいので、場合によっては forum のほうでも再度近いうちに書き込むこととします。 |
ふと思ったのですが openleft な場合に \cleardoublepage が pLaTeX カーネルそのまま=右になるまでページを繰る命令ではユーザ目線では不便ですね。openleft な場合だけ |
ddaf57e で \cleardoublepage を「openright な場合は |
これはやはりバグ認定して直すことにしました。pldoc.pdf の titlepage 環境の説明文
から 2.09 互換モードと 2e モードのときで挙動が違うことがわかるのですが、縦組に関しては 2.09 互換モードのほうが正しい出力になります。 \documentstyle{tbook} % これは 2.09 互換モード → 正しい出力
%\documentclass{tbook} % これは 2e モード → 間違った出力
\title{title}
\author{author}
\begin{document}
\maketitle
\chapter{test}
\end{document} これは 2.09 → 2e の変更時に縦組を考慮せずに間違った変更を入れてしまった可能性が高いので 1eca478 で修正を試みました。 |
\documentclass{tbook} % これは 2e モード → 間違った出力 と思っていたのですが、考え方によってはアスキーの出力が(タイトル前の空白ページさえなければ)正しいという見方もできますね。空白ページが仮になかったとすると、タイトルが表紙になって奇数ページレイアウトを持つのは自然ですし、ページをめくると右に2という番号のページが出るのでこれも自然な挙動です。一方で、\maketitle より前に何か文章があったとすると、前に私が考えたとおり奇数偶数のレイアウトが交互にならないので不正なのは変わりありません。\maketitle より前に何かあるかどうかで分岐したほうが互換性が向上するのかもしれないと悩みはじめました。 |
アスキーの頃の挙動が \newenvironment{titlepage}
{%
%<book> \cleardoublepage
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse\newpage
\fi
\thispagestyle{empty}%
\setcounter{page}\@ne
}%
{\if@restonecol\twocolumn \else \newpage \fi
\if@twoside\else
\setcounter{page}\@ne
\fi
} であるのに対し、以下のように変えると実現できることがわかりました。 \newenvironment{titlepage}
{%
\if@twocolumn
\@restonecoltrue\onecolumn
\else
\@restonecolfalse\newpage
\fi
%<book> \ifnum\c@page=\@ne\else\cleardoublepage\fi
\thispagestyle{empty}%
\ifodd\c@page\setcounter{page}\@ne\else\setcounter{page}\z@\fi
}%
{\if@restonecol\twocolumn \else \newpage \fi
\if@twoside\else
\setcounter{page}\@ne
\fi
} これなら「tbook で \begin{document} 直後に \maketitle を書いた場合」に最初に空白ページが出なくなりますから、「奇数レイアウトのタイトルページ」=表紙っぽくなります。また、「tbook で何らかの文章の後で \maketitle した場合」は \newpage が発行されてページ番号が 1 より大きくなっているはずなので、\cleardoublepage が発行されて「偶数レイアウトのタイトルページ」ができますから、例のバグも解消できていることになります。 |
二転三転していますが、仕様変更案を jclasses.dtx にかなり詳しくドキュメント化しました。 改めてアスキー版の挙動を整理すると、以下のようになります。
\begin{enumerate}
\item アスキー版では、タイトルページの番号を必ず1にリセットしていましたが、
これは正しくありません。本来ならば、タイトルの出るページに応じて
\begin{itemize}
\item 奇数ページ目に出る場合、ページ番号を1(奇数)にリセット
\item 偶数ページ目に出る場合、ページ番号を0(偶数)にリセット
\end{itemize}
とすべきです。そうしないと、タイトルページが偶数ページ目に出る場合にも、
レイアウトだけ奇数ページ用が適用されてしまい、さらにその次のページも偶数の
ページ番号を持ってしまうからです。
\item アスキー版bookクラスは、タイトルページを必ず|\cleardoublepage|で始めて
いました。これ自体が正しくないと断定することはできません。しかしこれでは、
偶数ページ起こしの場合に|\maketitle|を文書の冒頭に書いただけで、
タイトルの前に空白ページが発生します。
\end{enumerate}
一つめの例を考えます。
\begin{verbatim}
\documentclass{tbook}
\title{タイトル}\author{著者}
\begin{document}
\maketitle
\chapter{チャプター}
\end{document}
\end{verbatim}
アスキー版tbookクラスでの結果は
\begin{verbatim}
1ページ目:空白(ページ番号1は非表示)
2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
3ページ目:チャプター(偶数レイアウト、ページ番号2)
\end{verbatim}
ですが、仮に最初の空白ページさえなければ
\begin{verbatim}
1ページ目:タイトルすなわち表紙(奇数レイアウト、ページ番号1は非表示)
2ページ目:チャプター(偶数レイアウト、ページ番号2)
\end{verbatim}
とみなせるため、コミュニティ版では空白ページを発生させないようにしました。
二つめの例を考えます。
\begin{verbatim}
\documentclass{tbook}
\title{タイトル}\author{著者}
\begin{document}
テスト文章
\maketitle
\chapter{チャプター}
\end{document}
\end{verbatim}
アスキー版tbookクラスでの結果は
\begin{verbatim}
1ページ目:テスト文章(奇数レイアウト、ページ番号1)
2ページ目:タイトル(奇数レイアウト、ページ番号1は非表示)
3ページ目:チャプター(偶数レイアウト、ページ番号2)
\end{verbatim}
ですが、これでは奇数と偶数のページ番号が交互になっていないので正しく
ありません。そこで、コミュニティ版では
\begin{verbatim}
1ページ目:テスト文章(奇数レイアウト、ページ番号1)
2ページ目:タイトル(偶数レイアウト、ページ番号0は非表示)
3ページ目:空白ページ(ページ番号1は非表示)
4ページ目:チャプター(偶数レイアウト、ページ番号2)
\end{verbatim}
と直しました。 |
上の「二つめの例」を交互にする方法は、上に書いたもののほかにも
という実現の仕方もありえますね。どちらがよいのだろう…?(強制的に奇数レイアウトになっていたという従来の挙動により近いのはこっちのような気もする。実装は |
紙に印刷して作ってみると後に書いたほうが自然に見えたので 23604f5 でそっちに直しました。 |
forum:2112 の話に関連して:
[1] tbook でタイトルの前に空ページが入るのは変?
[2] 目次、部、章の始まりが全て奇数ページにする openleft オプション、\cleardoublepage?
[3] 著者名が中揃えよりは下揃えが見栄え的に良い?
[4] tbook で \thanks の数字が寝るのは変?(現在は本文側は直立、傍注側は寝る)
挙動を変えていいのかどうか、オプションを付ければ切り替わるように? など可能性が少しでもあるものを列挙しておきます。TeX Live 2017 頃までの TODO として。
The text was updated successfully, but these errors were encountered: