2009/11/3

Xetex 排歌詞



試著用 xetex 排這首的歌詞。歌詞加上 LaTeX 的斷行記號最後一段提到簡單的解法,但是我也需要用到 ruby。ruby 簡單講就是標注拼音,wiki的解釋,如何標注拼音的方法看 LGJ 的介紹就有個概念了。


建立骨架


考慮到之後要重複利用,把歌詞本體和 latex 的設定分開,不過 latex 讀檔時看來是不允許有空白。

使用的檔案:

lyrics.tex
One_more_time_One_more_chance.txt

雖然說是先建立 lyrics.tex,實際上是兩者交互著處理,需要的功能都是一個個的加上去。


============================================================
1. 建立 lyrics.tex

lyrics.tex 的內容:

\documentclass[12pt,a4paper,twocolumn]{article}
\usepackage{xunicode}
\usepackage{xltxtra}

\usepackage[top=2cm,bottom=2cm,left=1.75cm,right=1.75cm]{ geometry } %邊界

\usepackage{setspace}
\doublespacing

\usepackage{xeCJK}
\setCJKmainfont{KFhimajiMONO} %日文字型
\setmainfont{KFhimajiMONO} %日文字型

\usepackage[CJK]{xeruby} %標示日文漢字拼音
\renewcommand\rubysize{0.6} %拼音的字型大小
\renewcommand\rubysep{-1ex} %?

\renewcommand{\~}{\nolinebreak} %重定義一個不會產生空白的不斷行指令
\setlength{\parindent}{0pt} %不縮排

\begin{document}
\input{One_more_time_One_more_chance.txt}
\end{document}

ruby 這個 package 使用時需依賴 CJK,可是我想用 xeCJK 該怎辦?
剛好找到這一篇 [XeTeX] Ruby Annotation using XeTex?

________________________________________________________
1.1 找到 ruby.sty

這東西其實就在 CJK 裡面,以我的例子是:C:\Program Files\MiKTeX 2.8\tex\latex\cjk。
________________________________________________________
1.2 修改 ruby.sty

%文中沒提到,但還是改一下好了...
%\ProvidesPackage{ruby}[\filedate\space\fileversion]
\ProvidesPackage{xeruby}[\filedate\space\fileversion]

%加了之後會跟 xeCJK 衝到,註解掉也是能動作
%\newcommand\CJKglue{\hskip \z@ \@plus .08\baselineskip}

%照著文中說明註解掉 :)
%\RequirePackage{CJK}[1996/11/20]
________________________________________________________
1.3 使用 xeruby

MikTeX 有一套自己管理 package 的方法,只是放在 CJK 裡不會被 xelatex 找到。MikTeX的FAQ 提到如何安裝自行修改後的 package,更詳細的說明裡提到有三種方法,因為第三種他寫 recommended,所以我用第三種。

============================================================
2. One_more_time_One_more_chance.txt

處理歌詞的部分主要有三件事,斷行、句中空白、拼音。前兩件用 regular expression 處理就好,拼音目前我只能一個個輸入...。

我用的 regular expression,編輯器使用 emeditor,emeditor 使用的 Regular Expression Syntax
斷行(加入Latex中的斷行符號):Find: (.)\n  Replace with: \1\\\\\n
句中空白(取代成"保留空白"):Find: (.)\ (.)  Replace with: \1~\2

One_more_time_One_more_chance.txt 的內容:

作詞:山崎将義/作曲:山崎将義\\
/唄:山崎まさよし\\

これ以上\ruby{何}{なに}を失えば~心は\ruby{許}{ゆる}されるの\\
どれ\ruby{程}{ほど}の痛みならば~もういちど君に会える\\
One~more~time~季節よ~うつろわないで\\
One~more~time~ふざけあった~時間よ\\

くいちがう\ruby{時}{とき}はいつも~僕が先に\ruby{折}{お}れたね\\
わがままな\ruby{性格}{せいかく}が~なおさら\ruby{愛}{いと}しくさせた\\
One~more~chance~記憶に\ruby{足}{あし}を取られて\\
One~more~chance~次の場所を選べない\\

