🌟

LaTeX を用いた言語学論文における例文表示方法

2021/08/20に公開

※ 知乎(Zhihu)に中国語版を最初に(8月18日)公開した。本稿はそれの翻訳版である。

本稿では gb4e、leipzig、typgloss、slgloss などのパッケージを利用した例文やグロス(行間注解)の表示について紹介していきたいます。

環境設定

まず最初に Tex Live 及び VSCode + LaTeX Workshop を配置しておく必要があります。また、言語学の論文を書くときに、さまざまな言語や文字を扱うため、pdfLaTeX や pLaTeX などの Unicode をサポートしていないレガシーなツールではなく、代わりに LuaLaTeX や XeLaTeX をお勧めします。具体的な配置方法は、インタネット上数多くのチュートリアルがあるため、本稿では紹介を割愛させていただきます。

パッケージ解説

  • gb4e.sty 例文を表示するための環境を提供
  • leipzig.sty ACC、DAT、PTCP のようなグロス略号のコマンドや、略号一覧を出力するためのコマンドを提供
  • typgloss.sty (任意)leipzig のコマンドを使わずに ACC、DAT、PTCP のように略号を直接出力できるように
  • slgloss.sty:(任意)手話を記述する時に便利(デフォルトで small caps や非手指動作用の表記)なコマンドを提供。
    以上のパッケージの中、gb4e や leipzig は CTAN にあり、TeX Live に収録されているため、別々でダウンロードしなくても使えます。

基本的な例文

まずドキュメントのプリアンブル(document preamble)に以上のパッケージを導入します。\usepackageの順序に注意してください。(筆者の環境では leipzig > gb4e の順でなければ TeX Capacity Exceeded のエラーが出てしまいます。)また、hyperref を使う場合は、hyperref > leipzig の順にしてください。

次にドキュメント環境(document)の中にexe環境を有効化し、\exコマンドを使って例文を出力します。\exを例文の数に合わせて使えば、自動的に番号が振られます。

\documentclass{jlreq}

\usepackage{leipzig}
\usepackage{gb4e}

\begin{document}
  \begin{exe}
    \ex This is an example sentence.
    \ex C'est un autre exemple.
    \ex これは三番目の例文である。
  \end{exe}
\end{document}

以上のコードの出力結果

Tip: 番号の形式を変更したい場合、\renewcommand{\thexnumi}{\番号コマンド{xnumi}} によってできます。デフォルトは\arabic (1) (2) (3)ですが、\番号コマンド\romanにすれば (i) (ii) (iii) になります。\Roman→ (I) (II) (III)、\alph→ 为 (a) (b) (c)、\Alph → (A) (B) (C) 等。

入れ子、非文マーク、本文参照

例文exe環境の中にxlist環境を有効化すれば、入れ子構造にすることができます。

Tip: 入れ子構造は最大三階層(exe > xlist > xlist)までできますが、第四階層(あんまり使える場面がなさそうですが)を利用したい場合、xlistn (arabic)、xlistA (Alph)、xlista (alph)、xlistI (Roman)、xlisti (roman) のように手動的に番号のフォーマットを決めなければなりません。当然ですが、三階層以内でも指定することができます。

非文マーク(*)は、\ex[*]{例句。}(波括弧の囲い忘れに注意)のようにできます。また、疑問符(?)などなんでも入れられます。

本文で例文の番号を参照したい場合、\exの後に\label{XXX}を使えば、本文の中に(\ref{XXX})のようにできます。

  \begin{exe}
    \ex\label{first} This is an example sentence.
    \ex[*]{This an example sentence not is.}
    \ex C'est trois autres exemples.
      \begin{xlist}
        \ex これは入れ子例文である。
        \ex[?]{これは入れ子。}
        \ex[??]{這是更多嵌套例文。}
          \begin{xlist}
            \ex 你好。
              \begin{xlistI}
                \ex 還能嗎?
              \end{xlistI}
            \ex 你不好。
              \begin{xlistA}
                \ex 可以。
              \end{xlistA}
          \end{xlist}  
      \end{xlist}
  \end{exe}
  這個例文(\ref{first})

行間注解(グロス)

