010 - 運用 LaTeX 的語言學論文例句標註指南
本文將簡單介紹在語言學論文寫作時,如何用 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
}
以上程式碼所生產的結果
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
}
)
行間註解
行間註解是語言學論文中很重要的一部分。我們可以透過使用 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 包並沒有提供這個,所以我們需要透過 \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 宏包為我們提供了一種簡單的 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
}
列印一覽表
列印一覽表是一個比較複雜的過程,首先我們需要在檔案中使用 \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 才能反映到目錄裡。
自動執行
前文中我們在利用 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} 即可。
[inline]
[block]
[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
}
總結
本文簡單的介紹了 gb4e、leipzig、typgloss、slgloss 等幾個宏包的簡單用法,更詳細的內容請各自檢視文件和原始碼。如果有什麼別的需要加的(其他的可以幫助做例句的宏包啊之類的)或者提問什麼的,敬請在評論區留言告訴我。
改訂記錄
2021-08-18 23:59 UTC+9: 重新調整了文章順序和部分描寫以使文章更加好理解,並修正了標點符號等。
2021-08-20 18:51 UTC+9: 添加了簡便記法的 typgloss。sty