本文將簡單介紹在語言學論文寫作時,如何用 LaTeX 的 gb4e、leipzig、typgloss、slgloss 等宏包來進行例句和行間註解(gloss)的排版。

環境準備

首先我們需要準備好 TeX Live 以及配置好相關 IDE (比如 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

}

% 因為我平常寫日語論文,所以往往用 jlreq,中文請用 CTeX 等提供的各種什麼什麼 article 之類的

\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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

以上程式碼所生產的結果

Tip: 要想改變序號格式,則可以透過 \renewcommand{\thexnumi}{\數字格式指令{xnumi}} 可以改變序號格式,預設是 \arabic (1) (2) (3)。在這裡把 \數字格式指令 替換為 \roman 則為 (i) (ii) (iii) 等,\Roman 則為 (I) (II) (III),\alph 為 (a) (b) (c), \Alph 為 (A) (B) (C) 等。

巢狀、打星號和引用

如果在例文下啟用 xlist 環境,則可以進行巢狀。

Tip: xlist 環境的預設最多巢狀到第三層(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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

行間註解

行間註解是語言學論文中很重要的一部分。我們可以透過使用 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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

補充縮寫

leipzig。sty 提供的縮寫往往不夠用。比如我想用部分格的 PTV (Partitive),但是 leipzig 包並沒有提供這個,所以我們需要透過 \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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

Tip: 也可以用 \renewleipzig 來重新定義 leipzig。sty 所定義過的指令,比如我想加中文的話:\renewleipzig{ptcp}{ptcp}{分詞(Participle)}

簡便寫法

typgloss 宏包為我們提供了一種簡單的 gloss 縮寫的寫法,我們不需要再像上面那樣用 {\Ptcp} 這樣冗長的寫法了,而是直接寫成 PTCP (但是目前無法區分縮寫和非縮寫的大寫字母比如 HAVE)。這個包是去年剛出的,還沒有上 CTAN,所以不在 TeX Live 裡,要去下面的連結下載:

下載完了以後,把 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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

列印一覽表

列印一覽表是一個比較複雜的過程,首先我們需要在檔案中使用 \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 才能反映到目錄裡。

010 - 運用 LaTeX 的語言學論文例句標註指南

自動執行

前文中我們在利用 makeglossaries 程式時,採用了以下步驟:

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 程式就可以一氣呵成了。甚至你都不需要手動執行 latexmk,往往 LaTeX 的 IDE 中有自動執行 latexmk 的功能,比如 VSCode 的 LaTeX Workshop 也自帶 latexmk 的 recipe,可以選擇自動編譯或者設定快捷鍵編譯或者手動點選編譯選項等等。

調整一覽表的格式

\printglossaries 預設打印出來的東西是 inline 的,可以放在腳註裡面用。但是比如想專門弄一個章節(section)裡面放個表怎麼辦呢?我們只需要在 leipzig 前加個選項 [block] 或者 [mcolblock],也就是 \usepackage[

mcolblock

]{leipzig} 或者 \usepackage[

block

]{leipzig} 即可。

010 - 運用 LaTeX 的語言學論文例句標註指南

[inline]

010 - 運用 LaTeX 的語言學論文例句標註指南

[block]

010 - 運用 LaTeX 的語言學論文例句標註指南

[mcolblock]

Tip: 如果想改「Abbreviations」標題可以 \renewcommand{\leipzigname}{縮寫一覽}。還有預設表裡面的全稱是小寫(看 perfect),想開啟大寫可以加一句 \leipzigdesccapitalizetrue 即可(變成 Perfect),不過 renewleipzig 成中文的話就沒什麼意義了。此外甚至可以在前後加內容比如:\renewcommand{\glossarypreamble}{下表為前文中使用的所有縮寫的一覽表。}之類的。

手語標記

在標記手語的時候,可以用 slgloss。sty 這個宏包,這個也是去年剛出的,還沒有上 CTAN,所以不在 TeX Live 裡,要去下面的連結下載:

下載完了以後,把 slgloss。sty 放在 使用者資料夾\texmf\tex\latex 下即可。

\slg 可以單用基本等同於 \textsc。用 \slg[xxx]{例文} 可以標記 NM,比如手語中普遍存在的 wh 表情和 y/n 表情,以及口型用 IPA 表示。用 \fs 可以用來寫手拼法。方向動詞和指示詞可以用普通的角標。

\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

}

010 - 運用 LaTeX 的語言學論文例句標註指南

總結

本文簡單的介紹了 gb4e、leipzig、typgloss、slgloss 等幾個宏包的簡單用法,更詳細的內容請各自檢視文件和原始碼。如果有什麼別的需要加的(其他的可以幫助做例句的宏包啊之類的)或者提問什麼的,敬請在評論區留言告訴我。

改訂記錄

2021-08-18 23:59 UTC+9: 重新調整了文章順序和部分描寫以使文章更加好理解,並修正了標點符號等。

2021-08-20 18:51 UTC+9: 添加了簡便記法的 typgloss。sty