いつでも\ruby{捜}{さが}しているよ~どっかに君の姿を\\
\ruby{向}{むか}いのホーム~\ruby{路地裏}{ろじうら}の窓\\
こんなとこにいるはずもないのに\\
願いがもしも叶うなら~今すぐ君のもとへ\\
できないことは~もうなにもない\\
すべてかけて抱きしめてみせるよ\\

寂しさ\ruby{紛}{まぎ}らすだけなら\\
誰でもいいはずなのに\\
星が落ちそうな夜だから\\
自分をいつわれない\\
One~more~time~季節よ~うつろわないで\\
One~more~time~ふざけあった時間よ\\

いつでも捜しているよ~どっかに君の\ruby{姿}{すがた}を\\
\ruby{交差点}{こうさてん}でも~夢の中でも\\
こんなとこにいるはずもないのに\\
\ruby{奇跡}{きせき}がもしも起こるなら\\
今すぐ君に見せたい\\
新しい朝~これからの僕\\
言えなかった「好き」という言葉も\\

夏の想い\ruby{出}{で}がまわる~ふいに消えた\ruby{鼓動}{こどう}\\
いつでも捜しているよ~どっかに君の姿を\\
明け\ruby{方}{がた}の街~\ruby{桜木町}{さくらぎちょう}で\\
こんなとこに来るはずもないのに\\
願いがもしも叶うなら~今すぐ君のもとへ\\
できないことはもう何もない\\
すべてかけて抱きしめてみせるよ\\

いつでも捜しているよ\\
どっかに君の\ruby{破片}{かけら}を\\
\ruby{旅先}{たびさき}の\ruby{店}{みせ}~~\ruby{新聞}{しんぶん}の\ruby{隅}{すみ}\\
こんなとこにあるはずもないのに\\
奇跡がもしも起こるなら\\
今すぐ君に見せたい\\
新しい朝~これからの僕\\
言えなかった「好き」という言葉も\\

いつでも捜してしまう~どっかに君の笑顔を\\
\ruby{急行}{きゅうこう}待ちの~\ruby{踏切}{ふみきり}あたり\\
こんなとこにいるはずもないのに\\
\ruby{命}{いのち}が繰り返すならば~何度も君のもとへ\\
欲しいものなど~もう何もない\\
君のほかに大切なものなど 

結果:One_more_time_One_more_chance.pdf

2009/11/2

Xetex 48小時心得 -- 下



============================================================
第一步,引用圖形與表格

文章中引用圖形的地方必須放在圖形之後。引用方式參考 wiki,加入

\ref{fig:test}
\ref{tab:test}

發現引用的地方只出現" 1 ",沒有出現預期的 "圖一"。因為不知道這種問題叫甚麼名字,我決定自定一個新的ref,藉著參考 wiki 的例子加簡短的參數說明,加入