行間注解は言語学の論文においてよく使われます。gb4e.sty の提供している\gllコマンド、及び leipzig.sty が提供している略号(既定のものは leipzig.pdf に一覧があります)を使えばできるます。\\改行符を入れ忘れないように注意してください。

Tip: \glll を使えば三行にできます。\gltを使えば翻訳を追加できます(任意)。

  \begin{exe}
    \ex
      \gll Questa è una frase di esempio.\\
           this \textsc{BE}.{\Third\Sg} {\Indf}.{\F}.{\Sg} sentence of example\\
      \glt This is an example sentence.
  \end{exe}

略号追加

leipzig.sty に既定の略号がよく足りません。例えば部分格・部分冠詞の PTV (Partitive) が leipzig.sty に提供されておらず、\newleipzigで定義しなければなりません。

\newleipzig{コマンド名}{略号}{全称}

例えば、\newleipzig{abc}{def}{ghijkl}と定義すれば、\Abc{}を使えばDEFが出てきます。全称は後に略号一覧にDEF=ghijklのように表示されます。

\usepackage{leipzig}
\usepackage{gb4e}

\newleipzig{ptv}{ptv}{partitive}

\begin{document}  

\begin{exe}
    \ex
      \gll Mario ha comprato del cioccolato.\\
           Mario \textsc{HAVE}.{\Third\Sg} buy-{\Ptcp}.{\Prf} {\Ptv} chocolate\\
      \glt Mario bought chocolate.\\
\end{document}

Tip: また、\renewleipzigによって leipzig.sty の既定の略号を再定義することができます。例えば日本語の全称を入れたいバイ、\renewleipzig{ptcp}{ptcp}{分詞(Participle)}のように変更できます。

簡略記法

