Skip to content

LaTeXのマクロで下付き文字と上付き文字を同時に使うと入るスペースについて #2

@SahayanKY

Description

@SahayanKY

https://tex.stackexchange.com/questions/365585/spacing-of-subscripts-and-superscripts-in-macro
マクロの定義の仕方を変えることで改善されるとのこと

LaTeXでは下付き(上付き)文字にマクロを指定する場合、括弧でくくるか、マクロの定義内容を括弧でくくるかのどちらかが必要になる

\newcommand{\hoge}{{\ensuremath{\bm{hoge}}}}
r_\hoge       % OK
r_{\hoge}     % OK

\newcommand{\hoga}{\ensuremath{\bm{hoga}}}
r_\hoga       % NO
r_{\hoga}     % OK

(ちなみに\bmではなく\textrmならなぜかうまくいく謎)

そのため、これまでマクロ定義の方を基本的に全て括弧でくくってきたが、これが原因で上付きと下付きの左端が揃わなかったらしい

\newcommand{\hage}{{\ensuremath{r_{\textrm{hage}}}}}
\hage^N   % 揃わない

\newcommand{\haga}{\ensuremath{r_{\textrm{haga}}}}
\haga^N   % 揃う

要は、上付き下付きを定義に含むマクロ定義(\hage,\haga)において、
その定義を括弧で囲むのが本当にベストプラクティスか?という問いになる。
それぞれの利点を考えた

  • 括弧で囲む(\hage)
    • 直後に再度下付き(上付き)を置く場合、エラーにならない(double subscript) (ex. \hage_N)
    • 冒頭で述べた通り\hageを下付き(上付き)に配置する場合にエラーにならない
  • 括弧で囲まない(\haga)
    • 直後に上付き(or 下付き)を置いても余計なスペースが入らない (ex. \haga^N)

後者の場合、マクロ定義やユーザー側が注意すればデメリットを相殺できると考えられる。
例えばdouble subscriptに関しては

\newcommand{\haga}[1]{\ensuremath{r_{#1}}}

とすれば後ろに再度下付き文字を配置しようとする必要がなくなるはずである(マクロ引数で対処)
また、下付き上付きを括弧で囲む問題については基本的に使うときに

5_{\haga}

と必要に応じてマクロを括弧で囲むようにすればいいはずである

また、マクロ定義を括弧で囲まない(\haga)選択肢をとる最大の動機は上付き下付きの位置が揃えたいところにある。
そのマクロ定義に上付き下付きが含まれる場合のみ定義を括弧で囲まない選択をとれば影響範囲が小さくすむはず

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions