rightlineとhfillを合体する

rightlineとhfillを合体する

- あ い の投稿
返信数: 18
何度も質問をしてしまい申し訳ありません。
文書の右寄せについて質問させていただきます。

文書を右寄せにする方法は以下の三つが主だと思います。

① \begin{flushright}\end{flushright}
② \rightline{}
③ \hfill{}

①では前までの行から改行しての右寄せ,②も①と同様ですが前の行の終端に「\\」をつけ強制改行しないと機能しません。
③は改行せずに同じ行内での右寄せが可能ですが,行内での余白が少ない場合,次の行をまたぐ形での右寄せとなります。

ここで質問なのですが,
① 基本的には同じ行内で右寄せ
② スパースが足りない場合は自動で改行しそののち右寄せ
を一つのコマンドで実現するにはどうすれば良いのでしょうか。

調べてみたところどうやら条件分岐のifthenというものがあるらしく,これとカウンタを使って「(textwidth)-(最終行の文字列の長さ)>(右寄せの文字列の長さ)」とするのかなと思ったのですが,日本語部分をどのようにTeX言語に落とし込むのかがわからず苦戦しております。

どなたかこの方法についてご教授いただければ幸いです。
よろしくお願いいたします。
あ い への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
こんなのでしょうか?


\documentclass{jarticle}\relax

