初投稿です。不手際がありましたら申し訳ございません。
使用環境(ほかに書いたほうがいいことがあれば確認します)
・Windows11
・TeXworks
・LuaLaTeX
前提
・行内数式でも別行立て数式と同様の表示をする
・普段使用している.texファイルでは、\begin{document}の行までは別ファイルに保存して\inputで呼び出すようにしていますが、この質問のために1ファイルにまとめて、不要なパッケージ部分などを省略しました
メインでやりたいこと
・分母と分子を括線に近づける
・括線を少し長くする
・添字の分数を大きめに表示する
試行1
\documentclass{ltjsarticle}
\usepackage{mathtools}
\newenvironment{m} %投稿者が普段使っている自作環境です
{\begin{math}\displaystyle}
{\end{math}}
\newcommand{\bunsu}[2]{
\frac{\raisebox{-0.53ex}{\,#1\,}}{\raisebox{0.18ex}{\,#2\,}}
}
\begin{document}
\begin{m} \frac{1}{n} \end{m}
\begin{m} \bunsu{1}{n} \end{m}
\begin{m} 3^{ \frac{1}{n} } \end{m}
\begin{m} 3^{ \bunsu{1}{n} } \end{m}
\end{document}
試行1の不満点
・\bunsu内の文字がローマン体(おそらく数字も?)
・添字の分数が\fracだと小さすぎるが\bunsuだと大きすぎる
試行2(7行目を変更・13行目を追加)
\documentclass{ltjsarticle}
\usepackage{mathtools}
\newenvironment{m}
{\begin{math}\displaystyle}
{\end{math}}
\newcommand{\bunsu}[2]{
\frac{\raisebox{-0.53ex}{$\,#1\,$}}{\raisebox{0.18ex}{$\,#2\,$}} %変更した行
}
\begin{document}
\begin{m} \frac{n}{2} \end{m}
\begin{m} \bunsu{n}{2} \end{m}
\begin{m} 3^{ \frac{n}{2} } \end{m}
\begin{m} 3^{ \tfrac{n}{2} } \end{m} %追加した行
\begin{m} 3^{ \bunsu{n}{2} } \end{m}
\end{document}
試行1→試行2の改善点
・\bunsu内の文字が数式標準の書体(イタリック体?)になった
・\tfracが添字内の分数の大きさとしてちょうどいい
試行2の不満点
・添字内の\tfracにおいて、分子が括線から遠いのと、括線が短い
・通常の数式と添字内でコマンドを使い分けないといけない
\bunsuの定義の中に、通常の数式内と添字内で表示を使い分けるように書く(\ifコマンドとかを使う?)のではないかと予想してはいるのですが、具体的な書き方がわかりません。
添字の分数のために違うコマンドを定義する方法もあるとは思うのですが、1つのコマンドで運用できればありがたいです。
また、試行1→試行2で変更した行(7行目)ですが、あれをしないと文字がローマン体になる理由があれば、そちらもご教示いただきたいです。
以上です。よろしくお願いいたします。
なるほど、ウェブ上にある解説などですね。
ウェブ上の解説だと、数式組版の仕組みまで詳しく書かれたものはなかなかないのではないかと思います。
如月さんの場合、何事も根本まで突き詰めたい性分なのではないかお見受けするので、体系的で網羅的な解説書、とりわけ「TeXブック」を読むのがよいだろうと思います。「TeXブック」は絶版のようですが、大学図書館などには置いてあるところがありそうです。原著の「The TeXbook」であれば絶版ではなく現在も入手可能だったのではないかと思います。
さて、ご質問の内容について。
ローマン体とイタリック体の切り替えについて。
大まかに言うと、TeXは組版動作中に、地の文章を組むモード(TeXでは「水平モード」、LaTeXでは「段落モード」と呼びます)、数式を組むモードなどの異なるモードで動作します。それぞれ書体も自在に変更できますが、通常は、文章を組むモードではアルファベットは直立したローマン体で、数式を組むモードではアルファベットは変数と見なされて数式用イタリック体で組まれます。書体以外にも、数式用の命令(分数、上付き添え字、等々)が使えるかどうかとか、文字間のスペーシングなど、モードによって何から何まで異なります。数式モードへの切り替えは、TeXなら「$インライン数式$」や「$$ディスプレイ数式$$」、LaTeXなら「\(インライン数式\)」や「\[ディスプレイ数式\]」などで明示的に操作します。一方、TeXでは組み上げた文字をひとかたまりの箱として扱うことができます。箱を作る命令は、TeXでは「\hbox{箱の中身}」、LaTeXでは「\mbox{箱の中身}」などとなりますが、どちらも箱の中身は地の文を組むモードで処理されることになっています。ですから、箱の中身を数式モードで処理したければ、例えば「\hbox{$数式$}」といったように、箱の中で数式モードへ切り替える必要があるというわけです。
添え字の中などで分数の大きさを変える仕組みについて。
これはちょっと説明が大変なので、とりあえずはキーワードとして \mathchoice を紹介しておきます。またあとで続きを書こうとは思っていますが。
ウェブ上の解説だと、数式組版の仕組みまで詳しく書かれたものはなかなかないのではないかと思います。
如月さんの場合、何事も根本まで突き詰めたい性分なのではないかお見受けするので、体系的で網羅的な解説書、とりわけ「TeXブック」を読むのがよいだろうと思います。「TeXブック」は絶版のようですが、大学図書館などには置いてあるところがありそうです。原著の「The TeXbook」であれば絶版ではなく現在も入手可能だったのではないかと思います。
さて、ご質問の内容について。
ローマン体とイタリック体の切り替えについて。
大まかに言うと、TeXは組版動作中に、地の文章を組むモード(TeXでは「水平モード」、LaTeXでは「段落モード」と呼びます)、数式を組むモードなどの異なるモードで動作します。それぞれ書体も自在に変更できますが、通常は、文章を組むモードではアルファベットは直立したローマン体で、数式を組むモードではアルファベットは変数と見なされて数式用イタリック体で組まれます。書体以外にも、数式用の命令(分数、上付き添え字、等々)が使えるかどうかとか、文字間のスペーシングなど、モードによって何から何まで異なります。数式モードへの切り替えは、TeXなら「$インライン数式$」や「$$ディスプレイ数式$$」、LaTeXなら「\(インライン数式\)」や「\[ディスプレイ数式\]」などで明示的に操作します。一方、TeXでは組み上げた文字をひとかたまりの箱として扱うことができます。箱を作る命令は、TeXでは「\hbox{箱の中身}」、LaTeXでは「\mbox{箱の中身}」などとなりますが、どちらも箱の中身は地の文を組むモードで処理されることになっています。ですから、箱の中身を数式モードで処理したければ、例えば「\hbox{$数式$}」といったように、箱の中で数式モードへ切り替える必要があるというわけです。
添え字の中などで分数の大きさを変える仕組みについて。
これはちょっと説明が大変なので、とりあえずはキーワードとして \mathchoice を紹介しておきます。またあとで続きを書こうとは思っていますが。
>「TeXブック」
書籍のおすすめをいただき、ありがとうございます。
TeXに関する書籍があることは存じていたのですが、どれに手を出していけばいいかわからずにいたので、機会を見て大学図書館などに行ってみようと思います。
>箱の中身は地の文を組むモードで処理される
これは知りませんでした。
これまでなんとなく「地の文を書くモードと数式を書くモードがある」という感覚はあったのですが、例えばフォントの指定をしないと地の文の「1」と数式の「1」は全く同じフォントを使っている(ように見える)ので、「見た目が想定と違ったりエラーを吐いたりしたらとりあえずモードを切り替える」という対処をしていました。
元スレには書きませんでしたが、以下のようなコマンドでは(分母分子を括線に近づけることはできませんが)試行2に書いたような変更を要さなかったので、不思議には思っていました。
\newcommand{\bunsu}[2]{
\frac{\,#1\,}{{\,#2\,}
}
北見さんのご返答から、\raiseboxを使った際に、分子と分母を箱として扱うことで、地の文を組むモードで処理されてしまうために字体が変わってしまった、というように推察しました。
(また、元スレとは内容が違いますが、数式の一部だけ枠で囲みたくて数式環境の中で「a, \fbox{b} ,c」としたらbがローマン体で出力された理由が思わぬところでいただけたので驚いています)
>\mathchoice
例によってWebサイトをいくつか見ましたが、「分子分母をインライン数式として処理する(試行2)」ことが「数式を添字として扱うことを強制的に防いでしまっている」のかな、となんとなく予想しています。
引き続きよろしくお願いいたします。
書籍のおすすめをいただき、ありがとうございます。
TeXに関する書籍があることは存じていたのですが、どれに手を出していけばいいかわからずにいたので、機会を見て大学図書館などに行ってみようと思います。
>箱の中身は地の文を組むモードで処理される
これは知りませんでした。
これまでなんとなく「地の文を書くモードと数式を書くモードがある」という感覚はあったのですが、例えばフォントの指定をしないと地の文の「1」と数式の「1」は全く同じフォントを使っている(ように見える)ので、「見た目が想定と違ったりエラーを吐いたりしたらとりあえずモードを切り替える」という対処をしていました。
元スレには書きませんでしたが、以下のようなコマンドでは(分母分子を括線に近づけることはできませんが)試行2に書いたような変更を要さなかったので、不思議には思っていました。
\newcommand{\bunsu}[2]{
\frac{\,#1\,}{{\,#2\,}
}
北見さんのご返答から、\raiseboxを使った際に、分子と分母を箱として扱うことで、地の文を組むモードで処理されてしまうために字体が変わってしまった、というように推察しました。
(また、元スレとは内容が違いますが、数式の一部だけ枠で囲みたくて数式環境の中で「a, \fbox{b} ,c」としたらbがローマン体で出力された理由が思わぬところでいただけたので驚いています)
>\mathchoice
例によってWebサイトをいくつか見ましたが、「分子分母をインライン数式として処理する(試行2)」ことが「数式を添字として扱うことを強制的に防いでしまっている」のかな、となんとなく予想しています。
引き続きよろしくお願いいたします。
>ローマン体とイタリック体の切り替え
追加で
・分母分子を数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする
ようにもできると助かります。
試行3
\documentclass{ltjsarticle}
\usepackage{mathtools}
\newenvironment{m}
{\begin{math}\displaystyle}
{\end{math}}
\newcommand{\bunsu}[2]{
\frac{\raisebox{-0.53ex}{\,#1\,}}{\raisebox{0.18ex}{\,#2\,}}
}
\begin{document}
\begin{m} \mathrm{ \frac{AC}{AB} =1 } \end{m}
\begin{m} \mathrm{ \bunsu{AC}{AB} =1 } \end{m}
\begin{m} \bunsu{ \mathrm{AC} }{ \mathrm{AB} } =1 \end{m}
\end{document}
試行3の不満点
・2つ目の分数で分母分子がローマン体にならない
なるべく「\mathrm」と書く量を減らしたいのですが、叶うでしょうか……
追加で
・分母分子を数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする
ようにもできると助かります。
試行3
\documentclass{ltjsarticle}
\usepackage{mathtools}
\newenvironment{m}
{\begin{math}\displaystyle}
{\end{math}}
\newcommand{\bunsu}[2]{
\frac{\raisebox{-0.53ex}{\,#1\,}}{\raisebox{0.18ex}{\,#2\,}}
}
\begin{document}
\begin{m} \mathrm{ \frac{AC}{AB} =1 } \end{m}
\begin{m} \mathrm{ \bunsu{AC}{AB} =1 } \end{m}
\begin{m} \bunsu{ \mathrm{AC} }{ \mathrm{AB} } =1 \end{m}
\end{document}
試行3の不満点
・2つ目の分数で分母分子がローマン体にならない
なるべく「\mathrm」と書く量を減らしたいのですが、叶うでしょうか……
添え字の中などで分数の大きさを変える仕組みについての説明はやはりちょっと大変なので後回しにして、とりあえずこちらの
> ・分母分子を数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする
についてだけ。
これはおそらく、平面図形などで点を表すアルファベットは直立ローマン体にして、それによって線分の長さを表す記号は数式中であっても数式イタリック体にはせずに直立ローマン体にするということですね。
そうすると、それは数式中であれば分数の分母や分子でなくても(例えば AC=√(AB^2+BC^2) のように)どこにでも適用されることですから、分数と絡めて処理を考えるのは筋が悪いと思えます。
これはしかたがないこととして手間を推しまず逐一 \mathrm と書くか、\newcommand{\AB}{\mathrm{AB}} のような簡単なマクロを定義して使うのが良いでしょう。
私の場合は、\AB 方式を使ったりするか、あるいは、その中では大文字のアルファベットだけが全て \mathrm で組まれるような独自のLaTeX環境を定義して使ったりしています。
> ・分母分子を数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする
についてだけ。
これはおそらく、平面図形などで点を表すアルファベットは直立ローマン体にして、それによって線分の長さを表す記号は数式中であっても数式イタリック体にはせずに直立ローマン体にするということですね。
そうすると、それは数式中であれば分数の分母や分子でなくても(例えば AC=√(AB^2+BC^2) のように)どこにでも適用されることですから、分数と絡めて処理を考えるのは筋が悪いと思えます。
これはしかたがないこととして手間を推しまず逐一 \mathrm と書くか、\newcommand{\AB}{\mathrm{AB}} のような簡単なマクロを定義して使うのが良いでしょう。
私の場合は、\AB 方式を使ったりするか、あるいは、その中では大文字のアルファベットだけが全て \mathrm で組まれるような独自のLaTeX環境を定義して使ったりしています。
>分数と絡めて処理を考えるのは筋が悪い
私もそう思うので、例えば\mathrm{ \frac{A}{B} = C^2 }と打ったらアルファベットが全てローマン体になるように、分数の中かどうかにかかわらず\mathrmを一回打てばローマン体表示になるようになればいいな、という意味で「数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする」と書いたつもりなんです……
確かに読み返したら「選択できるように」という日本語だと伝わりづらいなと思いました。申し訳ありません。
ただ\sin A = \mathrm{ \frac{AB}{AC} }みたいなことも書くので、1つの式で大文字が全てローマン体になればいいというわけでもなく、「\AB方式」か「逐一\mathrmと書く」しかないかなあと思っているところです。
(自作で\newcommand{\vecrm}[1]{\vec{\mathrm{#1}}}は使っているので、\bunsurmを作るのも視野ですが)
\raiseboxなどの、分母分子を箱として処理する方法を使わずに位置調整ができれば、\fracと同じ振る舞いになるのかな、と素人考えでは思いますが、そう簡単にうまくはいかないのですかね。
私もそう思うので、例えば\mathrm{ \frac{A}{B} = C^2 }と打ったらアルファベットが全てローマン体になるように、分数の中かどうかにかかわらず\mathrmを一回打てばローマン体表示になるようになればいいな、という意味で「数式用のイタリック体で表示するかローマン体で表示するか選択できるようにする」と書いたつもりなんです……
確かに読み返したら「選択できるように」という日本語だと伝わりづらいなと思いました。申し訳ありません。
ただ\sin A = \mathrm{ \frac{AB}{AC} }みたいなことも書くので、1つの式で大文字が全てローマン体になればいいというわけでもなく、「\AB方式」か「逐一\mathrmと書く」しかないかなあと思っているところです。
(自作で\newcommand{\vecrm}[1]{\vec{\mathrm{#1}}}は使っているので、\bunsurmを作るのも視野ですが)
\raiseboxなどの、分母分子を箱として処理する方法を使わずに位置調整ができれば、\fracと同じ振る舞いになるのかな、と素人考えでは思いますが、そう簡単にうまくはいかないのですかね。