typgloss.sty では、簡略化されたグロス略号の書き方が提供されているます。PTCPとだけ書けば、{\Ptcp}のような冗長な書き方をせずに済みます。(ただしHAVEのような略号ではない全部大文字の文字列と区別することがまだできず、haveと書かなければなりません。

このパッケージは2020年に出たもので、まだ CTAN に載っておらず、TeX Live にはいないため、以下のリンクからダウンロードしてください。

https://github.com/tpellard/typgloss/blob/master/typgloss.sty

ダウンロードできたら、typgloss.sty を ユーザーフォルダー\texmf\tex\latex に入れれば使えるようになります。

\usepackage{leipzig}
\usepackage{gb4e}
\usepackage{typgloss}
\makeglossaries
\newleipzig{ptv}{ptv}{部分(Partitive)冠詞}

\begin{document}
  \begin{exe}
    \ex
      \gll Mario ha comprato del cioccolato.\\
           Mario have.3SG buy-PTCP.PRF PTV chocolate\\
      \glt Mario bought chocolate.
  \end{exe}
\end{document}

略号一覧

略号一覧を出力するのはやや複雑のタスクになります。まず、ドキュメントの中に\makeglossaries\printglossariesを入れます。

\documentclass{jlreq}

\usepackage{leipzig}
\usepackage{gb4e}

\makeglossaries % new や renew の前に
\renewleipzig{third}{3}{三人称}
\renewleipzig{sg}{sg}{単数}
\renewleipzig{ptcp}{ptcp}{分詞(Participle)}
\newleipzig{ptv}{ptv}{部分(Partitive)冠詞}

\begin{document}
  \begin{exe}
    \ex
      \gll Mario ha comprato del cioccolato.\\
           Mario \textsc{HAVE}.{\Third\Sg} buy-{\Ptcp}.{\Prf} {\Ptv} chocolate\\
      \glt Mario bought chocolate.
  \end{exe}
  \printglossaries % 一覧を入れたいところ
\end{document}

しかし、このままでは一覧が出力されません。出力するには、コマンドプロンプト(ターミナル)で以下の手順でプログラムを実行します。(仮に lualatex を使い、ファイル名が abc.tex とする)

lualatex abc.tex
makeglossaries abc
lualatex abc.tex
lualatex abc.tex

原理:第一回 latex プログラムを実行する時、\makeglossariesコマンドによって、スタイルファイル .ist 及びすべての略号を記録した .glo ファイルが出力されます。その後、makeglossaries を実行すれば、組版が済んだ .gls ファイルがコンパイルされます。もう一回 latex を実行して、.gls ファイルを \printglossaries のあるところに出力されます。最後に目次(TOC)があれば、三回目の latex を実行する必要があります。

自動実行

前述のように、以下の手順を踏まなければなりません。

lualatex abc.tex
makeglossaries abc
lualatex abc.tex
lualatex abc.tex

しかしこれはあまりにも面倒くさいので、LaTeXmkなどのツールで自動化したいと思います。ユーザーフォルダー(Unix-like では ~/、WIndows では C:\Users\xxx\)また現在のフォルダーに .latexmkrc ファイルに以下のものを記入します。(ソース:How to make Latexmk use makeglossaries?

# この辺は、筆者の環境の一例として出しますが、使うものなどによって変わります。
$MSWin_back_slash = 0;
$lualatex = 'lualatex --shell-escape %O %S';
$pdf_mode = 4;
$postscript_mode = $dvi_mode = 0;

# これからは真に追加すべき内容になります。
add_cus_dep('glo', 'gls', 0, 'run_makeglossaries');
add_cus_dep('acn', 'acr', 0, 'run_makeglossaries');

# Windowsの場合、'$_[0]' のシングルの一重引用符を取って  $_[0] にしなければエラーが出ます。
sub run_makeglossaries {
  if ( $silent ) {
    system "makeglossaries -q '$_[0]'"; 
  }
  else {
    system "makeglossaries '$_[0]'";
  };
}
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
$clean_ext .= ' %R.ist %R.xdy';

以上のようにすれば、latexmk を一回実行すれば一気呵成にできます。しかも、VSCode + LaTeX Workshop などの IDE があれば、latexmk を自動的に実行するものが実装されているので、ショートカットキーや自動コンパイルなどの機能を使えば簡単にできます。

一覧をカスタマイズ

\printglossariesはデフォルトでinlineの形に出力され、脚注などに使えますが、sectionの中に表の形式で出力したい場合は、leipzig の前に [block][mcolblock] を追加すればできます。つまり、\usepackage[block]{leipzig} または\usepackage[mcolblock]{leipzig}にすることです。

[inline]

[block]

[mcolblock]

Tip: 「Abbreviation」のセクションタイトルを変更したい場合、\renewcommand{\leipzigname}{略号一覧}でできます。また、表の中の全称はデフォルトで小文字(perfect)ですが、語頭大文字(Perfect)にしたい場合は、プリアンブルでleipzigdesccapitalizetrueを追加すればできます。(ただ日本語に renew した場合はあんまり意味がないです。さらに、前後に本文を追加した場合は、\renewcommand {\glossarypreamble}{以下は本文で使われた略号の一覧である。} などを入れればできます。

手話の表記

手話表記の時、slgloss.sty を利用することができます。これも2020年に出たもので、まだ CTAN や TeX Live にはなく、以下のリンクからダウンロードする必要があります。

https://github.com/itamarkast/slgloss/blob/master/slgloss.sty

これも同様にダウンロードできたら、ユーザーフォルダー\textmf\tex\latexの中に入れればオッケーです。

\slg{例文}は単独で使えば\textscに相当しますが、\slg[xxx]{例文}にするとNM(非手指動作、wh表情やy/n表情など)やマウジング(IPAなどによって)を表すことができます。また、\fs{ABCD}で指文字を表すことができます。さらに、一致動詞の方向性などは普通の\textsubscriptで表せます。

  \begin{exe}
    \ex \slg{micheal buy apple}
    \ex \slg[wh]{micheal buy what}
    \ex \slg{i name \fs{micheal}}
    \ex \slg{\textsubscript{3a}\textsc{give}\textsubscript{3b}}
    \ex \slg{\textsc{give}\textsubscript{cl:long-thin-object}}
    \ex \slg{i eat} \slg[/pa/]{finish}
  \end{exe}

まとめ

本稿では、簡単に gb4e、leipzig、typgloss、slgloss などのパッケージの使い方を紹介しました。さらに詳しい使い方は、それぞれのドキュメントやソースコードをご覧ください。何かご質問やご意見がありましたら、ぜひ遠慮せずに私まで連絡してください。

Discussion