2010年1月22日 星期五

Nroff 與 Troff

Nroff Troff 簡介

Nroff Troff 都是 UNIX 上用來將文件加以格式化排版的指令。Nroff 多用於一般印表輸出,也可以用於螢幕顯示。而 Troff 則用於印刷製版。但除了特殊的印刷用的指令外,其於的指令兩者皆通。

Nroff Troff 並不是 SVR4 標準的指令,而是放在相容套件(compatibility package)中。本章討論的就是這個版本。不過有些 UNIX 會放入廠商自行修改的 Nroff/Troff。另外還有一些功能更強的如 SoftQuad sqtroff,或 Free Software Foundation groff。這些額外的功能說明,請參考該版本的文件。

另外,本章也會提到 ditroff,是 device-indepedent troff,也就是與裝置無關的 troff。大部份的情況下,ditroff troff 相同,若有出入,原有的 troff otroff 稱之。


指令行語法


啟動 Nroff troff 的指令如下:
  /usr/ucb/nroff [options] [files]
  /usr/ucb/troff [options] [files]

下列 options 兩者通用:

-Fdir              dir 目錄中搜尋字型。
-i              處理完檔案 files 後,讀入標準輸入。
-mname 將要輸入的檔案 files 接在巨集檔後。
              troff 的巨集檔是 /usr/lib/tmac/tmac.name
              nroff 的巨集檔是 /usr/share/lib/tmac/tmac.name
-nN              第一個輸出的頁碼為 N
-olist              只將 list 指定的頁數印出。list 中的頁數以逗號分開。列印的範圍可用 n-m(第n 頁到第 m 頁),-m(從第 1 頁到第 m 頁) 或是 n-(從第 n 頁到最後一頁) 來指定。
-raN              將暫存變數 a 設定為 N
-sN              n 頁就暫停。這樣可以用來換紙匣。nroff 中按 ENTER 可繼續,而 troff 中則需按輸出機上的 " 開始 " 鈕繼續。
-Tname              name 指定的印表機或是輸出機準備輸出。name 的值請參考硬體手冊或是相關人員。
-uN              在第三個位置的字型加粗 N 次。通常用來調整粗體字的寬度。
-z              除了用 .tm 以外的輸出通通忽略。



Nroff 專用選項


-e              輸出行時,將每個字之間的空白以定間隔取代。
-h              8 個空白字元用 tab 代替,可加速輸出速度。
-q              啟動 .rd request 的同時輸出入功能。


Troff 專用選項

-a              將輸出以 ASCII 碼表示。若要計算需印出多少頁但不想真正印出時可使用。
-f              格式化結束後不將輸出機停下來。


範例:
chap1 送入 tbl 前置處理器,然後用 mm 巨集來將結果格式化。暫存變數 N 設定為 5(設定頁碼格式):

  tbl chap1 | troff -mm -rN5 | spooler &

chap2 ms 巨集格式化。頁碼由 7 開始,但只印出 8-10 頁、15 頁、和 18 頁到最後一頁:
 
  nroff -ms -n7 -o8-10,15,18- chap2 &
             

request 概說

如何進行格式化排版呢 ? 只要在原始文字檔中加上一些簡單的碼就可以了。nroff troff 讀入這些碼後,就會照著這些碼所指定的動作去更動輸出。比如,若要將一行文字置中,可以用下面的碼:

.ce
This text should be centered

然後格式化的輸出就如下:

                                                                      This text should be centered.
格式碼有兩類:

. request,這是排版動作的最基本單位,用來執行一些簡單的動作。
. 巨集,這是一些 request 的組合,可以用來進行一連串的動作。

request 的功能非常多,版面上的任何動作都可以由 request 來進行。巨集則將這些基本動作結合起來進行一些較複雜的排版動作。打個比方,request 就像原子,而巨集就有如分子。

關於巨集的部份請見第 1314 15 章。


------------------------------------------------------------

常用的 request

最常用的 request 如下:

<<<<<<<<<<<<<<  code >>>>>>>>>>>>>>>>>


比如,巨集可以如下般寫成:

.                                                        \" Ps 巨集,顯示原來的字串。
.de Ps                                          \" 定義一個名為 "Ps" 的巨集。
.sp .5                                          \" 將行高減低一半。
.in li                                          \" 縮排一寸。
.ta 10n +10n              \" 設定新的 tab 長度。
.ps 8                                          \" 使用 8 點字。
.vs 10                                          \" 將垂直距離設為 10
.ft CW                                          \" 使用固定寬度字型。
.br                                                        \" 斷行 (.ne 會從下一行開始計數)。
.ne 3                                          \" 將這三行緊連在一起。
.nf                                                        \" 不補字元模式 (將行以原本格式輸出)。
..                                                        \" 結束巨集定義。


