2013年12月13日 星期五

LyX 模組功能

LyX 雖然功能還滿多的,但是也只能涵蓋整個 LaTeX 的一小部份。像前一篇在練習 csvsimple 的時候,我會用到 tcolorbox 套件,需要將內容放在一個 tcolorbox 的時候,我就必須插入 TeX Code 環境,自己輸入
\begin{tcolorbox}
  ...內容...
\end{tcolorbox} 
當需要放很多這種環境時,一直複製、貼上,也是很煩人的。
研究了一下,終於大概知道該如何簡化這種煩人的動作,關鍵就在於 LyX 的模組功能(Module)。

LyX 的「模組」,就類似於 LaTeX 的 styles/packages。一份文件只能指定一種 document class, 但卻可以添加許多的樣式或套件以美化文件。在 LaTeX 中需要自己手動引用這些樣式或套件;在 LyX 中,可以自己在 LaTeX Preamble 撰寫引用命令,然後在 LyX 中插入 TeX Code 完成所需功能。

但如果在 LyX 中一直插入 TeX Code,這樣也不需要 LyX 了。因此 LyX 設計了「模組」功能,讓一些功能,能夠透過增加模組,就自動增加了某些 LaTeX 的功能,而且可以透過 LyX 的圖形介面使用 LaTeX 。加入模組後,模組會自動在 Preamble 區輸入相關設定,因此有的時候就算不知道想要使用的套件名稱,看到模組裡面有,直接增加模組,馬上就可以用了。
而且,使用者可以自己添加模組設定,加入自己常用的功能。以後如果需要某個功能時,直接加入模組,不用每次都在 LaTeX Preamble 自己手動輸入程式碼。


自從 1.6 版的 LyX 之後,LyX 都提供了 Modules 的選項,讓使用者可以選擇內建的模組,或是自己建立常用的模組。從 LyX 選單 Document→Settings... 裡的 Modules 可以看到所有可用的模組,如下圖。


Available 裡面列出了許多可以添加的 Module,例如,如果添加了 Braille 模組,這個模組就可以印出盲人用的點字系統。
LyX 的編輯畫面
排版結果
加入模組還算簡單,有的時候都是加完模組了,卻根本不太曉得這個功能要去哪邊「叫出來」。
這個跟設定模組時指定的樣式有關。不過大部分不外乎底下幾個地方:
  • 選擇樣式的下拉式選單
  • Insert→Custom Insets 裡 (或是 Insert→List / TOC、Insert→float 等處)
  • 文字或段落樣式的設定選項
用畫面直接說明:
加入 Braille 模組後,可以從樣式選單選擇希望變成點字的段落。
加入 Braille 模組後, 從 Insert→Custom Insets 內選擇插入 Braillebox
加入 Logical Markup 模組後,Text Style 會多出四種可以選擇 (Code, Emph, Noun, Strong)
實際上,LyX 內建的模組,我用到的機會幾乎等於0。

我寫這篇紀錄,主要是我發現 LyX 提供了讓使用者自己「客製化」模組的功能,因此針對自己的需求,撰寫模組設定檔,可以簡化常常需要在 Preamble 區手動貼上程式碼的困擾。但問題是,模組設定檔就不是這麼容易寫,裡面有許多設定值,光看說明文件就已經快眼花了,更不用說許多設定值看了等於沒看,一知半解,只能邊寫邊試。這次為了要在 LyX 中更方便的使用 tcolorbox 套件,終於稍微弄懂如何自製模組。以下我就以製作一個 tcolorbox 環境的模組為例子做說明。

要製作自己的模組,最方便的方式就是參考現有的模組大概如何寫,然後想辦法改成自己的。Linux 中,LyX 內建的模組會放在 LyX 程式目錄下的 layouts 目錄下。(可以在命令列輸入 lyx --version, 就會顯示 Lyx files dir。我的 LyX 程式目錄為 /usr/local/share/lyx, 因此內建的模組設定檔,就放在 /usr/local/share/lyx/layouts 裡面)目錄內所有以 .module 為結尾的檔案,就是模組設定檔了。

使用者自己的模組設定檔,則放在 $HOME/.lyx/layouts 裡面。我可以將自己撰寫好的模組設定檔放在這裡,開啟 LyX 後,選擇 Tools→Reconfigure 讓 LyX 重新搜尋所有模組並建檔。只要是自己的模組檔有更動,都需要做這個動作 LyX.

