-
Notifications
You must be signed in to change notification settings - Fork 8
/
genops.tex
5023 lines (4801 loc) · 165 KB
/
genops.tex
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
% -*- coding: utf-8 -*-
% This is part of the book TeX for the Impatient.
% Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry.
% See file fdl.tex for copying conditions.
\input macros
%\chapter {Commands for \linebreak general operations}
\chapter {一般操作命令}
\chapterdef{general}
%This section covers
%\TeX's ^{programming features} and
%everything else that doesn't fit into the categories
%of commands in the previous chapters.
%For an explanation of the conventions used in this section,
%see \headcit{Descriptions of the commands}{cmddesc}.
这章介绍 \TeX\ 的^{编程功能}和不适合放入前几章的所有内容。
在 \headcit{命令描述}{cmddesc} 一节中,给出了这章的惯例。
\begindescriptions
%==========================================================================
%\section {Naming and modifying fonts}
\section {命名及修改字体}
%\begindesc
%\bix^^{fonts//naming and modifying}
%\cts font {}
%\aux\cts font {\<control sequence> = \<fontname>}
%\aux\cts font {\<control sequence> = \<fontname> {\bt scaled} \<number>}
%\aux\cts font {\<control sequence> = \<fontname> {\bt at} \<dimen>}
%\explain
%Used alone, the |\font| control sequence designates the current font.
%|\font| isn't a true command when it's used alone,
%since it then can appear only as an argument to another command.
\begindesc
\bix^^{字体//命名及修改字体}
\cts font {}
\aux\cts font {\<control sequence> = \<fontname>}
\aux\cts font {\<control sequence> = \<fontname> {\bt scaled} \<number>}
\aux\cts font {\<control sequence> = \<fontname> {\bt at} \<dimen>}
\explain
单独使用时,|\font| 控制序列指代当前的字体。
|\font| 在这个时候并不是一个真正的命令,
它仅仅作为其它命令的一个参数。
%For the other three forms of |\font|,
%\<font\-name> names a set of files that define a font.
%These forms of |\font| are commands. Each of these forms has two effects:
%{\tighten
%\olist
%\li It defines \<control sequence> as a name that selects
%the font \<font\-name>, possibly magnified (see below).
%\li It causes \TeX\ to load the font ^{metrics file}
%(^{\tfmfile}) for \<fontname>.
%\endolist
%}% end tighten
其它的三个 |\font| 形式,字体名 \<font\-name>
用来指代定义一个字体所需要的一系列文件。
在这些形式下,|\font| 是命令。
每种形式都有两个效果:
{\tighten
\olist
\li 它定义了一个名为 \<control sequence> 的控制序列,
用来选择名为 \<font\-name> 的字体,而且该字体可能被缩放 (见后).
\li 它使 \TeX\ 载入 \<font\-name> 的^{字体信息文件} (\tfmfile\fnidxref{tfm}).
\endolist
}% end tighten
%\noindent
%The name of a font file usually indicates its design size.
%For example, |cmr10| indicates Computer Modern roman with a
%design size of $10$ points.
%The design size of a font is recorded in its metrics file.
\noindent
字体的名字往往表示它的设计大小,
比如 |cmr10| 表示设计大写为 $10$ 点的计算机现代字体。
字体的设计大小保存在字体信息文件中。
%If neither |scaled| \<number> nor |at| \<dimen>
%is present, the font is used
%at its design size---the size at which it usually looks best.
%Otherwise, a magnified version of the font is loaded:
%\ulist
%\li If |scaled| \<number>
%is present, the font is magnified by a factor of $\hbox{\<number>}/1000$.
%\li If |at| \<dimen> is present, the font is scaled to \<dimen> by magnifying
%it by $\hbox{\<dimen>}/ds$, where $ds$ is the design size of
%\<fontname>.
%\<dimen> and $ds$ are nearly always given in points.
%\endulist
%\noindent
%Magnifications of less than $1$ are possible; they reduce the size.
如果用户既没有指定 |scaled| \<number> 也没有指定 |at| \<dimen>,
那么这个字体载入时,使用设计大小---设计大小的含意是,
字体在这个大小时,表示最佳。
否则将会载入一个缩放版的字体:
\ulist
\li 如果指定了 |scaled| \<number>, 则字体将被放大 $\hbox{\<number>}/1000$ 倍。
\li 如果指定了 |at| \<dimen>, 则字体通过缩放大 $\hbox{\<dimen>}/ds$ 倍,
变为 \<dimen> 大小,
其中, $ds$ 是 \<fontname> 的设计大小。
\<dimen> 和 $ds$ 的单位往往使用点。
\endulist
\noindent
放大率可以小于 $1$, 这样做就会使字体缩小尺寸。
%You usually need to provide a shape file (\xref{shape}) for each
%magnification of a font that you load.
%However, some ^{device drivers} can utilize fonts that are resident
%in a printer. ^^{resident fonts}
%Such fonts don't need shape files.
你往往需要为载入的字体的每一个使用的放大率提供一个字体轮廓文件 (\xref{shape}).
当然,一些^{设备驱动}可以使用打印机内置的字体。
^^{内置字体}这些字体不需要字体轮廓文件。
%See \conceptcit{font} and
%\conceptcit{magnification} for further information.
更多信息请参见\conceptcit{字体}和\conceptcit{放大率}.
%\example
%\font\tentt = cmtt10
%\font\bigttfont = cmtt10 scaled \magstep2
%\font\eleventtfont = cmtt10 at 11pt
%First we use {\tentt regular CM typewriter}.
%Then we use {\eleventtfont eleven-point CM typewriter}.
%Finally we use {\bigttfont big CM typewriter}.
%|
%\produces
%\font\regttfont = cmtt10
%\font\bigttfont = cmtt10 scaled \magstep 2
%\font\eleventtfont = cmtt10 at 11pt
%First we use {\regttfont regular CM typewriter}.
%Then we use {\eleventtfont eleven-point CM typewriter}.
%Finally we use {\bigttfont big CM typewriter}.
%\endexample
%\enddesc
\example
\font\tentt = cmtt10
\font\bigttfont = cmtt10 scaled \magstep2
\font\eleventtfont = cmtt10 at 11pt
First we use {\tentt regular CM typewriter}.
Then we use {\eleventtfont eleven-point CM typewriter}.
Finally we use {\bigttfont big CM typewriter}.
|
\produces
\font\regttfont = cmtt10
\font\bigttfont = cmtt10 scaled \magstep 2
\font\eleventtfont = cmtt10 at 11pt
First we use {\regttfont regular CM typewriter}.
Then we use {\eleventtfont eleven-point CM typewriter}.
Finally we use {\bigttfont big CM typewriter}.
\endexample
\enddesc
%\begindesc
%\cts fontdimen {\<number> \<font>\param{dimen}}
%\explain
%^^{fonts//parameters of}
%These parameters specify various dimensions associated with
%the font named by the control sequence \<font>
%(as distinguished from the \<font\-name> that names the font files).
%Values of these parameters are specified in the metrics
%file for \<font>, but you can
%retrieve or change their values during a \TeX\ run.
%The numbers and meanings of the parameters are:
%\display{\halign{\hfil#\hfil\quad&#\hfil\cr
%\it Number&\it Meaning\cr
%\noalign{\vskip 1\jot}%
%1&slant per point\cr
%2&interword space\cr
%3&interword stretch\cr
%4&interword shrink\cr
%5&x-height (size of |1ex|)\cr
%6&quad width (size of |1em|)\cr
%7&extra space\cr}}
%\noindent
%\TeX\ uses the slant per point for positioning accents.
%It uses the interword parameters for producing interword spaces
%(see |\spaceskip|, \xref\spaceskip) and the extra space parameter
%for the additional space after a period (see |\xspaceskip|,
%\xref\xspaceskip).
%The values of these parameters for the
%\plainTeX\ fonts are enumerated on \knuth{page~433}.
%Math symbol fonts have $15$ additional parameters, which we won't discuss here.
\begindesc
\cts fontdimen {\<number> \<font>\param{dimen}}
\explain
^^{字体//字体参数}
这些参数可以用来定义控制序列 \<font>(注意,\<font> 和 \<font\-name> 不同,
\<font-name> 是用来表示字体文件的文件名的)所定义的各种尺寸大小。
这些参数的值,都在 \<font> 所使用的字体信息文件中定义了,
但是你可以在执行 \TeX\ 时得到或改变这些值。这些参数的数值及其意义为:
\display{\halign{\hfil#\hfil\quad&#\hfil\cr
\it 数值&\it 意义\cr
\noalign{\vskip 1\jot}%
1&字体每点的倾斜程度\cr
2&词间距\cr
3&词间伸长长度\cr
4&词间收缩长度\cr
5&x 字符的高度(|1ex| 的长度)\cr
6&m 字符的宽度 (|1em| 的长度)\cr
7&额外空白长度\cr}}
\noindent
\TeX\ 需要使用字体每点的倾斜程度来计算重音符号的位置。
使用词间距来控制单词间的距离 (见 |\spaceskip|, \xref\spaceskip).
使用额外空白长度来控制句号以后所留的空白 (见 |\spaceskip|, \xref\spaceskip).
在 \knuth{433~页} 中列出了 \plainTeX\ 中字体所使用的这些参数的数值。
数学符号有另外 $15$ 个参数,不过我们在此不展开讨论。
%Beware:
%assignments to these parameters are \emph{not} undone at the end
%of a group.
%If you want to change these parameters locally, you'll need to
%save and restore their original settings explicitly.
%\example
%Here's a line printed normally.\par
%\fontdimen2\font = 3\fontdimen2\font
%% Triple the interword spacing.
%\noindent Here's a really spaced-out line.
%|
%\produces
%Here's a line printed normally.\par
%\dimen0 = \fontdimen2\font % to undo global assignment
%\fontdimen2\font = 3\fontdimen2\font
%% triple the interword spacing
%\noindent Here's a really spaced-out line.
%\fontdimen2\font = \dimen0
%\endexample
%\enddesc
注意:
这些参数被设定后,在当前组结束时,并\emph{不}返回初始值。
如果你只是希望在局部的文本中改变这些值,
你需要将它的原值保存,以便稍后恢复。
\example
Here's a line printed normally.\par
\fontdimen2\font = 3\fontdimen2\font
% Triple the interword spacing.
\noindent Here's a really spaced-out line.
|
\produces
Here's a line printed normally.\par
\dimen0 = \fontdimen2\font % to undo global assignment
\fontdimen2\font = 3\fontdimen2\font
% triple the interword spacing
\noindent Here's a really spaced-out line.
\fontdimen2\font = \dimen0
\endexample
\enddesc
%\begindesc
%\cts magnification {{\bt =} \<number>}
%\cts mag {\param{number}}
%\explain
%\margin{{\tt\\mag} and {\tt\\magnification} combined.}
%An assignment to |\magnification| establishes
%the ``^{scale factor}'' $f$ that determines
%the \minref{magnification} ratio of your document \seeconcept{magnification}.
%The assignment to |\magni!-fication| must occur before the first page
%of your document has been shipped out.
\begindesc
\cts magnification {{\bt =} \<number>}
\cts mag {\param{number}}
\explain
\margin{合并了 {\tt\\mag} 和 {\tt\\magnification}.}
使用 |\magnification| 可以定义“^{缩放因子}”$f$,
缩放因子决定了你的文档的\minref{放大率}\seeconcept{放大率}。
|\magni!-fication|必须在文档的第一页被编译出前定义。
%The assignment sets $f$ to \<number> and also
%sets |\hsize| and |\vsize|
%^^|\hsize//set by {\tt\\magnification}|
%^^|\vsize//set by {\tt\\magnification}|
%respectively to |6.5true in| and |8.9true in|,
%the values appropriate for an $8 \frac1/2$-%
%by-$11$-inch page.
%$f$ must be between $0$ and $32768$.
%The \minref{magnification} ratio of the
%document is $f/1000$.
%A scale factor
%of $1000$ provides unit magnification, i.e., it leaves the size of your
%document
%unchanged. It's customary to use powers of $1.2$ as scale factors, and
%most libraries of fonts are based on such factors. You can use the
%^|\magstep| and ^|\magstephalf| commands to specify magnifications by
%these factors.
这个命令把 $f$ 定义成 \<number> 的同时,
也会定义 |\hsize| 为 |6.5true in|,|\vsize| 为 |8.9true in|,
^^|\hsize//用 {\tt\\magnification} 设定|
^^|\vsize//用 {\tt\\magnification} 设定|
即适合 $8 \frac1/2$ 英尺乘 $11$ 英尺的页面的大小。
缩放因子 $f$ 的值必需介于 $0$ 到 $32768$ 之间,
它确定了该文档的\minref{放大率}为 $f/1000$。
因此缩放因子为 $1000$ 就给出了单位放大率,也就是说,它不改变文档的尺寸。
我们习惯使用 $1.2$ 的幂次值来定义缩放因子,
因为很多的字体就是基于这种因子的。
用 ^|\magstep| 和 ^|\magstephalf| 命令你可以更方便地定义这种因子。
%|\magnification| is not a parameter. You can't use it
%to \emph{retrieve} the scale factor. If you write something like
%|\dimen0 = \mag!-nifi!-cation|, \TeX\ will complain about it.
|\magnification| 不是一个参数,你不能使用它来得到缩放因子。
如果你使用类似 |\dimen0 = \mag!-nifi!-cation| 之类的语句,
\TeX\ 将会报错。
%The |\mag| parameter contains the scale factor.
%Changing the value of |\mag| rescales the page dimensions, which is not
%usually what you want.
%Therefore it's usually better to change the magnification by
%assigning to |\magnification| rather than to |\mag|.
而 |\mag| 参数则包含缩放因子。
改变 |\mag| 的值也缩放了页面尺寸,而这一般不是你所想要的。
因此,一般情况下,
最好是使用 |\magnification| 而不是 |\mag| 来改变页面的放大率。%
\footnote{译注:|\mag| 是 \TeX\ 的原始命令,
而 |\magnification| 是 \plainTeX\ 中定义的命令。
|\magnification| 依赖于 |\mag|,
它用 |\mag| 设置放大率后恢复了默认的页面尺寸。
在 LaTeX 中没有 |\magnification| 命令,
一般也不建议使用 |\mag| 命令,因为这与 LaTeX 的设计原则相悖。
}
%\example
%\magnification = \magstep2
%% magnify fonts by 1.44 (=1.2x1.2)
%|
%\endexample
%\enddesc
\example
\magnification = \magstep2
% 把字体放大 1.44 倍 (=1.2x1.2)
|
\endexample
\enddesc
%\begindesc
%\cts magstep {\<number>}
%\explain
%This command expands to the \minref{magnification} ratio needed to
%magnify everything in your document
%(other than |true| dimensions)
%by $1.2^r$, where $r$ is
%the value of \<number>. \<number> must be between $0$ and $5$.
%\example
%\magnification = \magstep1 % Magnify by ratio of 1.2.
%|
%\endexample
%\enddesc
\begindesc
\cts magstep {\<number>}
\explain
这个命令展开为一个\minref{放大率}因子,
这个因子可以把你文档中所有(除了给定 |true| 尺寸的)东西放大 $1.2^r$ 倍,
其中 $r$ 是 \<number> 的值。
\<number> 必须在 $0$ 到 $5$ 之间。%
\footnote{译注:即在 \plainTeX\ 中定义 |\magstep1| 为 1200,|\magstep2| 为 1440,等等。}
\example
\magnification = \magstep1 % 放大 1.2 倍。
|
\endexample
\enddesc
%\begindesc
%\cts magstephalf {}
%\explain
%This command expands to the \minref{magnification} ratio needed to
%magnify everything in your document
%(other than |true| dimensions)
%by $\sqrt{1.2}$,
%i.e., halfway between $1$ and $1.2$.
%\example
%\magnification = \magstephalf
%|
%\endexample
%\eix^^{fonts//naming and modifying}
%\enddesc
\begindesc
\cts magstephalf {}
\explain
这个命令展开为一个\minref{放大率}因子,
这个因子可以把你文档中所有(除了给定 |true| 尺寸的)东西放大 $\sqrt{1.2}$ 倍,
也就是 $1$ 和 $1.2$ 的等比中项。%
\footnote{译注:即在 \plainTeX\ 中定义 |\magstephalf| 为 1095。}
\example
\magnification = \magstephalf
|
\endexample
\eix^^{字体//命名及修改字体}
\enddesc
%==========================================================================
%\section {Converting information to tokens}
\section {把信息转为记号}
%\subsection {Numbers}
\subsection {数值}
%\begindesc
%\xrdef{convert}
%\bix^^{numbers//converting to characters}
%%
%\cts number {\<number>}
%\explain
%This command produces the representation of a \minref{number}
%as a sequence of
%character \minref{token}s. The number can be either an explicit integer,
%a \<number> parameter, or a \<number> register.
%\example
%\number 24 \quad \count13 = -10000 \number\count13
%|
%\produces
%\number 24 \quad \count13 = -10000 \number\count13
%\endexample
%\enddesc
\begindesc
\xrdef{convert}
\bix^^{数值//转换为字符}
%
\cts number {\<number>}
\explain
这个命令可以把一个\minref{数}表示成字符\minref{记号}序列。
这里的数可以是一个确定的整数,或是一个 \<number> 参数,
也可以是一个 \<number> 寄存器。
\example
\number 24 \quad \count13 = -10000 \number\count13
|
\produces
\number 24 \quad \count13 = -10000 \number\count13
\endexample
\enddesc
%\begindesc
%^^{Roman numerals}
%\easy\cts romannumeral {\<number>}
%\explain
%This command produces the roman numeral representation of a \minref{number}
%as a sequence of
%character \minref{token}s. The number can be either an explicit integer,
%a \<number> parameter, or a \<number> register.
%If the number is zero or negative, |\romannumeral| produces
%no tokens.
%\example
%\romannumeral 24 \quad (\romannumeral -16)\quad
%\count13 = 6000 \romannumeral\count13
%|
%\produces
%\romannumeral 24 \quad (\romannumeral -16)\quad
%\count13 = 6000 \romannumeral\count13
%\endexample
%
%\eix^^{numbers//converting to characters}
%\enddesc
\begindesc
^^{罗马数字}
\easy\cts romannumeral {\<number>}
\explain
这个命令可以把一个\minref{数}表示成罗马字符\minref{记号}列。
这里的数可以是一个确定的整数,或是一个 \<number> 参数,
也可以是一个 \<number> 寄存器。
如果这个数是负的,则 |\romannumeral| 不产生任何记号。
\example
\romannumeral 24 \quad (\romannumeral -16)\quad
\count13 = 6000 \romannumeral\count13
|
\produces
\romannumeral 24 \quad (\romannumeral -16)\quad
\count13 = 6000 \romannumeral\count13
\endexample
\eix^^{数值//转换为字符}
\enddesc
%==========================================================================
%\subsection {Environmental information}
\subsection {环境信息}
%\begindesc
%^^{time of day}
%\cts time {\param{number}}
%\explain
%\TeX\ sets this parameter to the
%number of minutes that have elapsed since midnight (of the current day).
%At noon, for instance, |\time| is $720$.
%This command and the next three make use of the time and date as
%recorded in your computer.
%\TeX\ retrieves them just once, at the beginning of your run, so |\time|
%at the end of the run always has the same value as |\time| at the
%beginning of the run (unless you've explicitly changed it).
%\enddesc
\begindesc
^^{日期时间}
\cts time {\param{number}}
\explain
\TeX\ 把这个参数设置为从当日午夜到现在所经过的分钟数。
比如在中午,|\time| 就是 $720$.
这个命令和下面的三个命令使用的是你计算机中所记录的时间。
\TeX\ 只在开始运行的时候向系统获取一次时间,
所以如果你不改变这个值的话,
先前运行的 |\time| 和最后运行的 |\time| 的值是完全相同的。
\enddesc
%\bix^^{date}
%\begindesc
%\cts day {\param{number}}
%\explain
%\TeX\ sets this parameter to the current day of the month. It is
%a number between $1$ and $31$.
%|\day| is set at the beginning of your run (see the comments on
%|\time| above).
%\enddesc
\bix^^{日期}
\begindesc
\cts day {\param{number}}
\explain
\TeX\ 把这个参数设置为今天的日期数。
这是一个介于 $1$ 和 $31$ 之间的数。
|\day| 只在程序开始运行的时候被设定 (见上面 |\time| 的说明).
\enddesc
%\begindesc
%\cts month {\param{number}}
%\explain
%\TeX\ sets this parameter to the current month. It is
%a number between $1$ and $12$.
%|\month| is set at the beginning of your run (see the comments on
%|\time| above).
%\enddesc
\begindesc
\cts month {\param{number}}
\explain
\TeX\ 把这个参数设置为当前的月份。
这是一个介于 $1$ 和 $12$ 之间的数。
|\time| 只在程序开始运行的时候被设定 (见上面 |\time| 的说明).
\enddesc
%\begindesc
%\cts year {\param{number}}
%\explain
%\TeX\ sets this parameter to the current year ({\sc A.D.}).
%It is a number such as $1991$.
%|\year| is set at the beginning of your run (see the comments on
%|\time| above)
\begindesc
\cts year {\param{number}}
\explain
\TeX\ 把这个参数设置为当前的 ({\sc 公元}) 年份。
这是一个类似 $1991$ 之类的数。
|\year| 只在程序开始运行的时候被设定 (见上面 |\time| 的说明).
%\eix^^{date}
%\enddesc
\eix^^{日期}
\enddesc
%\begindesc
%^^{version number}
%\cts fmtname {}
%\cts fmtversion {}
%\explain
%These commands produce the name and version number
%of the \TeX\ format,
%e.g., \minref{\plainTeX} or ^{\LaTeX}, that you're using.
%\example
%This book was produced with the \fmtname\ format,
%version~\fmtversion.
%|
%\produces
%This book was produced with the \fmtname\ format,
%version~\fmtversion.
%\endexample
%\enddesc
\begindesc
^^{版本号}
\cts fmtname {}
\cts fmtversion {}
\explain
这个命令会产生当前使用的 \TeX\ 格式(比如 \minref{\plainTeX} 或 \LaTeX\mcidxref{LaTeX})的名字和版本号。
\example
本书使用 \fmtname\ 格式,版本~\fmtversion 。
|
\produces
本书使用 \fmtname\ 格式,版本~1.9: 26 April 1991 (and plain 3.141592653)。
\endexample
\enddesc
%\begindesc
%\cts jobname {}
%\explain
%This command produces the base
%name of the file with which \TeX\ was invoked.
%For example, if your main input file is |hatter.tex|,
%|\jobname| will expand to |hatter|.
%|\jobname| is most useful when you're
%creating an auxiliary file to be associated with a document.
%^^{auxiliary files}
%\example
%\newwrite\indexfile \openout\indexfile = \jobname.idx
%% For input file `hatter.tex', open index file `hatter.idx'.
%|
%\endexample\enddesc
\begindesc
\cts jobname {}
\explain
这个命令产生调用 \TeX\ 的文件的文件本名。
比如你的输入文件为 |hatter.tex|, |\jobname| 会被展开成 |hatter|.
|\jobname| 在你生成文档的辅助文件时会很管用。
^^{辅助文件}
\example
\newwrite\indexfile \openout\indexfile = \jobname.idx
% 打开 `hatter.tex' 的索引文件 `hatter.idx'.
|
\endexample\enddesc
%==========================================================================
\subsection {变量的值}
\begindesc
\cts meaning {\<token>}
\explain
^^{记号//显示记号的含义}
这个命令会产生 \<token> 的定义。
它对于诊断输出很有用。
你可以用类似的方法使用 ^|the| 命令 (\xref\the) 来得到 \minref{寄存器}和其它 \TeX\ 中的东西的值信息。
\example
[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
|
\produces
[{\tt \meaning\eject}] [\meaning\entenrm] [\meaning Y]
\endexample\enddesc
\begindesc
\cts string {\<control sequence>}
\explain
^^{控制序列//转换为字符串}
这个命令会把 \<control sequence> 表示成其名字的字符串,
包括\minref{转义符}。
转义符会被表示成当前 ^|\escapechar| 的值。
^^{转义符//用 \b\tt\\escapechar\e 表示}
\TeX\ 把在此中的所有字符的类码设为 $12$(其它)。
你可以使用 ^|\csname| 命令执行这个命令的反操作(\xref\csname )。
它会把一个字符串转为一个控制序列。
\example
控制序列 {\tt \string\bigbreak}
|
\produces
控制序列 {\tt \string\bigbreak}
\endexample\enddesc
\begindesc
\cts escapechar {\param{number}}
\explain
这个参数在把一个控制序列名转化为一系列字符记号时,
指定 \TeX\ 用来表示\minref{转义符}的字符的 \ascii\ 码\minrefs{ascii}。
^^{转义符//用 \b\tt\\escapechar\e 表示}
这个转化发生在你使用 |\string| 命令时或者 \TeX\ 在产生诊断信息时。
转义符的默认值是 $92$,即^{反斜杠}的 \ascii\ 码。
如果 |\escapechar| 不在 $0$--$255$ 之间,\TeX\ 则在转换时不包括转义符。
\example
\escapechar = `!!
控制序列 {\tt \string\bigbreak}
|
\produces
\escapechar = `!
控制序列 {\tt \string\bigbreak}
\endexample
\enddesc
\begindesc
\cts fontname {\<font>}
\explain
^^{字体名称}
这个命令产生 \<font> 的字体文件名。
该字体名就是定义 \<font> 时所的 \<font\-name>.
\example
\font\myfive=cmr5 [\fontname\myfive]
|
\produces
\font\myfive=cmr5 [\fontname\myfive]
\endexample
\enddesc
%==========================================================================
%\section {Grouping}
\section {编组}
%\begindesc
%\bix^^{groups}
\begindesc
\bix^^{编组}
%
%\cts begingroup {}
%\cts endgroup {}
%\explain
%These two commands begin and end a \minref{group}.
%A |\begingroup| does not match up with a right brace,
%nor an |\endgroup| with a left brace.
\cts begingroup {}
\cts endgroup {}
\explain
这两个命令开始或结束一个\minref{编组}。
|\begingroup| 不会和右花括号匹配,|\endgroup| 也不会和左花括号匹配。
%\TeX\ treats |\begingroup| and |\endgroup| like any other
%\minref{control sequence} when it's scanning its input. In particular,
%you can define a \minref{macro} that contains a |\begingroup|
%but not an |\endgroup|, and conversely.
%^^{macros//using \b\tt\\begingroup\e\ and \b\tt\\endgroup\e\ in}
%This technique is often useful
%when you're defining paired macros, one of which establishes
%an environment and the other of which terminates that environment.
%You can't, however, use |\begingroup| and |\endgroup| as substitutes for
%braces other than the ones that surround a group.
%\example
%\def\a{One \begingroup \it two }
%\def\enda{\endgroup four}
%\a three \enda
%|
%\produces
%\def\a{One \begingroup \it two }
%\def\enda{\endgroup four}
%\a three \enda
%\endexample
%\enddesc
在扫描输入时,\TeX\ 如同其它\minref{控制序列}一样对待 |\begingroup| 和 |\endgroup|。
尤其体现在,你可以定义一个包括 |\begingroup| 但不包括 |\endgroup| 的宏,
或者与之相反。
^^{宏//使用 \b\tt\\begingroup\e\ 和 \b\tt\\endgroup\e}
这个技巧往往在你定义一对宏时会非常有用,一个用来开始一个环境,
另一个用来结束这个环境。
但是你不可以使用 |\begingroup| 和 |\endgroup|
来替换除了用来括起一个组以外功能的花括号。
\example
\def\a{一 \begingroup \it 二 }
\def\enda{\endgroup 四}
\a 三 \enda
|
\produces
\def\a{一 \begingroup \it 二 }
\def\enda{\endgroup 四}
\a 三 \enda
\endexample
\enddesc
%\begindesc
%\makecolumns 4/2:
%\easy%
%\ctsact { \xrdef{@lbrace}
%\cts bgroup {}
%\ctsact } \xrdef{@rbrace}
%\cts egroup {}
%\explain
%The left and right braces are commands that begin and end a
%\minref{group}.
%The |\bgroup| and |\egroup| \minref{control sequence}s are equivalent
%to `|{|' and `|}|', except that
%\TeX\ treats |\bgroup| and |\egroup| like any other
%\minref{control sequence} when it's scanning its input.
\begindesc
\makecolumns 4/2:
\easy%
\ctsact \{ \xrdef{@lbrace}
\cts bgroup {}
\ctsact \} \xrdef{@rbrace}
\cts egroup {}
\explain
左花括号和右花括号命令的作用是用来开始或结束一个\minref{编组}。
除了在扫描输入时 \TeX\ 会把 |\bgroup| 和 |\egroup|
像其它\minref{控制序列}一样对待以外,
|\bgroup| 和 |\egroup| \minref{控制序列}与 `|{|' 和 `|}|'是等价的。
%|\bgroup| and |\egroup| can be useful when you're
%defining paired macros, one of which
%starts a brace-delimited construct (not necessarily a group)
%and the other one of which ends that construct.
%^^{macros//using \b\tt\\bgroup\e\ and \b\tt\\egroup\e\ in}
%You can't define such macros using ordinary braces---if you try,
%your macro definitions will contain unmatched braces
%and will therefore be unacceptable to \TeX.
%Usually you should use these commands only when you can't use
%ordinary braces.
当你定义两个成对的宏时,|\bgroup| 和 |\egroup| 会非常有用。
这两个宏中其中一个开始一个由花括号定界的结构(不一定是一个组),
而另一个结束该结构。
^^{宏//用 \b\tt\\bgroup\e\ 和 \b\tt\\egroup\e}
你不能使用常规的花括号来定义这样的宏,否则你的宏定义会包含没有匹配的花括号,
而这样的定义是不被 \TeX\ 所接受的。
一般情况下你需要在你没有办法使用花括号时使用这些命令。
%\example
%Braces define the {\it boundaries\/} of a group.
%|
%\produces
%Braces define the {\it boundaries\/} of a group.
%\nextexample
%\def\a{One \vbox\bgroup}
%% You couldn't use { instead of \bgroup here because
%% TeX would not recognize the end of the macro
%\def\enda#1{{#1\egroup} two}
%% This one is a little tricky, since the \egroup actually
%% matches a left brace and the following right brace
%% matches the \bgroup. But it works!!
%\a \enda{\hrule width 1in}
%|
%\produces
%\def\a{One \vbox\bgroup}
%% You couldn't use { instead of \bgroup here because
%% TeX would not recognize the end of the macro
%\def\enda#1{{#1\egroup} two}
%% This one is a little tricky, since the \egroup actually
%% matches a left brace and the following right brace
%% matches the \bgroup. But it works!
%\a \enda{\hrule width 1in}
%\endexample
%\enddesc
\example
一个编组的 {\it 边界\/} 可由花括号定义。
|
\produces
一个编组的~{\it 边界\/}~可由花括号定义。
\nextexample
\def\a{一 \vbox\bgroup}
% 在这里你不能使用一个 { 来代替 \bgroup,
% 否则 TeX 不会识别这个宏
\def\enda#1{{#1\egroup} 二}
% 这有点技巧性, 因为 \egroup 事实上和左花括号匹配,
% 而它右边的右边的花括号和 \bgroup 匹配.
% 不过这个歪门邪道行得通!!
\a \enda{\hrule width 1in}
|
\produces
\def\a{一 \vbox\bgroup}
% 在这里你不能使用一个 { 来代替 \bgroup,
% 否则 TeX 不会识别这个宏
\def\enda#1{{#1\egroup} 二}
% 这有点技巧性, 因为 \egroup 事实上和左花括号匹配,
% 而它右边的右边的花括号和 \bgroup 匹配.
% 不过这花招能用!!
\a \enda{\hrule width 1in}
\endexample
\enddesc
%\begindesc
%\cts global {}
%\explain
%This command makes the following definition
%or \minref{assignment} \minref{global} \seeconcept{global} so that it
%becomes effective independent of \minref{group} boundaries.
%You can apply a |\global| prefix to any kind of definition
%or \minref{assignment},
%including a \minref{macro} definition or a \minref{register} assignment.
%\example
%{\global\let\la = \leftarrow}
%$a \la b$
%|
%\produces
%% for safety's sake we fake this one!
%\let\la = \leftarrow
%$a \la b$
%\endexample
%\enddesc
\begindesc
\cts global {}
\explain
这个命令使得它随后的定义或\minref{赋值}成为\minref{全局}性的%
\seeconcept{全局的},而不是仅局限在所处的\minref{组}之中生效。
你可以把 |\global| 放在
包括宏定义和\minref{寄存器}赋值在内的任何定义或\minref{赋值}前。
\example
{\global\let\la = \leftarrow}
$a \la b$
|
\produces
% for safety's sake we fake this one!
\let\la = \leftarrow
$a \la b$
\endexample
\enddesc
%\begindesc
%\cts globaldefs {\param{number}}
%\explain
%This parameter controls whether or not \TeX\ takes definitions
%and other assignments to be
%\minref{global}:
%\ulist
%\li If |\globaldefs| is zero (as it is by default), a definition is global
%if and only if it is preceded by |\global| either explicitly or implicitly.
%(The ^|\gdef| and ^|\xdef| commands (\xref\gdef) have an implicit
%|\global| prefix).
%\li If |\globaldefs| is greater than zero, all assignments and
%definitions are implicitly prefixed by ^|\global|.
%\li If |\globaldefs| is less than zero, all ^|\global| prefixes are ignored.
%\endulist
%\enddesc
\begindesc
\cts globaldefs {\param{number}}
\explain
这个参数控制 \TeX\ 是否把定义和其它的赋值作为\minref{全局}的:
\ulist
\li 如 |\globaldefs| 是 (默认值) 零,
当且仅当一个定义是由直接或者间接的 |\global| 命令指定的。
(^|\gdef| 和 ^|\xdef| 命令 (\xref\gdef) 间接地在定义前面加了 |\global| 命令).
\li 如果 |\globaldefs| 大于零,所有的定义和赋值都会间接地在前面加上 ^|global|.
\li 如果 |\globaldefs| 小于零,所有的 ^|\global| 都被忽略。
\endulist
\enddesc
%\begindesc
%\margin{Order of {\tt\\aftergroup} and {\tt\\afterassignment} changed.}
%\cts aftergroup {\<token>}
%\explain
%When \TeX\ encounters this command during input,
%it saves \<token>.
%After the end of the current \minref{group},
%it inserts \<token> back into the input and expands it.
%If a group contains several |\aftergroup|s, the corresponding tokens
%are \emph{all} inserted following the end of the group, in the order
%in which they originally appeared.
\begindesc
\margin{改变了 {\tt\\aftergroup} 和 {\tt\\afterassignment} 顺序。}
\cts aftergroup {\<token>}
\explain
当 \TeX\ 在读取输入时遇到了这个命令,它就把 \<token> 保存下来。
并在当前\minref{组}后插入展开后的 \<token>。
如果一个编组有好几个 |\aftergroup|,则每个记号\emph{全}都会依次插入这个编组的最后。
%The example that follows shows how you can use |\aftergroup| to postpone
%processing a token that you generate within a \minref{conditional test}.
%\example
%\def\neg{negative} \def\pos{positive}
%% These definitions are needed because \aftergroup applies
%% to a single token, not to a sequence of tokens or even
%% to a brace-delimited text.
%\def\arith#1{Is $#1>0$? \begingroup
% \ifnum #1>-1 Yes\aftergroup\pos
% \else No\aftergroup\neg\fi
% , it's \endgroup. }
%\arith 2
%\arith {-1}
%|
%\produces
%\def\neg{negative} \def\pos{positive}
%% These definitions are needed because \aftergroup applies
%% to a single token, not a sequence of tokens or even
%% a group.
%\def\arith#1{Is $#1>0$? \begingroup
% \ifnum #1>-1 Yes\aftergroup\pos
% \else No\aftergroup\neg\fi
% , it's \endgroup. }
%\arith 2
%\arith {-1}
%\endexample
%\eix^^{groups}
%\enddesc
下面的例子向你展示了如何用 |\aftergroup| 来延迟处理一个在\minref{条件测试}中产生的记号。
\example
\def\neg{负} \def\pos{正}
% 因为一个 \aftergroup 只能作用到一个记号上,
% 而不是到一系列的记号上, 甚至不能是一个用括号定界的文本,
% 所以下面的代码是必需的.
\def\arith#1{是否 $#1>0$? \begingroup
\ifnum #1>-1 是\aftergroup\pos
\else 否\aftergroup\neg\fi
, 它是\endgroup. }
\arith 2
\arith {-1}
|
\produces
\def\neg{负} \def\pos{正}
% 因为一个 \aftergroup 只能作用到一个记号上,
% 而不是到一系列的记号上, 甚至不能是一个用括号定界的文本,
% 所以下面的代码是必需的.
\def\arith#1{是否 $#1>0$? \begingroup
\ifnum #1>-1 是\aftergroup\pos
\else 否\aftergroup\neg\fi
, 它是\endgroup. }
\arith 2
\arith {-1}
\endexample
\eix^^{编组}
\enddesc
%\begindesc
%\cts afterassignment {\<token>}
%\explain
%When \TeX\ encounters this command it saves \<token> in a special
%place. After it next performs an \minref{assignment}, it inserts
%\<token> into the input and expands it. If you call |\afterassignment|
%more than once before an assignment, only the last call has any effect.
%One use of |\afterassignment|
%is in writing \minref{macro}s for commands intended to be written
%in the
%form of assignments, as in the example below.
\begindesc
\cts afterassignment {\<token>}
\explain
当 \TeX\ 遇到这个命令,它会把 \<token> 保存在一个特殊的地方。