------------------------------------------------------------

指定使用單位

有些 request 的數字值後可加上單位字元。下表列出可用的單位字元及其意義。所有的單位都會在程式內部換算成基本單位(在下表最右欄)。基本單位是該印表機所能使用的最小大小。下表中,T 表示目前的點大小,R 表示裝置解析度。

單位字元               意義               單位換算               基本單位數
c                            公分               2.54                             R/2.54
i                                          6 picas 72               R
m                            Em              T                             RxT/72
n                            En              0.5em                            RxT/144
p                                          1/72                             R/72
P                            Pica              1/6                             R/6
u                            基本單位                            1
v                            垂直行距                            目前的基本單位數
                            預設

以下除了 .ps 以外,都可以指定使用的單位,.ps 僅能用點為單位。若不指定單位,則用預設值。(第二欄中的單位如上表所示)。對於水平方向的 request,通常用 em 為單位,垂直方向則多用垂直行距。

Request              預設單位               Request              預設單位


<<<<<<<<  table code  >>>>>>>>>>


p12-5

------------------------------------------------------------

會直接換行的 request

大部份的 request 在處理文字時並不會在填滿一行之前就進行換行,可是下列這些會進行換行:

<<<<  code  >>>>>>>

若要防止這些 request 換行,則在 request 之前用 "'" 代替 "."。比如 .sp 會立即換行,但 ,sp 就不會,會等到輸出行填滿後才會向下換行。



request 的預設動作

Nroff/troff 有預設的排版環境。比如,除非將行的長度重設為其它值,否則預設的行長度即為 6.5 吋。大部份的 request 都可以修改預設的環境,並列於下表。第二欄列出的即為預設的值。若一開始無預設值,則以 "-" 表示。第三欄顯示的是不使用參數時的結果。若該request 不可使用參數或是一定要有某個參數,則用 "-" 表示。


p12-6

Request              預設值                             若無參數               說明

.ad                            Justify                            前一次調整                            對齊左右
.af                            Lowercase                            -                            將格式指定給暫存變數
                            arabic
.am                            -                            .. 結束呼叫                            附於巨集後
.bd                            Off                            -                            加粗字型
.c2                            ;                            ;                            設定不換行控制字元
.cc                            .                            .                            設定控制字元
.ce                            Off                            將一行置中                            將行置中
.ch                            -                            trap 關掉                            設定 trap 位置
.cs                            Off                            -                            設定等間隔
.cu                            0                            一行                            連續加底線或是斜體
.da                            -                            結束分出                            將文字分出並附加於巨集之後
.de                            -                            .. 結束巨集                            定義巨集
.di                            -                            結束分出                            將文字分出至巨集
.ec                            \                            \                            設定 escape 字元
.eo                            On                            -                            關閉 escape 字元
.ev                            0                            前一個環境                            設定環境
.fc                            Off                            Off                            設定分隔和填補字元
.fi                            Fill                            -                            將行剩下空間填滿
.fp                            1=R                            -                            將字型載入至 1-4 的位置
                            2=I
                            3=B
                            4=S
.ft                            Roman                            前一個字型                            設定字型
.hc                            \%                            \%                            設定連字符號
.hy                            Mode 1                            前一模式               設定連字模式
.ig                            -                            .. 結束                            不輸出文字
.in                            0                            前一個縮排設定                            縮排
.it                            -                            trap 關閉                            在計數輸入行時加入 trap
.lc                            .                                                        設定前置字元
.lg                            On                            On                            連字模式
.ll                            6.5"                            前一個行長度                            設定行的長度
.ls                            單行間距                            前一個設定值                            設定行間距
.lt                            6.5"                            前一個標題長度                            設定標題長度
.mc                            -                            關閉                            設定邊界字元
.mk                            -                            內定                            標記垂直方向位置
.na                            調整                            -                            是否調整邊界
.ne                            -                            一垂直行寬                            若有空間則不跳頁
.nf                            填滿                            -                            不填滿行中空白
.nh                            On                            -                            啟動斷字功能
.nm                            Off                            Off                            行號模式
.nn                            -                            編一行的編號                            不編行號
.ns                            間隔模式                            -                            打開無間隔模式
.nx                            -                            檔尾                            跳到某檔案
.pc                            %                            Off                            設定換頁字元
.pl                            11"                            11"                            設定頁長度
.pn                            Page 1                            -                            設定頁碼
.po                            0(nroff)                            前一個偏移量                            改變頁偏移量
                            26/27(troff)
