-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmanual-noie.htm
1383 lines (1304 loc) · 50.4 KB
/
manual-noie.htm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-tw" lang="zh-tw" dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>Text Markup Processor 使用手冊</title>
<style type="text/css">
.comment {
background: #eee;
border-color: #888;
border-style: dotted !important;
}
.editor {
background: #fdd;
border-color: red;
color: red;
}
.figure {
border-color: #cef;
background: #eff;
}
.footnote {
clear: right;
float: right;
width: 25em;
font-size: 0.8em;
margin: 1em;
padding: 2em;
}
.redmark {
color: #f00;
font-weight: bold;
}
a:link, a:visited {
color: #36a;
text-decoration: none;
cursor: hand;
}
a:active, a:hover {
color: #73b;
text-decoration: underline;
}
blockquote {
border: 1px solid #88f;
padding: 6px;
}
body:lang(zh-tw) {font-family: 'Georgia', '新細明體', 'MingLiU', serif;}
body:lang(ja) {font-family: 'Georgia', 'MS P明朝', 'MS PMincho', serif;}
body {
font-family: 'Georgia'; /* IE does not support :lang() */
background: #ffc;
margin: 0;
padding: 0;
}
code {
font-family: 'Andale Mono', 'Courier New', monospace;
font-size: 11pt;
color: #00a;
}
div.body {
background: #fff;
border-left: 1px solid #aaa;
margin: 0 0 0 15px;
padding: 10px 10px 10px 20px;
text-autospace: ideograph-alpha;
}
div.boxHead, table th.head, table caption {
background: #cef;
border-bottom: 1px solid #449;
color: #026;
padding: 6px 6px;
}
div.boxHead {
clear: right;
margin-top: 1em;
}
div.box, pre {
border-width: 1px;
border-style: solid;
overflow: auto;
padding: 10px;
height: auto !important;
height: 1%; /* for IE floating bug */
}
div.footnote span.fnitem {
color: red;
font-weight: bold;
font-family: Arial;
}
div.footnote p {
margin: 0.5em 0;
}
div.footer {
clear: right;
margin: 0px;
padding: 4px;
text-align: right;
color: #555;
border-top: 3px double #aaa;
background: #ddd;
font-size: 0.8em;
font-family: "Georgia";
}
div.listItem {
border-bottom: 1px dashed #ccc;
padding-top: 0.3em;
padding-bottom: 0.3em;
}
div.metaInfo {
padding: 10px;
border-bottom: 1px solid #aaa;
border-top: 1px solid #aaa;
background: #ddd;
}
div.pageSeparator {
border-top: 1px solid #ddd;
margin: 1em 0 1em 0;
}
div.srcPage {
background: #dff;
border: 1px solid #479;
color: #479;
font-family: 'Trebuchet MS';
font-size: 0.8em;
margin-left: -30px;
padding: 1px;
text-align: center;
width: 60px;
}
dl {
margin-left: 20px;
}
dl dt {
font-weight: bold;
}
h1,h2,h3,h4,h5,h6 {
clear: right;
font-family: 'Trebuchet MS'; /* IE does not support :lang() */
}
h1:lang(zh-tw),
h2:lang(zh-tw),
h3:lang(zh-tw),
h4:lang(zh-tw),
h5:lang(zh-tw),
h6:lang(zh-tw) {
font-family: 'Trebuchet MS', '標楷體', 'DFKai-SB';
}
h1:lang(ja),
h2:lang(ja),
h3:lang(ja),
h4:lang(ja),
h5:lang(ja),
h6:lang(ja) {
font-family: 'Trebuchet MS', 'MS Pゴシック', 'MS PGothic';
}
h1 {
border-bottom: 2px solid #00a;
border-left: 10px solid #00a;
font-size: 2.4em;
margin-top: 1.5em;
margin-right: -10px;
margin-left: -30px;
padding: 3px 16px;
}
h2 {
border-bottom: 3px double #00f;
font-size: 2em;
margin-top: 1.3em;
margin-left: -20px;
margin-right: -10px;
padding: 3px 8px;
}
h3 {
border-bottom: 1px solid #55f;
border-left: 5px solid #55f;
font-size: 1.7em;
margin-top: 1.2em;
margin-left: -12px;
padding: 3px 10px;
}
h4 {
border-bottom: 1px dashed #55f;
font-size: 1.5em;
margin-left: -4px;
padding-left: 6px;
}
h5 {
border-left: 1em solid #55f;
padding-left: 0.4em;
font-size: 1.3em;
}
h6 {
border-left: 1em solid #55f;
font-size: 1.1em;
font-weight: normal;
padding-left: 0.5em;
}
li {
/* see div.listItem definition. F**king IE CSS support! */
}
p {
padding: 0;
text-indent: 1em;
}
li p {
text-indent: 0;
}
#metaInfo li {
padding: 0;
border: none;
}
pre {
background: #eef;
border-color: #ccf;
clear: right;
margin: 0;
/* see div.box */
}
span.control {
background: #fec;
border: 1px solid #fa4;
color: #d82;
cursor: hand;
font-family: 'Arial';
font-size: 0.7em;
margin-left: 15px;
padding: 3px;
text-decoration: underline;
}
span.headAnchor {
color: #722;
padding-right: 0.5em;
}
span.fnanchor {
font-family: Arial;
font-size: 0.9em;
vertical-align: super;
color: red;
}
span.keyboard {
background-color: #eee;
border: 1px solid;
border-color: #ccc #555 #555 #ccc;
font-family: 'Arial';
padding: 2px;
}
table {
border-left: 1px solid #eee;
}
table caption {
text-align: left;
margin: 0;
}
table tr {
background: #fff;
}
table td, table th {
padding: 8px 10px;
vertical-align: top;
border-bottom: 1px solid #999;
border-right: 1px solid #999;
}
table th {
font-weight: bold;
}
table th.col {
background: #777;
color: #fff;
}
table th.row {
background: #eee;
text-align: left;
}
table th.head {
text-align: left;
font-weight: normal;
}
@media print {
div.body {
margin: 0 0 0 10px;
border: 0;
}
div.metaInfo {
display: none;
}
div.srcPage {
margin-left: -25px;
width: 1.5cm;
padding: 1mm;
text-align: center;
border: 1px solid #888888;
}
h1, h2, h3, h4, h5, h6, div.boxHead, div.srcPage {
page-break-after: avoid;
}
div.footer {
text-align: center;
}
}
</style>
</head>
<body>
<script type="text/javascript">
function toggle() {
var obj = document.getElementById("metaInfo");
obj.style.display = (obj.style.display == 'none') ? 'block' : 'none';
}
</script>
<div class="metaInfo">
<span class="control" onclick="toggle();" style="cursor: hand;">Show/Hide Metadata</span>
<div id="metaInfo" style="display: none;">
<dl><dt>Page list</dt><dd>
<a href="#page0">p.0</a> /
<a href="#pagei">p.i</a> /
<a href="#pagexv">p.xv</a> /
<a href="#page1">p.1</a> /
<a href="#page23">p.23</a> /
<a href="#page456">p.456</a> /
<a href="#page7890">p.7890</a> /
<a href="#page5">p.5</a> /
<a href="#page6">p.6</a> /
<a href="#page7">p.7</a> /
<a href="#page8">p.8</a> /
<a href="#page9">p.9</a>
</dd></dl>
<dl><dt>Table of Contents</dt><dd>
<ul><li style="margin: 0;"><a href="#header1">1. Text Markup Processor 簡介</a></li>
<ul>
<li style="margin: 0;"><a href="#header2">1.1. 輸出入格式</a></li>
<li style="margin: 0;"><a href="#header3">1.2. 執行方式</a></li>
<li style="margin: 0;"><a href="#header4">1.3. 主要語法</a></li>
<ul>
<li style="margin: 0;"><a href="#header5">1.3.1. 需要跳脫 (escape) 的部分</a></li>
<ul>
<li style="margin: 0;"><a href="#header6">1.3.1.1. 提早結束標籤判斷範圍</a></li>
<li style="margin: 0;"><a href="#header7">1.3.1.2. 省略方括弧</a></li>
</ul>
<li style="margin: 0;"><a href="#header8">1.3.2. 內建標籤</a></li>
<ul>
<li style="margin: 0;"><a href="#header9">1.3.2.1. \include</a></li>
<li style="margin: 0;"><a href="#header10">1.3.2.2. \use</a></li>
</ul>
</ul>
</ul>
<li style="margin: 0;"><a href="#header11">2. Translator Markup Pack</a></li>
<ul>
<li style="margin: 0;"><a href="#header12">2.1. 內文分段</a></li>
<li style="margin: 0;"><a href="#header13">2.2. 標籤說明</a></li>
<ul>
<li style="margin: 0;"><a href="#header14">2.2.1. 頁面選項設定</a></li>
<ul>
<li style="margin: 0;"><a href="#header15">2.2.1.1. 選擇語系</a></li>
<li style="margin: 0;"><a href="#header16">2.2.1.2. 文件標題</a></li>
<li style="margin: 0;"><a href="#header17">2.2.1.3. 內容組織功能</a></li>
<li style="margin: 0;"><a href="#header18">2.2.1.4. 專案</a></li>
</ul>
<li style="margin: 0;"><a href="#header19">2.2.2. 標題</a></li>
<ul>
<li style="margin: 0;"><a href="#header20">標題 4</a></li>
<ul>
<li style="margin: 0;"><a href="#header21">標題 5</a></li>
<ul>
<li style="margin: 0;"><a href="#header22">標題 6</a></li>
</ul>
</ul>
</ul>
<li style="margin: 0;"><a href="#header23">2.2.3. 頁數編碼</a></li>
<li style="margin: 0;"><a href="#header24">2.2.4. 連結</a></li>
<ul>
<li style="margin: 0;"><a href="#header25">2.2.4.1. 專案檔案的處理順序</a></li>
</ul>
<li style="margin: 0;"><a href="#header26">2.2.5. HTML 特殊字元實體</a></li>
<li style="margin: 0;"><a href="#header27">2.2.6. 簡單的標記</a></li>
<li style="margin: 0;"><a href="#header28">2.2.7. 表格</a></li>
<ul>
<li style="margin: 0;"><a href="#header29">2.2.7.1. 格式化字串</a></li>
<ul>
<li style="margin: 0;"><a href="#header30">格式化字串,舉例</a></li>
<li style="margin: 0;"><a href="#header31">實際表格舉例</a></li>
</ul>
</ul>
<li style="margin: 0;"><a href="#header32">2.2.8. 清單</a></li>
<ul>
<li style="margin: 0;"><a href="#header33">2.2.8.1. 一般清單</a></li>
<li style="margin: 0;"><a href="#header34">2.2.8.2. 定義清單</a></li>
</ul>
<li style="margin: 0;"><a href="#header35">2.2.9. 方塊</a></li>
<ul>
<li style="margin: 0;"><a href="#header36">2.2.9.1. 方塊標題與方塊的組合</a></li>
<li style="margin: 0;"><a href="#header37">2.2.9.2. 程式碼方塊</a></li>
<li style="margin: 0;"><a href="#header38">2.2.9.3. 各種方塊的應用示範</a></li>
</ul>
<li style="margin: 0;"><a href="#header39">2.2.10. 註腳</a></li>
<li style="margin: 0;"><a href="#header40">2.2.11. TODO: 自動索引</a></li>
<li style="margin: 0;"><a href="#header41">2.2.12. TODO: 內嵌數學式</a></li>
</ul>
</ul>
</ul>
</dd></dl>
</div>
</div>
<div class="body"><div id="page0" class="srcPage">p.0</div>
<h1 id="header1"><span class="headAnchor">1.</span>Text Markup Processor 簡介</h1>
<p>
Text Markup Processor (以下簡稱 tmp) 是個以 <a href="http://www.python.org/">Python</a> 撰寫的轉譯器架構。
</p>
<p>
透過 Markup Pack (以下簡稱 pack,同樣以 Python 撰寫) 的協助,它能將純文字輸入檔轉為各式各樣的輸出內容。
</p>
<p>
目前唯一隨附的 pack 是 <code>translator</code>,它能處理最初開發這套工具想要解決的最主要問題 — 以簡潔的語法,使用 HTML 格式輸出漂亮的中間翻譯稿件。
</p>
<h2 id="header2"><span class="headAnchor">1.1.</span>輸出入格式</h2>
<p>
輸出檔隨 pack 的設計而有所不同,不過輸入檔一概是 UTF-8 編碼的純文字檔案;檔名可任意選用,但建議以 <code>.tm</code> 作為原始檔附檔名。
</p>
<h2 id="header3"><span class="headAnchor">1.2.</span>執行方式</h2>
<div class="boxHead">語法</div>
<pre>
<code>tmp <b><輸入檔名></b> [<b><輸入檔名></b>, ...]</code>
</pre>
<div class="boxHead">範例</div>
<pre>
<code>tmp manual.tm
tmp toc.tm ch1.tm ch2.tm
tmp *.tm</code>
</pre>
<p>
第一行是將 <code>manual.tm</code> 轉換成 <code>manual.htm</code>,也就是輸出本說明檔時必須執行的指令。
</p>
<p>
第二行則會將三個指定的檔案一次轉換好,分別存成不同的 <code>.htm</code> 檔。
</p>
<p>
第三行則會轉換現行目錄之內,所有副檔名是 <code>.tm</code> 的檔案。
</p>
<p>
轉換的過程中,每處理好一個檔案就會顯示對應的檔名;處理檔案的時候如果遇到錯誤的話,則會顯示第一個發生錯誤的位置,並且繼續處理下一個檔案。目前的架構設計沒有辦法一次抓出檔案之內所有可能錯誤的地方
</p>
<h2 id="header4"><span class="headAnchor">1.3.</span>主要語法</h2>
<p>
TMP 的語法標籤只有以下兩種主要格式:
</p>
<pre>
<code>\標籤<i>(參數1,參數2,...)</i><b>[</b>內容<b>]</b>
\標籤<i>(參數1,參數2,...)</i><b>[[</b>內容<b>]]</b></code>
</pre>
<p>
其中只有 <code>\標籤</code> 的部分是必要的,參數以及內容都只有在需要用到的時候才需要附上。
</p>
<p>
第二種語法 (雙方括號) 的內容之中,如果出現單獨一個
</p>
<h3 id="header5"><span class="headAnchor">1.3.1.</span>需要跳脫 (escape) 的部分</h3>
<p>
tmp 原始碼內需要進行跳脫動作的,只有下面幾個地方:
</p>
<ul>
<li><div class="listItem">參數列部分</div></li>
<ul>
<li><div class="listItem">如果參數內容用到 <code>,</code> (逗號)、<code>)</code> (右圓括號)、<code>\</code> (反斜線) 這三個符號的時候,前面必須加上 <code>\</code>。</div></li>
</ul>
<li><div class="listItem">單方括號內容部分 (放在 <b>[</b> ... <b>]</b> 之內的部分)</div></li>
<ul>
<li><div class="listItem">內容用到 <code>\</code> 符號的話,前面必須再加上一個 <code>\</code> 符號 (避免被解讀成標籤呼叫)。</div></li>
<li><div class="listItem">如果內容第一個字是 <code>[</code> 的話,可以在前面加上空白或是 <code>\</code> 符號 (避免被解讀成雙方括號內容)。</div></li>
<li><div class="listItem">內容用到 <code>]</code> (右方括號) 的時候,前面必須加上 <code>\</code> 符號 (避免提早結束作用範圍)。</div></li>
</ul>
<li><div class="listItem">雙方括號內容部分 (放在 <b>[[</b> ... <b>]]</b> 之內的部分)</div></li>
<ul>
<li><div class="listItem">內容用到 <code>\</code> 符號的話,前面必須再加上一個 <code>\</code> 符號 (避免被解讀成標籤呼叫)。</div></li>
<li><div class="listItem">內容出現連續兩個 <code>]</code> 符號 (也就是 <code>]]</code>) 的時候,必須在前面加上一個 <code>\</code> 符號 (避免提早結束作用範圍)。</div></li>
</ul>
<li><div class="listItem">標籤部分</div></li>
<ul>
<li><div class="listItem">如果往後緊接著 <code>(</code> 或是 <code>[</code> 符號,卻又不想讓它被解釋成參數列、內容區的話,同樣在前面加上 <code>\</code> 即可。</div></li>
</ul>
</ul>
<p>
簡單來說,就是內容使用到語法內的特殊符號、有可能造成疑義誤判的情形之下,就需要在前面加上 <code>\</code> 符號進行跳脫動作。乍看之下有些複雜,不過只需要選對編輯器 (比如說用 <a href="http://www.vim.org/">vim</a> 配上語法彩色檔),進行跳脫就會變得十分簡易 — 因為會造成誤判的地方,原始碼就會顯示成預期之外的顏色;適當地補上 <code>\</code> 符號之後,原始碼的色彩才會恢復正常。
</p>
<p>
因此雙方括號很適合在標註程式碼之類,內含不少方括號的內容時使用,如此只需跳脫連續的右方括號即可,不需要為每個方括號加上 <code>\</code>。
</p>
<h4 id="header6"><span class="headAnchor">1.3.1.1.</span>提早結束標籤判斷範圍</h4>
<p>
舉例來說,假設您想以 <code>translator</code> 這套內附的 markup pack 排出這段文字:
</p>
<div class="box ">
<test></div>
<p>
由於 <code>translator</code> 允許在內容之中使用 XHTML 標籤,因此不能直接依原樣輸入左右尖括號,而必須以對應的 <code>\lt</code>、<code>\gt</code> 替代才行。不過,直接寫成 <code>\lttest\gt</code> 的話,前段會被當成單獨一個標籤解釋;單純以空白隔開、輸入成 <code>\lt test \gt</code> 的話,又會在內容之中插入額外的空白:
</p>
<div class="box ">
< test ></div>
<p>
遇到這種情形的時候,有兩種方法可以解決: 使用空白參數或是空白內容。也就是說,寫成下面這兩行的形式,都可以達成預期的效果:
</p>
<pre>
<code>\lt[]test\gt
\lt()test\gt</code>
</pre>
<p>
兩種寫法的效果完全相同。差異之處只有第一行輸入的時候不必按 <span class="keyboard">SHIFT</span> 而已 ... (所以有人真的會想用第二種寫法嗎)
</p>
<h4 id="header7"><span class="headAnchor">1.3.1.2.</span>省略方括弧</h4>
<p>
寫 HTML 的時候,常常會需要用好幾組標籤同時修飾一段內容,比如說這樣:
</p>
<div class="box ">
<b><i><u>some fancy styles</u></i></b>
</div>
<p>
在以往這得用上三層巢狀標籤才有辦法解決!就算是拿 <code>translator</code> 提供的標籤來寫,堆起來之後也可能會變成這樣:
</p>
<pre>
<code>\b[\i[\u[some fancy styles]]]</code>
</pre>
<p>
為了簡化這類內容的輸入動作,因此在這種特殊的情形下 — 也就是<b>標籤作用範圍之內剛好只有一個標籤</b>的狀況下,允許省略開頭、結尾的方括號,此時標籤會直接以下一個標籤的全部內容當成作用範圍!
</p>
<p>
因此現在可以簡寫成這樣,得到相同的效果:
</p>
<pre>
<code>\b\i\u[some fancy styles]</code>
</pre>
<p>
當然,這只對<b>具備作用範圍</b>的標籤才有作用;直接輸出特殊符號、文字的標籤 (比如說 <code>translator</code> 的 <code>\euro</code> 標籤) 不需要也不受這項功能的影響,後面可以直接放上其他標籤。
</p>
<p>
如果因為某些原因,您不希望連寫在一起的幾個標籤被解釋成巢狀關係、而這些標籤又不具備任何內容的話,您可依樣畫葫蘆用前面提過的標籤範圍結束法把標籤的處理範圍打斷:
</p>
<pre>
<code>\b[]\i\u[some fancy styles]</code>
</pre>
<p>
處理之後會變成下面的結果:
</p>
<div class="box ">
<b></b><i><u>some fancy styles</u></i>
</div>
<p>
粗體不見了!但是檢視原始碼會發現,原來 <code>\b</code> 標籤裡面沒有任何內容、跑到前面去了 ... 這樣到底有什麼意義呢?
</p>
<h3 id="header8"><span class="headAnchor">1.3.2.</span>內建標籤</h3>
<p>
tmp 本身內建兩個標籤,其餘功能均由針對特定問題撰寫的 pack 負責提供。
</p>
<h4 id="header9"><span class="headAnchor">1.3.2.1.</span>\include</h4>
<div class="boxHead">語法</div>
<pre>
<code>\include(<b><檔名></b>)</code>
</pre>
<p>
使用這個標籤,就像是以 <code><b><檔名></b></code> 檔案的內容替換掉這個標籤之後再進行處理一樣。您可使用這個標籤,在許多檔案之內共享一段經常用到,或是有需要同步變更、維持一致的內容。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\include(copyright.tm)</code>
</pre>
<h4 id="header10"><span class="headAnchor">1.3.2.2.</span>\use</h4>
<div class="boxHead">語法</div>
<pre>
<code>\use(<b><pack 名稱></b>)</code>
</pre>
<p>
此指令會載入指定名稱的 pack 以便應用其中提供的功能。大部分原始碼應該都會在檔案開頭以這個標籤載入某個 pack,之後再使用這個 pack 所提供的標籤繼續撰寫往後的內容。
</p>
<p>
您不能重複載入相同的 pack,此舉將會導致錯誤;但您的確可以載入複數 pack 並且交替使用其中的功能。pack 的搭配使用法則請參閱各個 pack 所提供的參考文件。
</p>
<h1 id="header11"><span class="headAnchor">2.</span>Translator Markup Pack</h1>
<p>
這個 markup pack 具備最基本的 XHTML 輔助製作功能,同時還提供一些產生書稿標示內容的特殊能力 — 因為最初的開發目標,就是讓本程式的作者能快速、簡易地排出自己希望的書稿樣式。
</p>
<p>
由於輸出格式採用 XHTML 的關係,標籤組織刻意設計地十分貼近 XHTML,只提供一層薄薄的包裝、並透過一些預設樣式表達到效果,可說是為了便利現在已在使用 XHTML 的人所設計的;如果您是這種人的話,可能會發現文稿架構非常、非常地眼熟。
</p>
<p>
使用 <code>translator</code> pack 的 tm 檔案典型架構如下 (直接取用本說明檔原始碼作為範例):
</p>
<pre>
<code>\use(translator)
\lang[zh-tw]
\title[Text Markup Processor 使用手冊]
\filetoc
\pagelist
\body[[
...
]]</code>
</pre>
<p>
首先取用 <code>translator</code> pack,接著指定文件的語系 (<code>\lang</code>)、標題 (<code>\title</code>),並且打開自動產生目錄 (<code>\filetoc</code>)、打開分頁模式產生頁面連結 (<code>\pagelist</code>) 等等功能;最後再以 <code>\body</code> 組織全篇頁面內容。
</p>
<p>
由於輸出格式是 XHTML,為了便利起見,除了在特別提及的幾個標籤範圍之內 (比如說 <code>\code</code>),其它地方都可以直接使用 XHTML 標籤;而大多數常用的標籤也都以 tmp 標籤的形式包裝提供 (如 <code>\br</code>、<code>\b</code>、<code>\lt</code> 等等),便於您快速輸入相關內容。
</p>
<h2 id="header12"><span class="headAnchor">2.1.</span>內文分段</h2>
<p>
在處理文字內容的時候,換行會被忽略,連續的兩行會被接在一起;空行則代表新段落開始。如此有助於原始碼整理。段落的開頭會自動縮排;如果您不希望段落縮排的話,您可以直接使用 <code>\p</code> 標記整個段落。
</p>
<p>
必須注意的是,為了不加入多餘的換行、段落,因此對於段落開頭、結尾處遇上標籤的情形會進行特殊處理。大部分情形下應會輸出與您預期相同的結果;如果遇上分段錯誤 (漏分段) 等等的情形,可嘗試在段落的開頭、結尾各加上一個空白再試試看。
</p>
<div class="boxHead">範例</div>
<pre>
<code>第一段
第二行
第二段
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
\p[
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落
]</code>
</pre>
<div class="boxHead">處理結果</div>
<div class="box ">
<p>
第一段第二行
</p>
<p>
第二段
</p>
<p>
很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段很長的一段
</p>
<p style="text-indent: 0;">
不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落不內縮的段落</p>
</div>
<h2 id="header13"><span class="headAnchor">2.2.</span>標籤說明</h2>
<h3 id="header14"><span class="headAnchor">2.2.1.</span>頁面選項設定</h3>
<h4 id="header15"><span class="headAnchor">2.2.1.1.</span>選擇語系</h4>
<p>
您必須使用 <code>\lang</code> 標籤指定文件所使用的語系。儘管檔案內容一定以 UTF-8 儲存,仍然需要設定正確的檔案語系,因為這會影響瀏覽器選用的預設字型、以及文字避頭尾原則等語系相關特性。如果沒有指定語系的話,就會在處理時產生錯誤訊息。
</p>
<p>
下面是幾個常用語系的設定:
</p>
<table cellspacing="0">
<caption>語系範例</caption>
<tr><th class="col">語系</th><th class="col">說明</th></tr>
<tr><th class="row">zh-tw</th><td>繁體中文</td></tr>
<tr><th class="row">zh-cn</th><td>簡體中文</td></tr>
<tr><th class="row">ja</th><td>日文</td></tr>
<tr><th class="row">en</th><td>英文</td></tr>
</table>
<div class="boxHead">範例</div>
<pre>
<code>\lang[zh-tw]</code>
</pre>
<h4 id="header16"><span class="headAnchor">2.2.1.2.</span>文件標題</h4>
<p>
您必須以 <code>\title</code> 標籤指定整份文件的標題。如果沒有指定標題的話,就會在處理時產生錯誤訊息。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\title[Text Markup Processor 使用手冊]</code>
</pre>
<h4 id="header17"><span class="headAnchor">2.2.1.3.</span>內容組織功能</h4>
<p>
<code>translator</code> 內建了一些自動組織內容的處理功能,預設不會開啟;若您想要使用這些功能的話,必須手動加上對應的標籤。
</p>
<ul>
<li><div class="listItem"><code>\filetoc</code>: 自動產生目錄 (→ 請參閱「標題」)</div></li>
<li><div class="listItem"><code>\pagelist</code>: 分頁模式 (→ 請參閱「頁數編碼」)</div></li>
</ul>
<h4 id="header18"><span class="headAnchor">2.2.1.4.</span>專案</h4>
<p>
您可使用 <code>\project</code> 標籤指定檔案所屬的專案,此時會在同一目錄下建立檔名是 <code><指定名稱>.tpd</code> 的專案資料檔。
</p>
<p>
專案資料檔內,會記錄專案內所有檔案的標題別名、頁碼、索引關鍵詞等資料,每次處理檔案時都會自動更新,便利您在檔案之間進行交叉索引、重複取用專有名詞解釋。詳情請參閱「<a href="#header19">標題</a>」以及「<a href="#header24">連結</a>」等段落。
</p>
<p>
專案之內的所有檔案必須位於相同目錄之內,此版本尚未支援專案目錄結構。
</p>
<h3 id="header19"><span class="headAnchor">2.2.2.</span>標題</h3>
<p>
標題是以 <code>\h1</code> 到 <code>\h6</code> 六種標籤加以定義的。如果您先前以 <code>\buildtoc</code> 打開目錄產生功能的話,頁首的 Metadata 資料區之內就會多出 <b>Table of Contents</b> 這個段落,而所有文內標題都會自動依照階層順序在此建立對應的連結,方便往後閱覽。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\h1[Translator Markup Pack]
\h2[標籤說明]
\h3[頁面選項設定]
\h4[標題 4]
\h5[標題 5]
\h6[標題 6]</code>
</pre>
<div class="boxHead">處理結果 (前三大標題的效果請直接參考前段內容)</div>
<h4 id="header20">標題 4</h4>
<h5 id="header21">標題 5</h5>
<h6 id="header22">標題 6</h6>
<p>
在啟動專案功能之後,您可為標題標籤加上參數設定別名,並且稍後在同一個專案之內的檔案裡面以 <code>\link</code> 連結回此一標題。
</p>
<p>
為標題加上的別名,會變色顯示在標題之前;您可利用這項特點,直接將標題的序號部分編為別名使用。
</p>
<pre>
<code>\h1(1.)[大標題一]
...
\link[=1.]</code>
</pre>
<p>
使用上的注意事項則請參照 <a href="#header24">連結</a> 一節所述。
</p>
<h3 id="header23"><span class="headAnchor">2.2.3.</span>頁數編碼</h3>
<p>
您可以在內容之中以 <code>\page</code> 標籤標示目前頁次,頁次會出現在左邊的黃色頁邊範圍之內。如果您在檔案開頭加上 <code>\pagelist</code> 標籤的話,還會自動在頁首建立 <b>Page Link</b> 區域並產生連往各頁開頭的連結,讓您能夠直接跳躍到指定的頁面。
</p>
<p>
如果在同一個 <code>\page</code> 標籤內以逗號列出許多個頁碼的話,即可連續列出這些頁碼,並且略去這些頁碼之間的頁面分隔線 (作者在遇到橫跨多頁的表格、操作步驟清單等內容的時候,不想把表格切斷,卻又想保留中途頁碼連結時常用)。
</p>
<p>
Page Link 位於頁首的 Metadata 資料區之內,您可點選黃色的 Show/Hide Metadata 標籤切換本區域顯示與否。
</p>
<p>
小技巧: 您隨時都能使用瀏覽器的 <span class="keyboard">Home</span> 鍵跳回頁首資料區。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\page[i]
\page[xv]
\page[1]
\page[23]
\page[456]
\page[7890]
\page[5,6,7,8,9]</code>
</pre>
<div class="boxHead">處理結果 (請看左邊)</div>
<div class="pageSeparator"></div>
<div id="pagei" class="srcPage">p.i</div>
<div class="pageSeparator"></div>
<div id="pagexv" class="srcPage">p.xv</div>
<div class="pageSeparator"></div>
<div id="page1" class="srcPage">p.1</div>
<div class="pageSeparator"></div>
<div id="page23" class="srcPage">p.23</div>
<div class="pageSeparator"></div>
<div id="page456" class="srcPage">p.456</div>
<div class="pageSeparator"></div>
<div id="page7890" class="srcPage">p.7890</div>
<div class="pageSeparator"></div>
<div id="page5" class="srcPage">p.5</div>
<div id="page6" class="srcPage" style="border-top: none;">p.6</div>
<div id="page7" class="srcPage" style="border-top: none;">p.7</div>
<div id="page8" class="srcPage" style="border-top: none;">p.8</div>
<div id="page9" class="srcPage" style="border-top: none;">p.9</div>
<h3 id="header24"><span class="headAnchor">2.2.4.</span>連結</h3>
<p>
連結功能由 <code>\link</code> 標籤提供。它的作用範圍即是要連結的網址,如果您希望自訂連結顯示文字的話,只要以參數的形式提供即可。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\link[http://www.google.com/], \link(Python 程式語言)[http://www.python.org/]</code>
</pre>
<div class="boxHead">處理結果</div>
<div class="box ">
<a href="http://www.google.com/">http://www.google.com/</a>, <a href="http://www.python.org/">Python 程式語言</a>
</div>
<p>
在啟動專案功能時,<code>\link</code> 標籤也能用來連結加了別名的標題;此時連結文字將自動取用對應別名的標題全文內容。連結標題別名的語法如下:
</p>
<pre>
<code>\link[=<b><標題別名></b>]</code>
</pre>
<p>
如果所指定的別名還不存在 (別名輸入錯誤;或者是別名所屬的檔案尚未處理,以致於別名尚未儲存至專案資料檔之內),就會在處理完成的檔案開頭顯示錯誤訊息,方便您進行除錯工作。
</p>
<div class="boxHead">範例</div>
<pre>
<code>\link[=2.2.5.]</code>
</pre>
<div class="boxHead">處理結果</div>
<div class="box ">
<a href="#header26">HTML 特殊字元實體</a>
</div>
<h4 id="header25"><span class="headAnchor">2.2.4.1.</span>專案檔案的處理順序</h4>
<p>
專案檔案的處理順序是有影響的。簡單來說,在使用 <code>\link</code> 標籤造出連結之前,必須先處理好連結目標所在的檔案,如此才能產生正確的連結內容;然而檔案之間的交互參照通常十分複雜,整理出適當的處理順序似乎不切實際。
</p>
<p>
其實有個簡單的做法,那就是<b>處理全部的檔案兩次</b> — 第一次處理將會造出完整的標題別名、所屬檔案表,第二次處理時則會正確完成所有的連結動作 (而那些真的錯誤的連結還是會留下警告訊息)。
</p>
<h3 id="header26"><span class="headAnchor">2.2.5.</span>HTML 特殊字元實體</h3>
<p>
<code>translator</code> 將 HTML 常用的特殊字元實體改以標籤的形式提供,便於使用。
</p>
<table cellspacing="0">
<caption>HTML 特殊字元實體</caption>
<tr>
<th class="col">標籤</th>
<th class="col">名稱</th>
<th class="col">字元外觀</th>
<th class="col">使用例</th>
<th class="col">處理結果</th>
</tr>
<tr>
<th class="row"><b><code>\br</code></b></th>
<td>換行</td>
<td> </td>
<td><code>A\br[]B</code></td>
<td>A<br />B</td>
</tr>
<tr>
<th class="row"><b><code>\cent</code></b></th>
<td>分</td>
<td>¢</td>
<td><code>5\cent</code></td>
<td>5¢</td>
</tr>
<tr>
<th class="row"><b><code>\copy</code></b></th>
<td>版權</td>
<td>©</td>
<td><code>\copy 2000 SBT</code></td>
<td>© 2000 SBT</td>
</tr>
<tr>
<th class="row"><b><code>\deg</code></b></th>
<td>角度量</td>
<td>°</td>
<td><code>90\deg</code></td>
<td>90°</td>
</tr>
<tr>
<th class="row"><b><code>\euro</code></b></th>
<td>歐元符號</td>
<td>€</td>
<td><code>\euro 50</code></td>
<td>€ 50</td>
</tr>
<tr>
<th class="row"><b><code>\lt</code></b>, <b><code>\gt</code></b></th>
<td>大於、小於符號</td>
<td>< ></td>
<td><code>\lt[]html\gt</code></td>
<td><html></td>
</tr>
<tr>
<th class="row"><b><code>\mdash</code></b>, <b><code>\dash</code></b></th>
<td>長破折號</td>
<td>—</td>
<td><code>It's a test \mdash yeah, really a test.</code></td>
<td>It's a test — yeah, really a test.</td>
</tr>
<tr>
<th class="row"><b><code>\ndash</code></b></th>
<td>短破折號</td>
<td>–</td>
<td><code>I'm at 177\ndash[]1</code></td>
<td>I'm at 177–1</td>
</tr>
<tr>
<th class="row"><b><code>\permil</code></b></th>
<td>千分比</td>
<td>‰</td>
<td><code>25\permil</code></td>
<td>25‰</td>
</tr>
<tr>
<th class="row"><b><code>\plusmn</code></b></th>
<td>正負</td>
<td>±</td>
<td><code>\plusmn[]12V</code></td>
<td>±12V</td>
</tr>
<tr>
<th class="row"><b><code>\pound</code></b></th>
<td>英鎊符號</td>
<td>£</td>
<td><code>\pound[]500</code></td>
<td>£500</td>
</tr>
<tr>
<th class="row"><b><code>\reg</code></b></th>
<td>註冊商標</td>
<td>®</td>
<td><code>Linux\reg</code></td>
<td>Linux®</td>
</tr>
<tr>
<th class="row"><b><code>\yen</code></b></th>
<td>日圓符號</td>
<td>¥</td>
<td><code>\yen[]7,140</code></td>
<td>¥7,140</td>
</tr>
</table>
<h3 id="header27"><span class="headAnchor">2.2.6.</span>簡單的標記</h3>
<p>
以下是一些簡單的標記。「簡單」的意思是指,它們只改變一小段文字的外觀,使用時不進行額外的特殊處理、也不須想太多對版面佈局產生的衝擊。它們大部分也都與 HTML 直接對應。
</p>
<table cellspacing="0">
<caption>簡單的標記</caption>
<tr>
<th class="col">標籤</th>
<th class="col">名稱</th>
<th class="col">使用例</th>
<th class="col">處理結果</th>
</tr>
<tr>
<th style="text-align: left;" class="row"><b><code>\b</code></b></th>
<td>粗體</td>
<td><code>\b[bold]</code></td>
<td><b>bold</b></td>
</tr>
<tr>
<th style="text-align: left;" class="row"><b><code>\c</code></b></th>
<td>定寬 (程式碼)<br />範圍內的 HTML 會被自動跳脫</td>
<td><code>\c[<html><title>Hello!</title></html>]</code></td>
<td><code><html><title>Hello!</title></html></code></td>
</tr>
<tr>
<th style="text-align: left;" class="row"><b><code>\i</code></b></th>
<td>斜體</td>
<td><code>\i[italic]</code></td>
<td><i>italic</i></td>
</tr>
<tr>
<th style="text-align: left;" class="row"><b><code>\k</code></b></th>
<td>模擬鍵盤按鍵</td>
<td><code>\k[Enter]</code></td>
<td><span class="keyboard">Enter</span></td>
</tr>
<tr>
<th style="text-align: left;" class="row"><b><code>\nobr</code></b></th>
<td>標籤範圍之內不斷行</td>