1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

数式の流用をなくしたい

Posted at

LaTeX を使っていて「LaTeX は数式が強みだ!」の思想が先行していると、数式で表現する必要のない部分も数式モードを流用(悪用?)してしまっていることがあります。これは許されない事態です。LaTeX は数式以外の部分も非常に有能であり、これを知らずに使うのはもったいないことです。

そこで、本記事ではよくある数式の流用とその解決法を紹介します。

アクセント付き文字

例えば「Schrödinger」にある “o” の上にウムラウトが与えられているように、アクセント付き文字を入力したいとき、行内数式を流用して Schr$\ddot{\mathrm{o}}$dinger としていませんか。

LaTeX では、\" を使うことでこれに続く文字にウムラウトを与えることができます。あるいは最近の LaTeX では、そのまま Schrödinger とすることで “ö” を普通に入力できます。

\documentclass{article}
\begin{document}

Schr\"odinger

Schrödinger

\end{document}

リテラルに入力しても問題ないため、わざわざコマンドを利用する必要もありませんが、この他のアクセント付き文字は次のようにします。
より詳細には 非公式マニュアル を参照してください。

accent-image-1.png


以下の内容は LuaLaTeX では考慮する必要はありません。

pdfLaTeX や (u)pLaTeX で何もせずに “Schrödinger” を出力するとき、出力の見た目上は正しく出力されているように見えていても、コピペしてみると明らかなように Schr¨odinger となってしまいます。

これは、出力するフォントエンコーディングが OT1 になっているためです。詳細は この記事に譲ります が、T1 エンコーディングを利用する必要があります。

対応するには簡単で、次のようにします。

\documentclass{article}
\usepackage[T1]{fontenc}  %% この 2 つを追加
\usepackage{lmodern}      %%
\begin{document}

Schr\"odinger

Schrödinger

\end{document}

記号

例えば、矢印のような記号を文章中で利用することを考えたとき、“→” を $\to$ や “℃” を $^\circ\mathrm{C}$ 等としていませんか。

このようにすると、\textbf 等のコマンドが効かなかったり、見出しに含めた場合に見出し情報に正しくない結果を得ます。

実は、数式を流用せずに文章中で使えるコマンドがいくつかあります。(∗ は数式内と文中の双方で利用できます。)

記号 コマンド 記号 コマンド
° \textdegree \textcelsius
\textuparrow \textdownarrow
\textleftarrow \textrightarrow
\textminus × \texttimes
÷ \textdiv \textsurd
μ \textmu \dots
\dag \ddag

あるいは、これらをリテラルに入力しても問題ありません。ただし、リテラルに入力する場合、これらの記号は和文として解釈されるため、アラビア数字に続いて利用するような ° は欧文になるように調整しておくと良いです。

%% upLaTeX での例
\usepackage{pxcjkcat}
\cjkcategory{latn1,sym08}{noncjk}

日本語が扱える状態の LaTeX では、コマンドによる入力には欧文フォント、リテラル入力には和文フォントが利用されることが多いです。


別の誤用として、角括弧があります。

文章中で角括弧を使いたいとき、< (\textless)・> (\textgreater) は数学で利用する不等号の小なり・大なりのため不適格です。正しくは \textlangle ()・\textrangle () あるいは全角の角括弧 を使います。

ギリシャ文字

例えば、「アンドロメダ座 α 星」、「β1 受容体」、「ε-δ 論法」のように文中でギリシャ文字を扱いたいとき、以下のように行内数式を流用していませんか。

アンドロメダ座$\alpha$$\beta$1受容体
$\epsilon$-$\delta$論法

このようにすると、\textbf 等のコマンドが効かなかったり、見出しに含めた場合に見出し情報に正しくない結果を得ます。

そのため、数式のギリシャ文字を利用せずに、文章中で使えるギリシャ文字を使いましょう。

文章中でギリシャ文字を使うには、(u)pLaTeX と LuaLaTeX で方法が異なります。ここで紹介するには少し長くなってしまうので、以下の記事を参照してください。