.ps                            10                            前一個點大小                            設定點大小
.rd                            -                            發出聲音                            從終端機讀入資料
.rt                            -                            內定                            回到標記的垂直位置
.sp                            -                            一垂直行                            輸出一個空白的間隔
.ss                            12/36em                            -                            設定字元間距
.sv                            -                            一垂直行                            儲存垂直間隔
.ta                            .5"(troff)                            -                            設定 tab 距離
                            8em(nroff)
.ti                            0                            -                            下一行縮排
.tm                            -                            換行                            輸出一個訊息字串後繼續
.uf                            斜體                            斜體                            設定底線用字型
.ul                            0                            一行                            加底線 / 變斜體
.vs                            1/6"(nroff)                            前一個值                            設定行間距
                            12pts(troff)


------------------------------------------------------------

request 分類

下列為 84 nroff/troff request,以其用途來分類方便查看。

<<<<<< 排板請注意,這邊是按左上右上左下右下四個區域來定翻譯順序 >>>>>>>>

字元輸出
.cu              連續加底線或是斜體。
.lg              連字模式。
.tr              轉換字元。
.uf              設定底線用字型。
.ul              加底線 / 變斜體。

設定 Troff/Nroff
.c2              設定不換行控制字元。
.cc              設定控制字元。
.ec              設定 escape 字元。
.eo              關閉 escape 字元。
.hc              設定連字符號。
.pc              設定換頁字元。

條件判斷
.el              if-else 中的 else 部份。
.ie              if-else 中的 if 部份。
.if              if 敘述。

診斷用 request

.ab              印出訊息字串後跳出。
.fl              強迫寫出輸出緩衝區。
.ig              不輸出文字。
.mc              設定邊界字元。
.pm              印出巨集名稱與大小。
.tm              輸出一個訊息字串後繼續。



p12-8

<<<<< 排版請注意,原 12-8 頁的翻譯順序為左邊欄先翻然後再翻右欄 >>>>>>

字型與字元大小控制

.bd              加粗字型。
.cs              設定等間隔。
.fp              將字型載入至 1-4 的位置。
.ft  設定字型。
.ps              設定點大小。
.ss              設定字元間距。

水平位置控制

.in              縮排。
.ll              設定行的長度。
.lt              設定標題長度。
.po              改變頁偏移量。
.ti              下一行縮排。
.tl              設定標題為三段體。

連字斷字模式

.hw              設定硬體支援的斷字功能。
.hy              設定斷字模式。
.nh              啟動斷字功能。

輸出入切換

.cf              將檔案以 raw 形態輸出。
.ex              跳出 nroff/troff
.nx              跳到某檔案。
.pi              將輸出轉向 UNIX 指令。
.rd              從終端機讀入資料。
.so              跳到某個檔案,然後跳回。
.sy              執行 UNIX 指令。

標定行號

.nm              行號模式。
.nn              不編行號。

處理巨集和字串

.am              附於巨集後。
.as              附於字串後。
.ch              設定 trap 位置。
.da              將文字分出並附加於巨集之後。
.de              定義巨集。
.di              將文字分出至巨集。
.ds              定義字串。
.dt              設定分出的 trap 位置。
.em              定義結尾巨集。
.ev              設定環境。
.it               在計數輸入行時加入 trap
.rm              移除一個巨集、request 或是字串。
.rn              更改一個巨集、request 或是字串的名稱。
.wh              設定頁 trap

暫存變數

.af              將格式指定給暫存變數。
.nr              定義暫存變數。
.rr              移除暫存變數。

分頁

.bp              換頁。
.mk              標記垂直方向位置。
.ne              若有空間則不跳頁。
.pl              設定頁長度。
.pn              設定頁碼。
.rt              回到標記的垂直位置。

Tab 控制

.fc              設定分隔和填補字元。
.lc              設定前置字元。
.ta              設定 tab 距離。
.tc              設定 tab 字元。

文字調整

.ad              對齊左右。
.br              將輸出行斷開。
.ce              將行置中。
.fi              將行剩下空間填滿。
.na              是否調整邊界。
.nf              不填滿行中空白。

垂直間距

.ls              設定行間距。
.ns              打開無間隔模式。
.os              輸出 .sv 的結果。
.rs              恢復間隔模式。
.sp              輸出一個空白的間隔。
.sv              儲存垂直間隔。
.vs              設定行間距。