\newcommand*{\migiyose}[1]{%
        \hspace{\parfillskip}\mbox{}\linebreak[0]%
        \mbox{}\nolinebreak[4]\hfill\mbox{#1}%
}

\setlength{\textwidth}{30zw}
\setlength{\parskip}{1zw}

\begin{document}

いろはにほへとちりぬるをわかよたれそつねならむ
うゐのおくやまけふこえてあさきゆめみしゑひもせすん
\migiyose{これでおしまい}

一二三四
いろはにほへとちりぬるをわかよたれそつねならむ
うゐのおくやまけふこえてあさきゆめみしゑひもせすん
\migiyose{これでおしまい}

一二三四五
いろはにほへとちりぬるをわかよたれそつねならむ
うゐのおくやまけふこえてあさきゆめみしゑひもせすん
\migiyose{これでおしまい}

\end{document}
帯田 木偶太 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
帯田 木偶太さま,返信ありがとうございます。
まさしく求めていたものでした!
ありがとうございます!
ちなみに

\newcommand*{\migiyose}[1]{%
\hspace{\parfillskip}\mbox{}\linebreak[0]%
\mbox{}\nolinebreak[4]\hfill\mbox{#1}%
}

はどのような指令なのでしょうか。

また,\relaxの意味はなんでしょうか。

解説してくだされば幸いです。
よろしくお願いします。
あ い への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
定義中に出てくる \parfillskip というのは、段落の末尾に自動的に挿入される
空白の大きさを保持しているパラメーターです。通常であれば、自然長が 0pt で
無限に伸長できるようになっているはずです。

\relax は、「何もしない」という命令です。LaTeX の通常のコマンドを
使っている限り意識する必要はありませんが、私の場合は、やや特殊な事情があるため、
\documentclass や \usepackage の後ろには記述する習慣が付いています。

それ以外のコマンドについては、いずれも LaTeX で標準的なものだと思うので、
レスリー・ランポート著『文書処理システム LaTeX2e』(いわゆるランポート本)でも
一読なさればよろしいかと。
帯田 木偶太 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
なるほど,ご丁寧に教えていただきありがとうございます。
では,数式が登場しないのにmboxを入れている理由はなんでしょうか。
度々申し訳ありません。
あ い への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
》 数式が登場しないのにmboxを入れている理由はなんでしょうか。

????

質問をなさる背景がわかりかねます。
\mbox は数式用のコマンドだとでも思っておられるのでしょうか。

今回のマクロで使っている理由については、\mbox を取り除いたときに
どんな動作になるか試してみるなり、ランポート本等を読んでみるなり
なされては?
帯田 木偶太 への返信

Re: rightlineとhfillを合体する

- 和田 勇 の投稿

\mbox をなぜ使用してるか ... (和田の解釈です)

今回のケースでは、右詰めする文字列の途中には「改行」を入れたく無いですよね。

mbox の基本的な使い方は、ある文字列の途中で改行を入れたくない場合によく使われます。

以下の URL を見るとそれを理解することができると思います。

      https://scrapbox.io/masui/TeXで単語の途中で改行されるのを防止する

なお、数式などを行中に埋め込む場合も、途中に改行が入らないようにした方が読みやすいので mbox でという事例が多いかと思います。

和田 勇 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
帯田 木偶太さま,和田 勇さま,回答ありがとうございます。

ネットで調べてみたり,書店で参考書を物色してみたのですが,\mbox{}のように何も挟まずに使う目的がわからず,mboxの箇所を抜いてみたりもしたのですがどのような役割を担っているのかがさっぱりでした。。。(3つ目のmboxはわかりましたが)

(考察(?))
\newcommand*{\migiyose}% 定義するコマンド名がmigiyose
[1]% 引数が1つ
{% 定義開始
\hspace{\parfillskip}% 「段落の末尾に自動的に挿入される空白」の大きさ分空白を横に空ける?(でも普通0ptなら変化がないのでは?)
\mbox{}% 不明
\linebreak[0]% 絶対に改行しない
\mbox{}% 不明
\nolinebreak[4]% 絶対に改行しない
\hfill% 同じ行内で右寄せ
\mbox{#1}% 右寄せしたい箇所を一文字として捉える
}% 定義終了

\parfillskipを\hspaceで括るのもどういう命令なのかわかりませんでした(そもそも本やウェブサイトで\parfillskipに関する記述が少なかったです)。

もう少しヒントがいただきたいです。
よろしくお願いいたします。
あ い への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
少なくとも、2 番目の \mbox{} がない場合については、
先の入力例の 3 番目の段落で不具合が出るはずですが‥?


\documentclass[draft]{jarticle}\relax
\newcommand*{\migiyose}[1]{%
        \hspace{\parfillskip}\mbox{}\linebreak[0]%
        \nolinebreak[4]\hfill\mbox{#1}%
}

\setlength{\textwidth}{30zw}
\setlength{\parskip}{1zw}

\begin{document}
一二三四五
いろはにほへとちりぬるをわかよたれそつねならむ
うゐのおくやまけふこえてあさきゆめみしゑひもせすん
\migiyose{これでおしまい}
\end{document}
帯田 木偶太 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
一応動作については確認済みなのですが,どうしてもmboxが影響している理由がわかりません。
ごめんなさい,もう少し詳しく教えていただきたいです。

あ い への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
》 一応動作については確認済みなのですが

「確認」というのはどういう確認でしょうか?
私が最初に提示したマクロが期待どおりに動作することを確認したのか、
本日 14:55 に投稿したソースで不都合が起こることを確認したのか
あるいはまた別の意味なのか。

さて、main-2.tex を(当方では環境が古すぎてタイプセットできなかったので)
エディターで開いてみましたが、
        段落の開始として \noindent と全角空白を記述している
        段落を \\ で終了させている
        数式部分ではなく、数式を含む段落全体を $~$ で囲んでいる
など、LaTeX のソースとしては「やってはいけない」のオンパレードです。

おそらく、場当たり的で断片的な知識の積み上げで LaTeX を使おうと
しておられるのでしょうが、これ以上はその方法論ではやっていけないでしょう。
体系だった入門書を 1 冊でも通読するか、それなりの指導者について学ぶかする
必要があります。残念ながら掲示板のやりとりでカバーできる範囲ではないでしょう。
帯田 木偶太 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
帯田 木偶太様,回答ありがとうございます。以下返答になります。

▶︎「確認」というのはどういう確認でしょうか?
二つ目が抜けるとmigiyoseにしたい箇所が完全に改行され左寄せで表示されてしまうということの確認です。言葉が足りませんでした。
▶︎段落の開始として \noindent と全角空白を記述している
これに関しては,私の添付いたしました例文(?)でうまくスペース調整を行うためです(一つ目で文字間隔が狭くなるというのを確認したかったので,デフォルトの一字下げではなくあえて全角スペースを用いた次第です)。
▶︎段落を \\ で終了させている
れに関しては全く意識しておりませんでした。確かに一度読んだことがあるなと思い某参考書を開いてみたところしっかり記載がありました。
▶︎数式部分ではなく、数式を含む段落全体を $~$ で囲んでいる
これは承知の上で行いました。問題自体ネットから拾ってきたものでしたのでtex形式にするのが億劫で,動作テスト程度であれば$$で括っても良いという安易な考えをしてしまいました。

どんな理由であれいずれもtex関係者を不快にしてしまいかねない記述であったことをお詫び申し上げます。
もう一度他の参考書も含めて熟読しようと思います。
ご迷惑おかけしてしまい大変申し訳ありませんでした。
また,わざわざ対応していただきありがとうございました。
またいつかお世話になってしまうときはよろしくお願いいたします。
あ い への返信

Re: rightlineとhfillを合体する

- 和田 勇 の投稿

ランポート(Lamport)本他 参考文献情報

  • 和訳された資料は絶版になってるものが多いので、国会図書館をはじめ公共図書館または大学の図書館で探されると良いと思います。

    • 国立国会図書館での検索…
  • Lamport本とは、現在は LaTeX2e のドキュメントだと思います(違ったらどなたか指摘してください)

    • で参照できますが、texdoc コマンドでも表示できます。
    • 「texdoc latex2e 」だとフランス語版が先にヒットしてしまうので「texdoc –list latex2e」でリスト表示し英語を選択でも表示できます。

    • 後述する「美文書作成」を一読後、参考にされることをお勧めします。

  • 文書処理システムLATEX 2ε (翻訳本は持っていないのですが上記の LaTeX2e と関係があるか不明。)

    • レスリー・ランポート 著,阿瀬はる美
  • 文書処理システムLATEX (以前の翻訳された Lamport本です、絶版だと思うので入手困難)

    • Lamport, Leslie,Cooke, Edgar,倉沢, 良一,大野, 俊治,小暮, 博道,藤浦, はる美
    • 原本PDF は以下のURL (翻訳の方では訳されていない章もある)
  • TEXブック : コンピュータによる組版システム(翻訳本は入手困難)

    • Donald E. Knuth著 ; 鷺谷好輝訳
    • \parfillskip について調べたい時にはこのドキュメントを参考にしてください
    • 原本 PDF は次の URL などで参照可能。
    • ソースファイルは より入手可能。(LaTeX でなく TeX で記述されてる)
  • LATEX2ε美文書作成入門(改訂第8版)

    • 奥村晴彦, 黒木裕介 著 技術評論社 2020
    • 入門書としてはとても有益だと思います。斜め読みでも良いから一読することをお勧めします。

\parfillskipを\hspaceで括るのもどういう命令なのか?

通常 \hfill{2cm} のように有意な長さを指定しますが、帯田さんのコメントに 「\parfillskip というのは、... 自然長が 0pt で無限に伸長できる ...」とあるので 「\hspace{\parfillskip}」は 「\hsapce{最小 0pt で無限に伸びるバネ}」 のように考えてはいかがですか?

和田 勇 への返信

Re: rightlineとhfillを合体する

- 和田 勇 の投稿

リンク情報が欠落していたのでその補足

  • Lamport本とは、現在は LaTeX2e のドキュメントだと思います(違ったらどなたか指摘してください)

    • https://texdoc.org/serve/latex2e.pdf/0 で参照できますが、texdoc コマンドでも表示できます。
和田 勇 への返信

Re: rightlineとhfillを合体する

- 柳崎 清 の投稿
ランポート本というのは、

株式会社アスキー 刊
Leslie Lamport レスリー・ランポート 著
書名 文書処理システム LaTeX
初版発行 1990年10月31日
私が所有しているのは、第1版第7刷
ISBN4-7561-0784-2

この本です。私は原書は持っていません。英語が苦手なもので。

LaTeXは、Donald Knuth ドナルド・クヌース先生が開発したTeXから派生したバージョンです。
LaTeXは、文書の構造に神経を集中させることでユーザーが組版にかける手間を省けるように開発されたものです。
両者を区別するため、クヌース先生のTeXコマンドをTeXプリミティブコマンドという表現をします。
LaTeXコマンドはTeXプリミティブコマンドで書かれているので、両方を知らないとLaTeXコマンドを改造するのが難しい場合があるようです。
この本には、LaTeXコマンドの使い方、自分用の文書スタイルの作成方法が書かれています。
LaTeX開発者自身か書いた、LaTeXの原点・原典とも言える本です。

添付 IMG_20220403_065430.jpg
柳崎 清 への返信

Re: rightlineとhfillを合体する

- 帯田 木偶太 の投稿
1990 年発行のものは LaTeX 2.09 ベースですので、現状でそれを読んだのでは
却って混乱を招くでしょう。

LaTeX 2e 対応のものはこちら
    https://www.amazon.co.jp/%E6%96%87%E6%9B%B8%E5%87%A6%E7%90%86%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0LATEX2%CE%B5-%E3%83%AC%E3%82%B9%E3%83%AA%E3%83%BC-%E3%83%A9%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88/dp/4894711397/ref=monarch_sidesheet
和田 勇 への返信

Re: rightlineとhfillを合体する

- Takashima Jun の投稿
Knuth先生のThe TeXbook原著に関しては
https://www-cs-faculty.stanford.edu/~knuth/abcde.html
Copyright Infringement
というところで明言されているように、普通に見つかるPDFは違法なものですね。
出版社による合法なものは以下で購入可能なようです。
https://www.informit.com/store/computers-typesetting-volume-a-the-texbook-9780137494170

学習には以下からソースを読むので十分ですが。
https://ctan.org/pkg/texbook

今回の質問者の件に関しては
和訳p.149(texbook.tex l.6466以下)の\signed マクロがそのもので
Exercise 14.31-32 が勉強になりますね。
Takashima Jun への返信

Re: rightlineとhfillを合体する

- 和田 勇 の投稿
> ... 普通に見つかるPDFは違法 ...

おっしゃる通りですね。不適切なことを書いてしまいました。
和田 勇 への返信

Re: rightlineとhfillを合体する

- あ い の投稿
みなさまご参考になる情報をありがとうございます。
TeXを自在に扱えるように頑張ります。
ありがとうございました!