% pic file | tbl | eqn | troff | spooler
多人系統上,通常會為了格式化功能建立一些通用 的 shell script,透過這個 script 去選擇格式化所使用的各個選項和前置處理器。當然這些前置處理器也可以分別執行。要檢查轉換的結果是否正確時很好用。比如:
% tbl file
會將每個 .TS/.TE 之間的的輸入換成 tbl 的指令碼。其它的輸入則維持不變。
Tbl
這是用來建立表格的前置處理器。若要在 pipe 中使用,則必須放在 eqn 之前。這樣比較有效率。tbl 的指令形式如下:
/usr/ucb/tbl [options] [files]
Options:
-me 在檔案之前加上 me 巨集。
-mm 在檔案之前加上 mm 巨集。
-ms 在檔案之前加上 ms 巨集。
-TX 僅處理完整的垂直動作。nroff 格式化或是有些不支援半行高或是不到一行高的動 作的裝置上使用。
-------------------------------------------
一般指令碼形式
文字檔中的 tbl 指令碼形式如下:
.TS H
options;
format1
format2.
Column Titles
.TH
Item1 Item2 Item3
Item1 Item2 Item3 ...
.TE
tbl 處理是否成功關鍵就在於前面的檔頭是否正確。其 內容為一行的選項加上多行的格式指定行。每個表格的項目必須以 tab 字元隔開,同一行的項目都放在同一行內不可斷行,除非加上文字區塊符號 T{ 和 T}.
----------------------------------------------------
Tbl 巨集
.TS 表格開始。
.TE 表格結尾。
.TS H 若表格大小超過一頁則使用這個。和 .TH 併 用,讓每一頁都會有表格檔頭。
.TH 和 .TS H 合用,表示檔頭的結尾。
.T& 改變格式行後繼續表格。
Options:
Options會直接影響整個表格。Options之間可以 "," 或是空白隔開,不過每一行最後必須以 ";" 結尾。
center 以 " 目前 " 的邊界做置中。
expand 將目前的左右邊界都取消。
box 加框。
doublebox 加雙框。
allbox 將每個項目都加框。
tab(x) 將 tab 字元設定為 x。
linesize n 將線寬設定為 n 點。
delim xy 將 xy 當做方程式的分隔符號。
--------------------------------------------------
格式
格式行會影響個別的行欄排列狀態。每行都有一個關鍵字元代表表格中的一欄。每欄的項目要以空白隔開,而整個格式要以 "." 結尾。每一行格式對應到表格中的一行。只有最後 一行是對應到下一個 .T&(若有的話)之前的所有行。
關鍵字元
c 置中。
l 靠左對齊。
r 靠右對齊。
n 將數字項目對齊。
a 將字母子欄對齊。
s 將前一欄和這一欄做水平合併。
^ 將前一行和這一行的同一欄合併。
關鍵字格式
下列符號必須加在關鍵字元之後:
b 粗體。
i 斜體。
fx x 字型。
pn 點大小。
vn 垂直行距,單位為點。僅可用於文字區塊。
t 將垂直合併的欄位從上面開始排列。
e 等寬度欄位。
w(n) 最小欄寬。也可用於文字區塊。n 可以是任何 troff 所接受的單位。
n 欄間隔,以 en 為單位。預設為 3。
| 將欄以單垂直線分開。用於關鍵字元之間。
|| 將欄以雙垂直線分開。用於關鍵字元 之間。
- 將行以單水平線分開。代替關鍵字元。
= 將行以雙水平線分開。代替關鍵字元。
資料格式
資料的部份包括了檔頭和表格內文兩部份。每個表格 ? 的項目都要用 tab 來隔開。
.xx 可用 Troff 的 request,如 .sp n、.na 等等。
\ 放在一行的最後時,表示將下一行和這一行視為同一行(隱藏換行)。
\^ 將上一行的項目跨到本行來。然後置中對齊。
_ 或 = 行中只有這兩個字元時,畫一條單線 (或雙線)橫過整個表格寬。
\$_ 或 \$= 畫一條同欄寬的單線(或雙線)。
\_ 畫一條同欄內容寬度的單線。
\Rx 將 x 印成和欄內容的寬度一樣。
...[tab]T{ 將文字區塊當做表格的項目。必須放在一行的最後面。若輸入的資料超出一行的長度,或是輸出時會超過一行的長 度時,就必須使用這種格式。
...T}[tab] 文字區塊結尾,必須放在一行的開 頭。
Tbl 範例
輸入:
<<<<<< code >>>>>>
輸出:
<<<<<< table >>>>>>>>>>>
Eqn
Eqn 是用來列印數學方程式的前置處理器。若要使用 nroff,則必須用 neqn。Eqn 的指令列格式如下:
/usr/ucb/eqn [options] [files]
options:
-dxy 用 x 和 y 當做開始和結尾的分隔字元 ; 和使用 delimxy 一樣。
-fn 將字型設定為 n; 和使用 gfont 一樣。
-pn 將上標與下標字縮小 n 點。若不指定 -p,則預設縮小 3 點。
-sn 將點大小縮小 n 點,和 gsize 一樣。
-Tdev 將輸出針對 dev 裝置格式化。預設值由 TYPESETTER 環境變數指定。neqn 無此選項。
------------------------------------
Eqn 巨集
.EQ 方程式開始。
.EN 方程式結尾。
用 checkeq 指令來檢查是否有不成對的巨集。
數學符號
下列的符號名稱會以右欄的符號輸出。
符號 輸出 符號 輸出
<<<<<<<< table code >>>>>>>>>
數學文字
數字,大小括號,標點符號和下列的文字會以 Roman 字型印出:
<<<<<<< code >>>>>>>>>
希臘字母
希臘字母可以大寫或小寫印出。要印出希臘字母,只要打入其名稱即可。有些大寫的希臘字母可以直接用英文大寫來代替,所以不在此支援(如 大寫的 alpha 為 A、大寫的 beta 為 B)。
符號 輸出 符號 輸出
<<<<<<< code >>>>>>>>>
特殊上下標號
Eqn 會將下列的特殊標號自動放置在字母上方正確的位置。bar 和 under 會依照所需來延伸。
符號 輸出
<<<<<<< code >>>>>>>>>
---------------------------------------------------
Eqn 所使用的關鍵字元
除了以上的一些符號,eqn 還可以使用下列的關鍵字元:
above 將矩陣的列分開。
back n 向左移動 n 公釐。
bold 改成粗體。
ccol 將矩陣的列置中對齊。
cpile 將列向量中的元素置中對齊。
define 將常用的字串取別名。
delim xy 定義方程式左右的分隔字元為 x 和 y。用 delim off 來關掉分隔字元。
down n 向下移動 n 公釐。
fat 將目前的字體加寬加粗。
font x 將字型換成 x,x 可為單字元字型名稱或是字型編號。
from 定義下界。
fwd n 向右 n 公釐。
gfont x 設定所有方程式所用的字型。
gsize n 設定所有方程式所用的大小。
italic 改為斜體。
lcol 將矩陣的列元素向左對齊。
left 印出大型括號的左邊。
lineup 將不同行中的方程式標記對齊。
lpile 將列向量中的元素靠左對齊。
mark 將方程式中的某個位置予以標記,和 lineup 合 用。
matrix 建立矩陣。
ndefine 建立一個只有在 neqn 下有效的定義。
over 分數。
pile 建立列向量,每個元素都置中對齊。
rcol 將矩陣的列靠右對齊。
right 印出大型括號的右邊。
roman 改成 Roman 字型。
rpile 將列向量的元素靠右對齊。
size n 將字型大小改為 n。
sqrt 畫根號。
sub 下標開始。
sup 上標開始。
tdefine 建立僅用於 eqn 的定義。
to 定義上界。
up n 向上移動 n 公釐。
~ 輸出時強迫輸出空白。
^ 輸出時強破輸出空白,但大小為 ~ 者的一半。
{} 強迫 eqn 將某元素當成單位。
'...' 引號內的文字 eqn 將不予以處理。
優先順序
若不使用括號,則 eqn 將照下表的優先順序進行處理,由左向右由上向 下:
<<<<<<<< table code >>>>>>>>>>>>>>>
下列向左結合
over sqrt left right
其他向右結合
Eqn 範例:
輸入:
<<<<<<< code >>>>>>>>>
輸出:
<<<<<<<<< 方程 式 >>>>>>>>>>>>>>
輸入:
<<<<<<< code >>>>>>>>>
輸出:
<<<<<<<<<<<<<< 方程 式 >>>>>>>>>>>>>>>>
Pic
Pic 可以用來畫簡單的流程圖和簡單圖形。Pic 可用很多種不同的方法畫同一個圖形,因為有許多 種不同的寫法,還加上了英文的敘述。所以畫一條線,不只可以指定起點,長度和角度,也可以簡單地說 "from there to there"。
Pic 的指令行形式如下:
/usr/ucb/pic [files]
Pic 的敘述行可以換行結束,或是以 ";" 結尾。若要跨行,則在第一行最後要加上 "\" 符號。一行的開頭若是 "#' 符號,則為註解。
Pic 巨集
.PS [h[w]] Pic 敘述開始。若有 h 和 w,則表示該圖形的高和寬 ; 最後的圖形會依照這個範圍來放大縮小。
.PS < file 將 file 的內容讀到目前行內。
.PE pic 敘述結尾。
.PF 結束 pic 敘述,並回到前一個 PS 之前的垂直位置。
.xx Troff request(或巨集)。
----------------------------------------
宣告
pic 敘述開始之前,可以宣告新的單位,或是宣告一些變數。Pic 會假設所使用的單位為 1:1,單位為吋。不過也可以用下列指令指定新的單位大 小為 1/n 吋:
scale = n
pic 所定義的變數所代表的意義即為數字,比如下列指 令:
line right n
可以在檔案的一開頭定義
a = n
然後寫成:
line right a
----------------------------------------
基本繪圖動作
pic 可使用一些基本的幾何繪圖指令。下列為所使用的指 令:
<<<<<<>>>>>>>> 語法 繪圖指令後可加上一些選項。選項稍後解說。 arc [cw] [options] ["text"] 畫一個弧(預設為 1/4 個圓)。cw 表示為順時針方向,預設為逆時針方向。 arrow [options] ["text"] 畫一個箭號。和 line -> 大致上是一樣的。 box [options] ["text"] 畫一個四方框。 circle [options] ["text"] 畫圓。 ellipse [options] ["text"] 畫橢圓。 line [options] ["text"] 畫線。 move [options] ["text"] 移動圖中的某個位置,就如同一條隱形線。 spline [options] ["text"] 可由 then 選項畫出一條圓滑的曲線。 "text" 以目前位置置中對齊的文字。 ---------------------------------------- Options 下列選項以功能區分。at、with、from 指定的是點。點座標可以以垂直座標系來定位,或 是以相對於前一個物體的位置來定位。 right [n] 繪圖指令的方向。預設為前一個描述 所指定的方向。若要進行。 left [n] 對角線方向的動作,則可在選項中指 定兩個方向。每個方向後都。 up [n] 可以加上其繪製的長度 n。 down [n] rad n 以 n 為角度(弧度)或是直徑繪圖。 diam n ht n 用 n 為高或寬繪圖。對箭號,直線或是 spline 來說,ht 和 wid 指定的是 wid n 箭頭的寬度。 same 直接用上一個繪圖動作的參數。 at point 將物體置中於點 point 處。 with .position at point 將繪圖物體的位置(position)放在 point 之處。 from point1 to point2 從點 1 畫到點 2。 -> 向右畫箭號。 <- 向左畫箭號。 <-> 畫雙箭號。 chop n m 從開頭去掉 n,從結尾去掉 m。若只指定一個參數,則會從頭尾各去掉同一長度。 dotted 將線的形式設定為虛線,以點的形式 或以短線形式或是隱形。隱形線在。 dashed 輸出中依然佔空間。預設為實心線。 invis then ... 將繪圖方向改為另一方向。只可用於線、spline、移動和箭號。可在任何文字之前或之後使用。 ---------------------------------------- 文字 文字必須放在引號內。若要斷行,則將文字放在不同的引號內。文字預設以置中對齊方式印 出,下列參數則可改變對齊方式: ljust 垂直置中,水平向左。 rjust 垂直置中,水平向右。 above 垂直偏上。 below 垂直偏下。 ---------------------------------------- 物件區塊 一次可使用多個繪圖指令來繪製一個較複雜的圖形(如國旗)。若用區塊括起來,則這些多個指令就會被當成單一物件來處理: Object: [ description . . . ] 中括號是用來當分隔字元的。請注意 object 的第一個字母需大寫。 ---------------------------------------- 巨集 可以在 pic 內定義巨集來處理重複的動作。語法如下: define sequence % description . . . % 這裡的分隔字元是 "%",不過也可以用任何不在 description 內的字元來當作分隔。 巨集可以使用參數,由 $1 到 $9。以下列方式執行巨集: sequence (value1, value2, ...) ---------------------------------------- 定位 pic 敘述一開始時,若不加以指定,則開始座標為(0,0)。隨著各物體放到前一個物體的上方和左方,(0,0)這個點也一直會往下往右跑。 最後所有的點都會轉換成 x,y 座標。然後就可以用加減座標的方式取用畫面中的 每一點。比如: 2nd ellipse - (3,1) 也可以在物體後面加上 .x 或是 .y 來取用該物體的 x 或是 y 座標。比如: last box.x 就是指上一個畫的框的 x 座標。還有其他取用物體的方式: .x 物體中心點的 x 座標。 .y 物體中心點的 y 座標。 .ht 物體高。 .wid 物體寬。 .rad 物體半徑。 除非指定位置,不然下一個物體會從上一個物體結束的地方開始繪圖。不過,若繪圖指令用大括 號括起來,則繪製完成後會回到第一個括號開始之前的位置。 物體之間的定位 若要參考到前幾個物體,則必需使用其正確名稱。這可以由下列方式進行: 1. 依順序指定物體 1st box 3rd box last box 2nd last box 2. 在定義物體時給定一個名稱。比如: Line1: line 1.5 right from last box.sw 要描述兩個物體間的某個點,或是某個物體內的兩個點,可用下列方式: fraction of the way between first.position and second.position 可簡寫成: fraction
沒有留言:
張貼留言