p12-9

. request 詳細說明

--------------------------------------
.ab [text]

跳出並印出 text。若無 text 參數,則印出 User Abort


--------------------------------------
.ad [c]

根據 c 指定的格式輸出。必需將填滿模式打開(見 .fi)。無參數時傳回上一次的調整狀況。目前的調整值會存在 .j 暫存變數中。其值為下: 0=l1=b3=c5=r (見 .na)。

c 值可為以下數種:
  b              行對齊。
  n              行對齊。
  c              行置中。
  l              行向左對齊。
  r              行向右對齊。


--------------------------------------
.af r c

將格式 c 指定給 r 暫存變數。

c 值可如下:
  1              012 等等。
  001              000001002 等等。
  i              小寫羅馬數字。
  I              大寫羅馬數字。
  a              小寫英文字母。
  A              大寫英文字母。

範例:

ms 巨集進行分頁。
.af PN i               \" 將頁碼暫存變數 PN 設定為 i 格式。


--------------------------------------
.am xx[yy]

將之後到 yy 之前的 request 都接在 xx 巨集之後。若無 yy,則以 .. 做為結尾標記。


--------------------------------------
.as xx string

string 接到 xx 暫存變數之後。string 中可有空白字元,以換行字元結尾。開頭的 " 符號會予以忽略。


--------------------------------------
.bd [s] f n

f 字型的字加粗 n 次。若指定 s,則將特殊字型的字元加粗 n 次。


--------------------------------------
.bp [n]

換頁,將下一頁編為第 n 頁。


--------------------------------------
.br

強迫斷行(輸出原行的一部份)。


--------------------------------------
.c2 c

c 當做不斷行控制字元(原為 ')。


--------------------------------------
.cc c

c 字元來當做 request 和巨集的前置字元(原為 .)。


--------------------------------------
.ce [n]

將接下來 n 行(預設為 1)置中。若 n 0,則下面的行不置中。n 只算有輸出的行,空白行跳過不計。


--------------------------------------
.cf file

file 的內容直接輸出不加以處理(僅 ditroff 可用)。


--------------------------------------
.ch xx [n]

xx 巨集的 trap 位置改到 n。若不指定 n,則解除 trap


--------------------------------------
.cs f n m

f 字型的字以定寬印出。字元寬均為 n/36 em。若有 m 參數,則 em m 點。

範例:
.cs CW 18 \" 將定寬字型寬度縮小。


--------------------------------------
.cu [n]

接下來 n 行連續加底線(包括字與字間的空白)。若 n=0,則停止加底線。.ul 則指定只對非空白的字元加底線。troff 中可用 .uf 來改變加底線的字型。troff 中,.cu .ul 都是將字型變為斜體,若要加底線則要使用巨集。


--------------------------------------
.da [xx]

將下面的文字分出後接在 xx 巨集之後。若無參數則結束分出的動作。


--------------------------------------
.de xx[yy]

定義 xx 巨集為 .yy 之前的 request 集合(若無 .yy 則以 .. 做為結尾)。


--------------------------------------
.di [xx]

將下面的文字分出至新的巨集 xx 的定義中。若無參數則停止分出。


--------------------------------------
.ds xx string

xx 定義為含 string 的字串。


--------------------------------------
.dt n xx

在位置 n 的地方放置分出 trap,一遇見這個 trap 就將文字分出至 xx 巨集中。


--------------------------------------
.ec [c]

設定 escape 字元為 c。預設為 \


--------------------------------------
.el

if-else else 部份。


--------------------------------------
.em xx

將巨集 xx 設定在其它輸出全部結束執行。


--------------------------------------
.eo

escape 字元的功能關閉。所有字元都會當做一般字元輸出。


--------------------------------------
.ev [n]

將環境改為 n。比如目前環境中儲存了許多影響水平定位,斷字或是邊界的 request。若不指定 n,則回到前一個環境。n 的初始值為 0n 介於 0 2 之間。要切換到前一個環境必需使用 .ev 不加參數,否則會有堆疊溢位的情況發生。


--------------------------------------
.ex

troff/nroff 中跳出並停止輸出。通常和 .nx 併用,來產生定格式信件用。


--------------------------------------
.fc a b

將欄分隔字元設定為 a,而將填補字元設定為 b


--------------------------------------
.fi

打開填滿模式,與 .nf 相反,預設為打開的。


--------------------------------------
.fl

強迫輸出,除錯時十分好用。


--------------------------------------
.fp n f
f 字型載入到第 n 個位置。n 1 4otroff),或是從 1 9ditroff)。