%讓文章中圖形參考也可以顯示中文
\newcommand{\myfigref}[1]{
    \figurename~\CJKnumber{\ref{#1}}
}
%讓文章中表格參考也可以顯示中文
\newcommand{\mytabref}[1]{
    \tablename~\CJKnumber{\ref{#1}}
}

指令放置的地方必須在使用的地方前面。另外,剛改好時我會碰到這個訊息

! Missing number, treated as zero.
<to be read again>
                   \protect
l.82 嚗???敶?: \myfigref{fig:test}
                                          嚗??????????... 
目前我不知道造成的原因是甚麼,但是只要先把 \CJKnumber 拿掉,編譯成功之後,再把 \CJKnumber 放回去就可以用了。

還有一個問題,如果拿掉"~",會發現在"圖一"的"圖"和"一"之間沒空白,但是"一"後面卻帶著一個空白,目前不知道怎麼解決這個問題─不過仔細看英文論文,會發現引用圖形的地方數字後面也都會帶著一個空白─為了整齊,所以才加上"~"。

============================================================
第二步,設定邊界與行距

邊界設定參考這裡,在設定區 (preamble) 加入

\usepackage[top=2.5cm,bottom=2.5cm,left=3cm,right=2cm]{ geometry }

結果 test.pdf

查到的行距設定方法有,\linespread 和 setspace 兩種,wiki Line spacing兩種都有講到。相關參考 : Why doesn’t \linespread work?Only one \baselineskip per paragraph 影響字高(行距)的因素

使用 \linespread{1.6} ,結果 test.pdf

使用 setspace,結果 test.pdf

因為我想讓文獻的行距只有1.5倍,所以使用setspace。表格的部分 wiki 中有說明。

============================================================
結束

test.tex

test.pdf

============================================================
目前這樣就能完成一篇要求不嚴格的文章,之後有用到新的功能的話再繼續寫。

關於 Latex 裝了啥字型,The LaTeX Font Catalogue

長長的 FAQ,Welcome to the UK List of TeX Frequently Asked Questions on the Web


Xetex 48小時心得 -- 中

,每一步結束後都編譯看看結果。

============================================================
第一步,加入標題、作者、和摘要

參考 http://en.wikibooks.org/wiki/LaTeX/Title_Creation 以及 大家來學Latex 4.3節。更多的配置參考 元智大學的論文樣板,yzu_frontpages.tex ,在入門手冊中的設定區加入

\title{測試xetex和xeCJK}
\author{路人甲,路人乙 \\ 國立路人大學路人工程研究所}
\date{} %不顯示日期
\begin{document}

在 \begin{document} 和 \section{噗噗噗} 之間加入

\maketitle
\begin{abstract}
白白白白白白白白白白白白白白白白白白白白白白白白白白白
白白白白白白白白白白白白白白白白白白白白白白白白白白白
白白白白白白白白白白白白白白白白白白白白白白白白白白白
\end{abstract}

編譯,看情況再多使用 bibtex test 和 xelatex test。

xelatex test

============================================================
第二步,修改 Abstract 與 Refence 成中文格式

在PTT的Latex板 #14-F-DY8 找到作法,指令的放置位置有無影響就自己測試八,在 \begin{abstract} 之前加入

\renewcommand{\abstractname}{摘要} %中文摘要

在 \bibliographystyle{abbrv} 上加入

\renewcommand{\refname}{參考文獻}

編譯方式同第一步。

============================================================
第三步,加入圖形

示範圖 test.jpg

XeTeX官網提供的例子 -- XeTeX_doc中有 \XeTeXpicfile的例子,但是只有放圖的功能,貌似目前沒有相關的package可用,因此使用graphicx。使用上主要參考入門手冊、wiki上的說明、和大家學Latex,另外PTT Latex板 #16ZQcb00 有講到圖形為什麼需要浮動的觀念;主要就是,當文件尚在編輯時,圖形的位置應該隨著文字的位置變化而變化,而不是一開始放哪就在哪,像word就很容易因為修改文件造成原本圖形的位置空間不夠,被文字擠到下一頁就形成一大段的空白。

在設定區加入

\usepackage{graphicx}

因為 latex 會自己決定該放的位置,目前我是該章節的圖就放在該章節中。輸入放圖的指令

\begin{figure}[htpd]
    \centering %圖形置中
    \includegraphics[width=10cm, keepaspectratio = true]{test.jpg} %我使用width調整,還有其他的方法可用
    \caption{第一張圖第一張圖第一張圖第一張圖第一張圖第一張圖第一張圖
                  第一張圖第一張圖第一張圖} %圖形說明
    \label{fig:test} %圖形的key,文章中引用圖形時用
\end{figure}

\label 不是放在 \caption 之後就是放在 \caption 之中。[htpd] 在上面講的參考都有說明。若圖形大於目前設定的文章邊界需要手動調整大小,才看得出置中效果,參考指令說明 How to Use the graphicx Package 的圖形範例。

圖形的說明也可以讓他置中,參考PTT Latex板 #16Hdzm00,加入

\begin{figure}[htpd]
    \centering %圖形置中
    \includegraphics[width=14cm, keepaspectratio = true]{test.jpg}
    \caption{\protect\centering
                  第一張圖第一張圖第一張圖第一張圖第一張圖
                  第一張圖第一張圖第一張圖第一張圖第一張圖} %圖形說明
    \label{fig:test} %圖形的key,文章中引用圖形時用
\end{figure}

為什麼使用 \protect

============================================================
第四步,調整圖形的名稱為中文

因為要用到把123改成一二三的功能,從 xeCJK手冊 p.3&p.6,修改成

\usepackage[CJKnumber]{xeCJK}

從這裡這裡的說明,知道要使用 KOMA-script ,如果採用完整安裝就已經裝好了。從 CTAN 下載說明手冊scrguide.pdf,依據手冊 p.43 所說改成

\documentclass[10pt,a4paper]{scrartcl}

修改後會發現"摘要"消失了, KOMA手冊 p.56 3.1.7 有說明,修改成

\documentclass[10pt,a4paper,abstract=true]{scrartcl} 

"摘要"就回來了。

上面的說明提到的 zh-Hant.cpx 位置 /usr/local/share/texmf/tex/latex/CJK/UTF8,WinXP中在 C:\Program Files\MiKTeX 2.8\tex\latex\cjk\UTF8。texmf 就是MiKTeK 的安裝位置。但是 zh-Hant.cpx 中沒有圖名的設定,圖名的設定在另一個 zh-Hans.cpx 中。有兩種作法,一個是照說明改 zh-Hans.cpx,另一個是在 text.tex 中改。因為求方便修改,所以我用第二個作法。

方便修改的關係,我把指令放在 \begin{figure} 上

%圖形中文命名
\renewcommand\figurename{圖}
%圖形中文編號
\renewcommand\figureformat{\figurename\CJKnumber{\value{figure}}、}
\begin{figure}[htpd]

結果 test.pdf

\figureformat 的相關資料在 KOMA手冊的 p.114。因為圖名中 "圖一" 距離太近而且還多了冒號,我們對這部分做調整

%消除":"。使用KOMA的預設是":\ "
\renewcommand\captionformat{\ }
%圖形中文編號
\renewcommand\figureformat{\figurename~\CJKnumber{\value{figure}}、}

\captionformat 在 KOMA p.113有相關介紹,"~"和"\ "在大家學Latex的3.2節有說明。

第二個作法就是把 \renewcommand\figureformat{\figurename~\CJKnumber{\value{figure}}、} 複製到 zh-Hans.cpx 取代相應的指令,再加入 \CJKCaption{zh-Hans.cpx} 到 \begin{document} 下面。

============================================================
第五步,加入表格

Wiki 的說明搭配大家學Latex第8章,輸入以下的例子

\renewcommand\tablename{表} %表格中文命名
\renewcommand\tableformat{\tablename~\CJKnumber{\value{table}}、} %表格中文編號
\begin{table}[htpd]
    \protect\centering
    \caption{\protect\centering 例子}
    \begin{tabular}{|c|c|c|c|}
    \hline
    編號 & 吃飯 & 洗澡 & 睡覺 \\ \hline
    1 & 80\% & 10\% & 10\% \\ \hline
    2 & 33\% & 33\% & 33\% \\ \hline
    3 & 45\% & 45\% & 10\% \\ \hline
    4 & 10\% & 80\% & 10\% \\ \hline
    5 & 0\% & 100\% & 0\% \\ \hline
    \end{tabular}
    \label{tab:prob}
\end{table}

============================================================
結束

test2.tex

test2.pdf

2009/11/1

Xetex 48小時心得 -- 上

記錄下我的使用過程
參考文件 :  蔡老師寫的易懂好用入門手冊 蔡老師寫的易懂好用安裝手冊

============================================================
第一步,安裝

原本想裝 Tex live 2008,但是因為用ISO安裝的話在建立功能表捷徑時會因為中文出錯,放棄。

最後是安裝MiKTex,下載MiKTeX 2.8 Net Installer,使用完整安裝,大約要1.5G,安裝時間很久...

============================================================
第二步,開新文章

建立整個文件的骨架

\documentclass[10pt, a4paper]{article} %字型 10pt,紙張A4
\begin{document}
\end{document

\documentclass 的設定參考 大家學Latex 、http://www.mackichan.com/index.html?techtalk/542.htm~mainFramehttp://www.nada.kth.se/~carsten/latex/class.html,都是搜尋就能找到的。

============================================================
第三步,測試中文

因為看到Xetex原生支援unicode就決定使用他了。看過入門參考後,知道要在設定區中設定想要使用的package。參考手冊中使用CJK-Latex,不過我使用的是xeCJK,這兩個package,只要是使用完整安裝都會自動安裝好,看個人需要使用。使用xeCJK的原因,它是基於CJK套件在xetex上開發,搜尋 "xeCJK 宏包 孙文昌"可以找到作者寫的簡中手冊,之後會常常用到。

Travels in TEX Land: A first attempt to use XETEX (with Windows XP),這篇的p. 3 有給幾個參考,再加上 the fontspec package 這一篇,就可以知道我們先需要引入的package

\usepackage{xunicode}
\usepackage{xltxtra}

不使用 fontspec 是因為他不支援中英文字型分開設定。接著就是引入

\usepackage{xeCJK}

參考xeCJK作者的使用手冊,就可以知道該怎麼設定字型。

%設定中文字型
\setCJKmainfont{PMingLiU} %新細明體

%設定英文字型
\setmainfont{Times New Roman}

接下來看著入門手冊打一些中文進去試試看,整個 test.tex 檔長這樣,

\documentclass[10pt, a4paper]{article} %字型 10pt,紙張A4
\usepackage{xunicode}% provides unicode character macros
\usepackage{xltxtra} % provides some fixes/extras
\usepackage{xeCJK}
%設定中文字型
\setCJKmainfont{PMingLiU} %新細明體
%設定英文字型
\setmainfont{Times New Roman}
\begin{document}

ABCDEFGHIJKLMNOPQRSTUVWXYZ            abcdefghijklmnopqrstuvwxyz1234567890
龍龜許公蓋 fsafdsafd

\end{document}

使用 cmd 編譯,

xelatex test

就會產生 test.pdf,每次編譯之前要關掉pdf。

============================================================
第四步,輸入文章內容

參考入門手冊,輸入章節內容,\par 表示斷行,也可以用一個空白行代替

\section{噗噗噗}

噗噗噗噗噗噗噗噗噗噗噗噗噗噗噗
噗噗噗噗噗噗噗噗噗噗噗噗噗噗噗
噗噗噗噗噗噗噗噗噗噗噗噗噗噗噗

\subsection{哇嗚哇}
哇嗚哇哇嗚哇哇嗚哇哇嗚哇
\par
   
    \subsection{跳替跳}
    跳替跳跳替跳跳替跳跳替跳
    \par
   
    \subsubsection{跑跑跑}       
    跑跑跑
    \par

============================================================
第五步, 使用 Bibtex自動產生參考文獻

依照入門手冊以及參考http://en.wikibooks.org/wiki/LaTeX/Bibliography_Management,我使用 JabRef。

@INPROCEEDINGS{Guibas1978,
  author = {Guibas, Leo J. and Sedgewick, Robert},
  title = {A dichromatic framework for balanced trees},
  booktitle = {SFCS '78: Proceedings of the 19th Annual Symposium on Foundations
    of Computer Science},
  year = {1978},
  pages = {8--21},
  address = {Washington, DC, USA},
  publisher = {IEEE Computer Society},
  doi = {http://dx.doi.org/10.1109/SFCS.1978.3}
}

使用 JabRef 建一個 Reference.bib,把上面這段輸入進去Reference.bib,並把Reference.bib 與 test.tex 放在同一個資料夾下,在 \end{document} 前輸入

\bibliographystyle{abbrv} %放最後,會自己產生引用的頁面
\bibliography{Reference}
\end{document}

style參考http://amath.colorado.edu/documentation/LaTeX/reference/faq/bibstyles.html ,之後在文章中加入

\cite{Guibas1978}

編譯第一次,顯示訊息 "LaTeX Warning: There were undefined references."為正常現象,之後不一定每次都會出現。

xelatex test

編譯第二次,不可以有副檔名 .tex

bibtex test

編譯第三次,產生 test.pdf。。

xelatex test

注:引用多個時 \cite{key1, key2, ...}。另外的工具 Natbib

注:引用的部分有問題的話,手動修改 .bbl 中有問題的地方,再重新編譯一次。

============================================================
結束

test.tex

test.pdf