另外一種方式,可以讓模組檔隨著 .lyx 文件存在一起,就是將模組設定檔寫在 Document→Settings...→Local Layouts 裡面,如下圖。LyX 文件內包含了模組設定,就算拿到沒有模組設定的機器上開啟 LyX,顯示的 LyX 格式也是會正常的。
Local Layout 內可以放入自訂的模組
我先建立一個空白 LyX,接著在 Local Settings 貼入下面的程式碼:
#\DeclareLyXModule[tcolorbox.sty]{tcolorbox environment}
#DescriptionBegin
# To insert a tcolorbox environment.
# 建立 tcolorbox 環境
#DescriptionEnd
# Author : Mingyi Wu
# Date : 2013/12/12

Requires tcolorbox | xcolor

AddToPreamble
\usepackage[svgnames]{xcolor}
\usepackage[skins,documentation,listingsutf8]{tcolorbox}
\tcbset{listing engine=listings,
listing inputencoding=utf8,
drop fuzzy shadow,
listing options={style=tcblatex,keywordstyle=\color{blue}}}
EndPreamble


# 沒有做任何設定的 tcolorbox
InsetLayout Custom:Tcolorbox(default)

LyXType custom
Labelstring    Box
Decoration classic
LabelFont
Color collapsable
Size Small
EndFont

MultiPar true

LatexName tcolorbox
LatexType Environment
End

# 藍色的, 上層藍,下層白
InsetLayout Custom:Tcolorbox(Blue)

LyXType custom
Labelstring    Box(B)
Decoration classic
LabelFont
Color collapsable
Size Small
EndFont

MultiPar true

LatexName myBlueBox
LatexType Environment
Preamble
\newtcolorbox{myBlueBox}{colframe=Navy!50!ExampleFrame,bicolor,colback=Navy!5!ExampleBack,colbacklower=white} 
EndPreamble
End


# 紅色的盒子,單色 
InsetLayout Custom:Tcolorbox(Red)

LyXType custom
Labelstring    CrBox(R)
Decoration classic
LabelFont
Color collapsable
Size Small
EndFont

MultiPar true

LatexName tcolorbox
LatexType Environment
LatexParam  "[colback=red!5!white,colframe=red!75!black]"
End

# default tcolorbox setting
InsetLayout Custom:tcbset

LyXType custom
Labelstring     tcbset
Decoration classic
LabelFont
Color collapsable
Size Small
EndFont

MultiPar true

LatexName tcbset
LatexType command
End

# 插入分隔下層的指令
InsetLayout Custom:tcblower

LyXType custom
Labelstring     tcblower
Decoration classic
LabelFont
Color collapsable
Size Small
EndFont

MultiPar false
LatexName tcblower
LatexType Command
End


按下 OK 後,完成設定。
在主文件中的 Insert→Custom Insets 就會多出 5 個選項。前三項分別代表插入藍色、紅色、原始的顏色框;tcblower 則是用來分隔上層與下層的命令; tcbset 則是手動放入 tcolorbox 的一些命令時用的。

當我需要一個 tcolorbox 的環境時,直接從這裡選擇,螢幕上就會跳出一個 Box 的方框,讓我可以直接在方框內輸入內容,這樣就很方便了!

排版結果:

實際上這個模組,功能可能不是很完備,因為我對模組的許多設定值都還不是很熟。有心想要用的更順手的人,可能需要再修改模組設定了。

如果想要更深入了解 LyX 的模組功能,可以參考 Help→Customization 的文件,裡面有詳盡的解釋。

下載 LyX 原始檔: tcolorbox_with_module.lyx
參考網站: http://www.oak-tree.us/2010/07/13/custom-lyx-modules/

3 則留言:

  1. 你好
    冒昧請教
    如何在lyx裡key出AB弧?

    回覆刪除
  2. 您好,這功能需要額外使用 fourier 套件庫。
    先在 文件->設定值->LaTeX 前文 內輸入
    \usepackage{fourier}

    按下「確定」後,接著在 LyX 的數學輸入模式下輸入
    \widearc{AB}
    就會在 LyX 中看到 AB弧 的數學式了。

    回覆刪除
    回覆
    1. 很感謝!您幫了我一個大忙了!真的很感謝!

      刪除