範例:
.fp 7 CW              \" 7 個位置是定寬度字型。
.fp 8 CI              \" 8 個位置是斜體字型。
.fp 9 CB              \" 7 個位置是粗體字型。


--------------------------------------
.ft f

將字型設定為 ff 可以是一或兩個字元所代表的字型。或是用 .fp 所指定的字型位置。\f 和此 request 功能相同。


--------------------------------------
.hc [c]

將輸入的斷字符號改為 c。預設為 \%


--------------------------------------
.hw words

指定 words 的斷字方式,如 .hw spe-ci-fy


--------------------------------------
.hy n
將斷字功能打開(n< 大於等於符號 >2)或關閉(n=0)。見 .nh

n 值可為下:
1              有必要即予以斷字。
2              每頁最後一個字不斷字。
4              不要將前兩個字元斷開。
8              不要將最後兩個字元斷開。
14              加上前三項限制。


--------------------------------------
.ie [!]condition anything
.el anything

這是 if-else fi 部份。若 condition 成立,則執行 anything,否則執行 .el 之後的anything.ie/el 也可以使用巢狀結構。.if 下有 condition 的說明。

範例:
若第一個參數不是 2,則欄寬為 1.8 吋,否則為 2.5 吋:

              .ie !'\\$1'2' .MC 1.8i 0.2I
              .el .MC 2.5i 0.25i

--------------------------------------
.if [!]condition anything

condition 成立則執行 anything。若有 ! 號則 condition 不成立時執行 anything。若 anything 的長度超過一行,可用 \{ \} 來括起來。

Condition 之值可為下列:
o              若頁碼為奇數則成立。
e              若頁碼為偶數則成立。
n              若用 nroff 則成立。
t              若用 troff 則成立。
"str1"str2"
              str1 str2 相同則成立,常用於檢查巨集的參數。
expr              expr 之結果大於 0 則成立。



運算式

運算式中常使用到暫存變數,也可用下列任一算子 ;
+ -              加減。
/ *              乘除。
%              取餘數。
> <              大於小於。
>= <=              大於等於小於等於。
= ==              等於。
&              邏輯 AND
:              邏輯 OR


範例:
.if t .nr PD 0.5v              \" 設定 ms 段落間的間隔
<<<<  code  >>>>>>>



--------------------------------------
.ig [yy]

以下一直到 .yy 之前的行都予以忽略。若無 yy,則到 .. 之前都忽略(和 .de 相同)。常用來跳過大串的文字或是巨集定義。


--------------------------------------
.in [±][n]

將縮排設定為 n 或是將縮排 < 加減號 >n。若無參數則恢復原來的縮排方式。目前縮排方式存於 .i 暫存變數中。預設單位為 em


--------------------------------------
.it n xx

將輸入的行數設定為 trap。也就是說過了 n 行輸入後執行 xx 巨集。


--------------------------------------
.lc c

將前置重複字元設定為 c,預設為 "."。和 \a 類似。


--------------------------------------
.lg n

若不加上 n 或是非 0 之值,則打開連字模式。


--------------------------------------
.ll [±][n]

將行長度設定為 n 或是將原長度 ±n。若不加參數,則恢復前一次的行長度。目前的行長度存在 .l 暫存變數中。預設長度為 6.5",預設單位為 em


--------------------------------------
.ls [n]

將行距設定為 n。若不加參數則恢復前一次的行距。預設為 1

範例:
.ls 2              \" 將行距設定為原行距的兩倍,稱為 double-spaced


--------------------------------------
.lt [n]

將標題寬度設定為 n(單位是 em)。若不加參數則恢復上一次的寬度。


--------------------------------------
.mc [c] [n]

設定邊界字元為 c,並置於邊界右邊 n 格之處。若無 c 參數則關閉邊界字元功能。若無 n 參數則用前一次的值。troff n 預設為 1 emnroff 中預設為 .2 吋。


--------------------------------------
.mk [r]

將目前的垂直位置存入 r 暫存變數中。用 .rt 或是 .sp|\nr 回到標記位置。


--------------------------------------
.na

不調整邊界。目前調整模式存於 .j 中。見  .ad


--------------------------------------
.ne n

若接下來 n 行不能完全放入此頁,則換頁。


--------------------------------------
.nf

不填滿或是調整輸出行。見 .ad .fi


--------------------------------------
.nh
將斷字功能關閉。見 .hy