TeXGyrePagellaX.png

上付き・下付き添え字

上付き・下付き添え字を本文中で書きたいとき、数式を流用して以下のように書いていないでしょうか。

これは本文$^{\text{これは上付き添え字}}$これは本文
これは本文$_{\text{これは下付き添え字}}$これは本文

実際これでもほとんど問題ないことが多いですが、文章中で上付き・下付き添え字を表現する \textsuperscript\textsubscript があります。1

これは本文\textsuperscript{これは上付き添え字}これは本文
これは本文\textsubscript{これは下付き添え字}これは本文

subsuper-image-1.png

ただし、この添え字は注釈ではないことに注意してください。注釈ではないため、長い文章を挿入することは避けてください。コマンド内の文章は行末で分割されないため、右にはみ出します。別の構造(jlreq 文書クラスの \warichu 等)を用いることをオススメします。

複数項目を波括弧でまとめる

複数の要素を縦に並べて左側に波括弧でまとめるとき、以下のように amsmath パッケージの cases 環境を流用していませんか。

\[
  \begin{cases}
    \text{魚類}   \\
    \text{両生類} \\
    \text{は虫類} \\
    \text{鳥類}   \\
    \text{哺乳類} \\
  \end{cases}
\]

これを解消するには、2 つの方法があります。2

  • bigdelim パッケージ

    tabular 環境内で利用する必要があり、波括弧で囲う行数を明示する必要があります。(内部で multirow を利用するため)

    \ldelim〈括弧の種類〉{〈まとめる行数〉}{〈右側の間隔〉}
    \rdelim〈括弧の種類〉{〈まとめる行数〉}{〈左側の間隔〉}
    
    \begin{tabular}{l@{\;}l}
      \ldelim\{{5}{*}
        & 魚類   \\
        & 両生類 \\
        & は虫類 \\
        & 鳥類   \\
        & 哺乳類 \\
    \end{tabular}
    
  • schemata パッケージ

    括弧でくくる要素を 1 つずつ \schemabox で囲う必要があります。

    \schema{}{
      \schemabox{魚類}
      \schemabox{両生類}
      \schemabox{は虫類}
      \schemabox{鳥類}
      \schemabox{哺乳類}
    }
    

class-diagram-image-2.png

一長一短ですが、各要素を箇条書きにしたり番号付けにする場合は bigdelim を使う方が簡単です。array パッケージを使って要素のある列の各行に中黒やカウンタを挿入します。

\begin{tabular}{l@{\;}>{\textbullet}l}
  \ldelim\{{5}{*}
    & 魚類   \\
    & 両生類 \\
    & は虫類 \\
    & 鳥類   \\
    & 哺乳類 \\
\end{tabular}
%%
\newcounter{vertebrate}
\setcounter{vertebrate}{0}
\begin{tabular}{l@{\;}>{\refstepcounter{vertebrate}\arabic{vertebrate}.}l}
  \ldelim\{{5}{*}
    & 魚類   \\
    & 両生類 \\
    & は虫類 \\
    & 鳥類   \\
    & 哺乳類 \\
\end{tabular}

class-diagram-image-1.png

tabular 環境内で itemize 環境を利用すると、\ldelim に持たせるべき行数が非自明になるため、このような方法を採っています。

タブストップ

ビジネス文書の別記で情報をタブストップで揃えるとき、以下のように amsmath パッケージの alignat 環境を流用していませんか。(例は ビズ式 より)

\begin{alignat*}{2}
  & \text{1. 御見積合計金額} & \hspace{2zw} & \text{432,000円(消費税込)}    \\
  & \text{2. 支払い条件}     &              & \text{検収完了後月締翌月末振込} \\
  & \text{3. 納品場所}       &              & \text{御社横浜営業所}           \\
  & \text{4. 御見積有効期限} &              & \text{平成29年2月12日(金)}
\end{alignat*}

このようなタブストップで揃え位置を移動させるような文書を作成する場合は、tabbing 環境を利用しましょう。

\begin{tabbing}
  \hspace{10zw}\= \kill
  1. 御見積合計金額 \> 432,000円(消費税込)    \\
  2. 支払い条件     \> 検収完了後月締翌月末振込 \\
  3. 納品場所       \> 御社横浜営業所           \\
  4. 御見積有効期限 \> 平成29年2月12日(金)
\end{tabbing}

tabs-image-1.png

あるいは、tabto パッケージを利用しても良いでしょう。

\TabPositions{10zw}
\begin{enumerate}
  \item 御見積合計金額 \tab 432,000円(消費税込)
  \item 支払い条件     \tab 検収完了後月締翌月末振込
  \item 納品場所       \tab 御社横浜営業所
  \item 御見積有効期限 \tab 平成29年2月12日(金)
\end{enumerate}

alignat 環境での流用例ではタブストップに相当するスペースは間隔幅の数値を指定しますが、tabbing 環境や tabto パッケージでの例では文字とスペースを合わせた幅の数値を指定する必要があることに注意してください。


字取り等したい場合は jlreq 文書クラスの \jidori を使うと簡単です。

\TabPositions{10zw}
\begin{enumerate}
  \item \jidori{7zw}{御見積合計金額} \tab 432,000円(消費税込)
  \item \jidori{7zw}{支払い条件}     \tab 検収完了後月締翌月末振込
  \item \jidori{7zw}{納品場所}       \tab 御社横浜営業所
  \item \jidori{7zw}{御見積有効期限} \tab 平成29年2月12日(金)
\end{enumerate}

tabs-image-3.png

以下のように組み合わせることで、複雑な表現も可能です。ただし、itemize・enumerate 環境内では直接 tabbing 環境を利用できないので、minipage 環境に入れて利用します。

\TabPositions{10zw}
\newcommand{\tabright}[1]{\makebox[3\zw][r]{#1}}
\begin{enumerate}
  \item 品名    \tab  \begin{minipage}[t]{0.5\linewidth}
                        \begin{tabbing}
                          \hspace{10zw}\=\hspace{4zw}\=\hspace{5zw}\kill
                          ファーマフラー(赤) \> \tabright{10点} \> 30,000円 \\
                          革グローブ(黒)     \> \tabright{5点}  \> 20,000円 \\
                          ファーカフス(茶)   \> \tabright{10点} \> 20,000円
                        \end{tabbing}
                      \end{minipage}
  \item 合計金額 \tab 70,000円
  \item 納入場所 \tab 弊社日本橋営業所
  \item 納期     \tab 平成29年11月6日(月)
\end{enumerate}

tabs-image-2.png

長い文章をタブストップで移動させた場合、折り返した後の行頭が項目名の行頭と揃ってしまうので、\parbox や minipage 環境でボックス化してしまうと良いです。

\TabPositions{10zw}
\begin{enumerate}
  \item 価格       \tab 同封の価格表をご参照ください。
  \item 支払方法   \tab 毎月20日締め翌月末日の現金払い
  \item 送料その他 \tab 貴社負担
  \item 納入方法   \tab 貴社ご一任
  \item 返品・交換 \tab \parbox[t]{20zw}{受注生産品のため、返品・交換につきましては原則応じかねます。}
        \vspace{0.5em}
  \item 同封書類   \tab 価格表 1通
\end{enumerate}

tabs-image-4.png

余談

数式モードの機能は非常に便利なものも多いですが、数式ではないものに対して(なるべく)数式で表現することがないように注意したいですね。

  1. 添え字は左の文章から行末で分割されるべきではないため、\nobreak\textsupersrcript{...} 等とすることがベターだと思われます。

  2. 実際のところ、2 つのパッケージでは波括弧で囲うために数式モードを利用しています。しかしながら、cases 環境のような数式を利用するよりも取り回しの良い方法だと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?