--------------------------------------
.nm [n m s i]
n 大於等於 0,則編行號,若為 0 則不編行號。±n 用來設定行號初始值 ; m 用來設定編號間隔,而 s 則用來分隔行號與文字。i 設定文字的縮排。用來列印程式片斷相當有用。見 .nn


--------------------------------------
.nn n
接下來 n 行印出行號,但繼續算行號。用 .nm +0 就可繼續編印行號。見 .nm


--------------------------------------
.nr r n [m]
n 值設定給 r 暫存變數,若加上 m 則設定自動遞增為 m

範例:

" 區塊寬度 " 設定為行長度減去內縮長度:
  .nr BW \n(.l-\n(.i

設定 ms 巨集的頁編排值:
  .nr LL 6i                                          \" 行長度。
  .nr PO ((8.25i-\n(LLu)/2u)              \" 頁偏移量。
  .nr VS \n(PS+2                            \" 垂直間隔。

sqtroff 中,設定足碼暫存變數為自動遞增

  .nr footcount 0 1              \" 在每頁重置為 0

注意: 巨集定義裡,\n 應該寫成 \\n



--------------------------------------
.ns

打開無間隔模式。見 .rs


--------------------------------------
.nx file
跳到 file 後不跳回原來檔案。見 .so


--------------------------------------
.os
.sv 所儲存的垂直間隔印出。


--------------------------------------
.pc c
c 來當 nroff/troff 中的頁碼代碼。原來為 %


--------------------------------------
.pi command

nroff/troff 的輸出結果導向到 UNIX 的指令 command 去。(僅 nroff ditroff 可用)。此 request 必需在有任何輸出之前執行。

範例:
.pi /bin/sort              \" 將輸出排序(排序後才會輸出)


--------------------------------------
.pl [±][n]
將頁長度設為 n 或是將目前頁長度±n。若無參數則恢復前一次的設定。目前的頁長度存在 .p 暫存變數中。預設為 11 吋。


--------------------------------------
.pm
印出所有巨集的名稱和大小。


--------------------------------------
.pn [±][n]
將下一個頁碼設為 n 或是設為目前頁碼±n。目前頁碼存在 % 暫存變數中。


--------------------------------------
.po [±][n]
將文字置於左端算來 n 個單位之處。或是將目前的偏移量±n 個單位。若無參數則恢復為前一次的設定。目前的偏移量存在 .o 暫存變數中。


--------------------------------------
.ps n
將點的大小設定為 n(僅 nroff 可用)。目前的點大小存在 .s 暫存變數中。預設為 10 點。


--------------------------------------
.rd [prompt]
顯示 prompt 後從終端機讀入輸入資料。


--------------------------------------
.rm xx
移除 xx 巨集或字串。


--------------------------------------
.rn xx yy
request、巨集或是字串 xx 改名為 yy


--------------------------------------
.rr r
將暫存變數 r 移除。見 .nr


--------------------------------------
.rs
恢復間隔模式。見 .ns


--------------------------------------
.rt [±n]
往前跳到上一個標記的垂直位置去。或是從頁開頭或是文字分出算起±n。見 .mk


--------------------------------------
.so file
切換到 file 後回到目前檔案。也就是說將另一個檔案的內容讀入到目前檔案來。見 .nx


--------------------------------------
.sp n
n 行空白,預設為 1


--------------------------------------
.ss n
將間隔字元寬設定為 n/36 em。(nroff 中無效)。


--------------------------------------
.sv n
存下 n 個垂直間隔。用 .os 輸出所存之間隔。


--------------------------------------
.sy command [args]

執行 UNIX 指令 commandargs 為其參數。(僅 ditroff 可用)。

範例:
找出第一個參數後累加在暫存檔中:

  <<<<  code  >>>>>>>


--------------------------------------
.ta n[t] [+]m[t] ...
設定 nm 等位置為 tab 位置。若不給定 t 參數,則 tab 向左對齊。+ 可用來定義相對於前一個 tab 的長度。\t 和本 request 類似。

t 之值可如下:
 
  L              向左對齊。
  R              向右對齊。
  C              置中。


--------------------------------------
.tc c
tab 重複字元設定為 c,預設為空白字元。比如 .tc 。會將到下一個 tab 位置之千都用 "."號填滿。


--------------------------------------
.ti [±][n]
暫時縮排。接下來一行縮排為 n,或是將下一行縮排設定為目前縮排±n。預設單位為 em.

範例:
<<<<  code  >>>>>>>


--------------------------------------
.tl 'l'c'r'
標題對左(l)或是置中(c)或是對右(r)。標題長度用 .lt 設定,非 .ll


--------------------------------------
.tm text
結束訊息。將 text 印在標準錯誤上,除錯時很實用。


--------------------------------------
.tr ab

a 字元轉換為 b 字元。

範例:
產生大寫字元,然後恢復原狀,常用於標題:

<<<<<<<<<<<<<< 排版請注意,code 後面的 et cetera 翻為 "等等 ">>>>>>>>>>>>>>>>>>

  <<<<  code  >>>>>>>                                         


--------------------------------------
.uf f
將加底線的字型設定為 f。(供 .ul 或是 .cu 使用)。預設為 italics


--------------------------------------
.ul [n]

將下 n 行都加上底線(troff 中則為變斜體)。不會將字與字間的空白加上底線。用 .cu 來在空白上加底線。若要在 troff 中加底線則必需使用巨集。


--------------------------------------
.vs [n]

設定垂直行距為 n。若無參數則恢復前一次設定。目前行距存於 .v 暫存變數中。預設值在nroff 中為 1/6 吋,troff 中為 12 點。


--------------------------------------
.wh n [xx]

這個 request 稱為 "when"。到達 n 位置時執行 xx 巨集。負的值是從一頁的最後一行算起。若不指定 xx,則移除在 n 位置上的 trap。(trap 就是一頁裡指定執行某個巨集的位置)。若用 .ch 將一個巨集的 trap 位置移到一個已有 trap 的位置上時,兩個巨集都會動作。但 wh不可以將同一個位置指定給兩個不同的巨集。


Escape 序列


序列                             效果
\\                            使得後面的 \ 號以一般字元處理。
\e                            將目前的 \ 字元印出。
\'                            上揚音 ; \(aa 一樣。
\`                            下頓音 ;              \(ga 一樣。
\-                            目前字型的減號。
\.                            點。
\(space)              不可用於填滿的空白字元。
\(newline)              隱藏的換行字元。
\0                            阿拉伯數字寬度的空白字元。
\|                            1/6-em 的窄空白字元(nroff 中為 0 寬度)。
\^                            1/12-em 的半窄空白字元(nroff 中為 0 寬度)。
\&                            0 寬度空白,無法印出。
\!                            行標示符號。
\"                            註解開頭。
\$n                            插入參數,n 介於 1 9 之間。
\%                            預設的斷字字元。
\(xx                            xx 為名的字元。
\*x 或是 \*(xx              插入 x 或是 xx 字串。
\a                            不經解譯的前置字元。
\b'abc...'              建立括號的函式。
\c                            將下一行併入本行。
\d                            向下移動 1/2emnroff 中為半行的高度。
\D'1 x,y'              ditroff 可用,從目前位置畫一條線到 x,y 座標處。
\D'c d'                            ditroff 可用,畫一個直徑為 d,而左邊切在目前位置的圓。
\D'e d1 d2'              ditroff 可用,畫一個水平軸長 d1,垂直軸長為 d2,而左邊切於目前位置的橢圓。
\D'a x1 y1 x2 y2'              ditroff 可用,從目前位置開始,畫一個中心點在 x1y1,終點在 x1+x2y1+y2 的弧。方向為逆時針。
\D'~ x1 y1 x2 y2 ...'              ditroff 可用,從目前位置開始畫一條通過所有點的 spline
\fx \f(xx \fn              將字型切換為 x xx 或是第 n 位置上的字型。
\h'n'                            向右移 n 單位,若為負數則向左移。
\H'n'                            將字元高設定為 n 點,不影響其寬度。僅 ditroff 可用。
\kx                            將水平的 " 輸入 " 位置存於 x 暫存變數中。
\l'nc'                            畫一條長為 n 的水平線(可加 c 參數)。
\L'nc'                            畫一條長為 n 的垂直線(可加 c 參數)。
\nx,\n(xx              插入暫存變數 x xx
\o'abc...'              abc 等字元加粗。
\p                            將輸出行斷行。
\r                            往上 1-emnroff 為向上一行)。
\sn,\s±n              將點大小改為 n,或是將目前大小±n。比如說 \s0 可恢復原來的點大小。
\S'n'                            將輸出向右傾斜 n 度。負值為向左傾。0 則關閉傾斜功能。僅 ditroff 可用。
\t                            不加解譯的水平 tab
\u                            向上 1/2emnroff 中為向上半行)。
\v'n'                            向下 n 個單位,若 n 為負則為向上。
\w'string'              插入 string 的寬度。
\x'n'                            額外空白行。n 若為正則插入在下方,若為負則插入在上方。
\zc                            c 字元以 0 間隔印出。
\{                            超過一行的條件式左括號。
\}                            超過一行的條件式右括號。
\x                            x,任何上面沒列出的字元。


------------------------------------------------------

內建暫存變數

內建暫存變數有兩種,唯讀或可讀寫


唯讀暫存變數

.$              目前巨集可用的參數個數。
.$$              ditroff 可用,目前 troff process id
.A              若使用 -a 選項則 troff 中設為 1; nroff 中恆為 1
.H              目前水平方向解析度,單位為基本單位。
.T              nroff 若用 -T 選項時設為 1troff 恆為 1ditroff 中的 \*(.T 則有 -T
.V              目前的垂直方向解析度,單位為基本單位。
.a              最近一次使用 \x'n' 來增加的行下空白間隔。
.c              目前檔案中讀入的行數。
.d              在分出區塊目前的垂直位置。若無分出區塊,則和 nl 暫存變數一樣。
.f              目前字型的位置(otroff 1 4ditroff 1 9)。
.h              本頁或是這個分出區塊的文字基準線。
.i              目前的縮排設定。
.j              目前的調整設定。
.l              目前的行長度。
.n              前一個輸出行的文字長度。
.o              目前的頁偏移量。
.p              目前的頁長度。
.s              目前的點大小。
.t              到下個 trap 的距離。
.u              填滿模式下為 1,非填滿模式下為 0
.v              目前的垂直行距。
.w              前一個字元的寬度。
.x              保留。
.y              保留。
.z              目前分出區塊的名稱。



可讀寫暫存變數

%              目前頁碼。
ct              width 設定的字元種類。
dl              上一個結束的分出區塊的最大寬度。
dn              上一個結束的分出區塊的最大高度。
dw              今天星期幾(1 7)。
dy              今天幾號(1 31)。
hp              目前在輸入行上的位置。
ln              輸出行號。
mo              這個月的月份(1 12)。
nl              前一個印出的文字基準線的垂直位置。
sb              字串相對於基準線下的深度(以 width 函式取得)。
st              字串相對於基準線上的高度(以 width 函式取得)。
yr              今年年份的後兩位數。



特殊字元

本節解說重點為下列幾種特殊字元

. 標準字型上的特殊字元
. 其他字元
. 括號符號
. 數學符號
. 希臘字母

第一個表裡的字元在標準字型裡都有,而後的字元就僅有特殊字型才有。

標準字型

<<<<<<<<<<<< 排版請注意,只翻地三欄 >>>>>>>>>>>>>>

字元               輸入               字元名稱
                            閉引號
                            開引號
                            3/4em 的破折號
                            斷字符號
                            斷字符號
                            目前字型中的減號
                           
                            方型
                            底線
                            1/4
                            1/2
                            3/4
                            連字 fi
                            連字 fl
                            連字 ff
                            連字 ffi
                            連字 ffl
                            度數
                            十字
                            註解
                           
                            註冊商標
                            版權所有




其他字元

字元               輸入               字元名稱
                           
                            上揚音
                            下頓音
                            底線
                            右箭頭
                            左箭頭
                            上箭頭
                            下箭頭
                            直線
                            雙十字
                            右手
                            左手
                           
                            可印出的空白(ditroff 專用)



括號符號

字元               輸入               字元名稱
                            大括號左上
                            大括號左中
                            大括號左下
                            大括號右上
                            大括號右中
                            大括號右下
                            中括號左上
                            中括號左中
                            中括號左下
                            中括號右上
                            中括號右中
                            中括號右下



數學符號

字元               輸入               字元名稱
                            加號
                            減號
                            等於
                            星號
                            斜線
                            根號
                            根號上面的橫線
                            大於等於
                            小於等於
                            同於
                            約等於
                           
                            不等於
                           
                           
                            正負
                            聯集
                            交集
                            子集
                            母集
                            集合小於等於
                            集合小於等於
                            無限大
                            偏微分
                            梯度
                           
                            積分
                            正比於
                            空集合
                            屬於
                           



希臘字母

若有和大寫英文字母相同者,在標準字型中可找到,否則就要使用特殊字型。又,第三欄列出者為該字母的念音。

字元               輸入               字元名稱               字元               輸入               字元名稱

沒有留言:

張貼留言

推到 Twitter!
推到 Plurk!
推到 Facebook!