summaryrefslogtreecommitdiff
path: root/info/impatient/cn/modes.tex
blob: 98be8c6895003dd7ee53e10d5b6499a6aef5abd6 (plain)
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
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
% -*- 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 horizontal and \linebreak vertical modes}
\chapter {水平和竖直模式命令}

\chapterdef{hvmodes}

%This section covers commands that have corresponding or identical
%forms for both horizontal and vertical modes.
%These commands provide boxes, spaces, rules, leaders,
%and alignments.
%For an explanation of the conventions used in this section,
%see \headcit{Descriptions of the commands}{cmddesc}.
这一章介绍水平和竖直模式下具有对应或一致形式的命令。这些命令提供盒子、间隔、标线、指引线以及阵列。有关本章中使用的惯例的说明,参见\headcit{命令的描述}{cmddesc}。

\begindescriptions

%==========================================================================
%\section {Producing space}
\section {产生间隔}

%==========================================================================

%\subsection {Fixed-width horizontal space}
\subsection {固定宽度水平间隔}

%\begindesc
%\bix^^{space//producing}
%\bix^^{horizontal space}
%\cts thinspace {}
%\explain
%This command produces a positive \minref{kern}
%whose width is one-sixth of an em
%(\xref{dimdefs})
%i.e., it causes \TeX\ to move its position right by that amount.
%It is useful
%when you have a nested quotation, for example,
%and you want to separate the levels of quotes.
%\TeX\ won't break a line at
%a |\thinspace|.\minrefs{line break}
\begindesc
\bix^^{间隔//产生间隔}
\bix^^{水平间隔}
\cts thinspace {}
\explain
该命令产生一个正的\minref{紧排},它的宽度是 1/6 em(\xref{dimdefs}),也就是说,它使得 \TeX\ 向右移动一个相应的距离。例如,当你需要嵌套引用,并希望将不同层次的引号分开时,它便非常有用。\TeX\ 不会在 |\thinspace| 处断行。\minrefs{line break}

\example
``\thinspace`一个引用。'\thinspace''\par
24,\thinspace 29--31,\thinspace 45,\thinspace 102
|
\produces
%``\thinspace`A quote.'\thinspace''\par
``\thinspace`一个引用。'\thinspace''\par
24,\thinspace 29--31,\thinspace 45,\thinspace 102
\endexample
\enddesc

\begindesc
\cts negthinspace {}
\explain
%This command
%produces a negative kern whose width is one-sixth of an em
%(\xref{dimdefs}),
%i.e., it causes \TeX\ to move its position left by that amount.
%It is useful for bringing together characters that are a little too
%far apart.
%\TeX\ won't break a line at a |\negthinspace|.\minrefs{line break}
该命令产生一个负的\minref{紧排},它的宽度是 1/6 em(\xref{dimdefs}),也就是说,它使得 \TeX\ 向左移动一个相应的距离。当需要将两个间隔稍远的字符靠近一些时便非常有用。\TeX\ 不会在 |\negthinspace| 处断行。\minrefs{line break}

\example
The horror, the horror\negthinspace, the horror of it all!!
|
\produces
The horror, the horror\negthinspace, the horror of it all!
\endexample
\enddesc

\begindesc
\cts enspace {}
\explain
%This command produces a \minref{kern} whose width is one ^{en}
%(half of an em, see \xrefpg{dimdefs}).
%\TeX\ won't break a line
%at an |\enspace| unless it's followed by glue.
%In a bulleted list, the bullets are usually separated from the following
%text by an |\enspace|.
该命令产生一个宽度为 1 ^{en} 的\minref{紧排}(1 em 的一半,参见 \xrefpg{dimdefs})。\TeX\ 不会在 |\enspace| 处断行,除非紧接其后的是粘连。在符号列表中,符号与其后的文字通常由 |\enspace| 来分隔。

\example
引理 1.\enspace 这里有一只白兔。
|
\produces
%Lemma 1.\enspace There exists a white rabbit.
引理 1.\enspace 这里有一只白兔。
\endexample
% the enspace here follows the \proclaim convention (Knuth p. 355).
\enddesc

\begindesc
\easy\cts enskip {}
\cts quad {}
\cts qquad {}
\explain
^^{en}
%Each of these commands
%produces a glob of horizontal \minref{glue}
%that can neither stretch nor shrink.
%\TeX\ can break a line \minrefs{line break} at such glue.
%The width of these glues (which are relative to the current font)
%are as follows for |cmr10|, the default \plainTeX\ font:
这里的每个命令都产生一个既不能伸展也不能收缩的水平\minref{粘连}。\TeX\ 不能在这些粘连处断行。对于 \plainTeX\ 的默认字体 |cmr10| 来说,这些粘连的宽度(与当前字体有关)如下:
\medskip

\def\distance#1{\hbox{\strut $\rightarrow$\vrule\hskip #1\vrule$\leftarrow$}}

%{\def\l#1{\hfil$#1$\thinspace em}
%\tabskip 3pc \halign{#&#&\hfil#\hfil\cr
%{\it Command}&{\it Space}&{\it Illustration}\cr
%\noalign{\vskip 4pt}
%|\enskip|&\l{\frac 1/2}&\distance{.5em}\cr
%|\quad|&\l1&\distance{1em}\cr
%|\qquad|&\l2&\distance{2em}\cr
%}}
%\example
%en\enskip skip; quad\quad skip; qquad\qquad skip
%|
%\produces
%en\enskip skip; quad\quad skip; qquad\qquad skip
%\endexample
%\eix^^{horizontal space}
%\enddesc
{\def\l#1{\hfil$#1$\thinspace em}
\tabskip 3pc \halign{#&#&\hfil#\hfil\cr
{\it 命令}&{\it 间距}&{\it 图示}\cr
\noalign{\vskip 4pt}
|\enskip|&\l{\frac 1/2}&\distance{.5em}\cr
|\quad|&\l1&\distance{1em}\cr
|\qquad|&\l2&\distance{2em}\cr
}}
\example
en\enskip skip; quad\quad skip; qquad\qquad skip
|
\produces
en\enskip skip; quad\quad skip; qquad\qquad skip
\endexample
\eix^^{水平间隔}
\enddesc

%==========================================================================
%\subsection {Fixed-length vertical space}
\subsection {固定长度竖直间隔}

%\begindesc
%\bix^^{vertical space}
%\easy\cts smallskip {}
%\cts medskip {}
%\cts bigskip {}
%\explain
%These commands produce successively larger
%amounts of vertical space:
\begindesc
\bix^^{竖直间隔}
\easy\cts smallskip {}
\cts medskip {}
\cts bigskip {}
\explain
这些命令可以产生连续较大的竖直间隔:
\display{{\def\bar{\kern 2pt\hrule width 5pc}
\def\lbl#1{\hbox to 5pc{\hfil #1skip\hfil}}
\leavevmode
\vtop{\lbl{small}\bar\smallskip\bar}\quad
\vtop{\lbl{med}\bar\medskip\bar}\quad\vtop{\lbl{big}\bar\bigskip\bar}}}
\noindent
%|\smallskip| skips by $3$ points and can stretch or
%shrink by $1$ point.  |\med!-skip| is equivalent to two |\smallskip|s
%and |\bigskip| is equivalent to two |\medskip|s.
|\smallskip| 产生 $3$ 点的竖直间隔,并可以伸展或收缩 1 点。
|\med!-skip| 相当于两个 |\smallskip|,而 |\bigskip| 相当于两个 |\medskip|。

%These commands end a paragraph since they are inherently vertical.
%The skips that they produce
%are in addition to the normal interparagraph skip.
由于这些命令具有固有的竖直特性,因此它们的出现宣告一个段落的结束。由此产生的间距需要再加上正常的段落间距。
\example
Hop \smallskip skip \medskip and \bigskip jump.
|
\produces
Hop \smallskip skip \medskip and \bigskip jump.
\endexample
\enddesc

\begindesc
\cts smallskipamount {\param{glue}}
\cts medskipamount {\param{glue}}
\cts bigskipamount {\param{glue}}
\explain
%These parameters specify the amounts of glue produced by
%the |\small!-skip|, |\med!-skip|, and |\big!-skip| commands.
%By changing these parameters you change the effect of the commands.
%The default values (for \plainTeX)
%correspond to a quarter of a linespace, half a linespace,
%and a full linespace.
%We recommend that you maintain this ratio by changing
%these values whenever
%you change |\baselineskip| (\xref\baselineskip).
%^^|\baselineskip//and {\tt\\smallskipamount}, etc.|
%\eix^^{vertical space}
这些参数用于确定由 |\small!-skip|、|\med!-skip| 和 |\big!-skip| 命令产生的粘连的量。
通过更改这些参数,你可以改变命令的效果。(对于 \plainTeX )它们相应的默认值是 1/4 、1/2 以及 1 行距。
我们建议你保持这个比例,无论何时,你可以通过修改 |\baselineskip|(\xref\baselineskip )来修改参数值。
^^|\baselineskip//和 {\tt\\smallskipamount} 等|
\eix^^{竖直间隔}

\enddesc

%==========================================================================
%\subsection {Variable-size space}
\subsection {可变尺寸间隔}

%\begindesc
%\easy\cts hskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
%\cts vskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
%^^{vertical skip}^^{vertical glue}
%^^{horizontal skip}^^{horizontal glue}
%\bix^^{horizontal space}
%\bix^^{vertical space}
%\explain
%These commands produce horizontal and vertical glue respectively.
%In the simplest and most common case when only \<dimen$_1$> is present,
%|\hskip| skips to the right by \<dimen$_1$>
%and |\vskip| skips down the page by \<dimen$_1$>.
%More generally, these commands
%produce \minref{glue} whose natural size is
%\<dimen$_1$>, whose stretch is \<dimen$_2$>, and whose shrink is \<dimen$_3$>.
%Either the |plus| \<dimen$_2$>, the |minus |\<dimen$_3$>,
%or both can be omitted.
%If both are present, the |plus| must come before the |minus|.
%An omitted value
%is taken to be zero. Any of the \<dimen>s can be negative.
\begindesc
\easy\cts hskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
\cts vskip {\<dimen$_1$> {\bt plus} \<dimen$_2$> {\bt minus} \<dimen$_3$>}
^^{竖直间距}^^{竖直粘连}
^^{水平间距}^^{水平粘连}
\bix^^{水平间隔}
\bix^^{竖直间隔}
\explain
这些命令可以分别产生水平的和竖直的粘连。
在最简单以及最常见的情况下,即当只有 \<dimen$_1$> 存在时,
|\hskip| 向右移动 \<dimen$_1$>,而 |\vskip| 向页面下方移动 \<dimen$_1$>。
在一般情况下,这些命令产生一个\minref{粘连},其自然尺寸为 \<dimen$_1$>,
可伸长量为 \<dimen$_2$>,可收缩量为 \<dimen$_3$>。
命令中的 |plus| \<dimen$_2$> 或 |minus |\<dimen$_3$>,或两者都可以省略。
如果两者都需要,则 |plus| 必须出现在 |minus| 之前。
被省略的变量取值为零。任何 \<dimen> 都可以取负值。

%You can use |\hskip| in math mode, but you can't use |mu| units
%\seeconcept{mathematical unit}
%for any of the dimensions.  If you want |mu| units, use |\mskip|
%(\xref\mskip) instead.
在数学模式下,你可以使用 |\hskip|,
但不能使用 |mu|\seeconcept{数学单位}作为任何尺寸的单位。
如果你希望使用 |mu| 作为单位,可以使用 |\mskip|(\xref\mskip )代替之。

\example
\hbox to 2in{one\hskip 0pt plus .5in two}
|
\produces
\hbox to 2in{one\hskip 0pt plus 2in two}

\doruler{\8\8}2{in}
\nextexample
\hbox to 2in{Help me!! I can't fit
{\hskip 0pt minus 2in} inside this box!!}
|
\produces
\hbox to 2in{Help me! I can't fit
{\hskip 0pt minus 2in} inside this box!}

\doruler{\8\8}2{in}
\nextexample
\vbox to 4pc{\offinterlineskip% 仅为显示 \vskip 的效果。
   \hbox{一}\vskip 0pc plus 1pc \hbox{二}
      \vskip .5pc \hbox{三}}
|
\produces
\smallskip
\vbox to 4pc{\offinterlineskip% Just show effects of \vskip.
%  \hbox{one}\vskip 0pc plus 1pc \hbox{two}
%     \vskip .5pc \hbox{three}}
   \hbox{一}\vskip 0pc plus 1pc \hbox{二}
      \vskip .5pc \hbox{三}}
\endexample
\enddesc

\begindesc
\cts hglue {\<glue>}
\cts vglue {\<glue>}
^^{竖直粘连}
^^{水平粘连}
\explain
%The |\hglue| command produces horizontal \minref{glue} that won't disappear at
%a line break; the |\vglue| command
%produces vertical \minref{glue} that won't disappear at a page break.
%In other respects these commands are just like |\hskip| and |\vskip|.
%You can use |\vglue| to produce blank space at the top of a page,
%e.g., above a title on the first page of a document, but
%^|\topglue| (next) is usually better for this purpose.
|\hglue| 命令生成水平的\minref{粘连},它不会在断行处消失;|\vglue| 命令生成竖直的\minref{粘连},它不会在分页处消失。除此以外,这些命令与 |\hskip| 和 |\vskip| 相似。你可以使用 |\vglue| 在文档第一页的标题上部等页面顶部产生空白间隔,但就此目的而言,随后的 ^|\topglue| 通常是更好的选择。
\enddesc

\begindesc
\cts topglue {\<glue>}
\explain
\margin{Command added; recent addition to \TeX}
%This command\footnote{|\topglue| was added to \TeX\ in version 3.0,
%later than the other enhancements introduced by ^{\newTeX}
%(\xref{newtex}).  It is first described in the \emph{eighteenth\/}
%edition of \texbook.} causes the space from the top of the page to the
%top of the first box on the page to be \<glue> precisely.
%The top of the page is considered to be at the baseline of an
%imaginary line of text just above the top line of the page.
%More precisely, it's a distance |\topskip| above the origin as given by
%|\hoffset| and |\voffset|.
\margin{加入的命令;新近加入到 \TeX}
该命令
\footnote{|\topglue| 是在 \TeX\ 3.0 中引入的,
比其它由^{\newTeX}(\xref{newtex})引入的增强特性稍晚。
在 \texbook 的 \emph{18th\/} 版中第一次得到描述。}
可以精确地产生从页面顶部至该页上第一个盒子顶部的间隔。
可以认为页面顶部位于页面第一行之上的一行无形文字的基线处。
更加准确地,它在 |\hoffset| 和 |\voffset| 确定的原点之上,且间距等于 |\topskip|。

%This command is useful because \TeX\ ordinarily adjusts the glue
%produced by |\topskip| in a complex way.  By using |\topglue| you can
%control the position of the first box on the page without worrying about
%those adjustments.
由于 \TeX\ 通常以非常复杂的方式调整由 |\topskip| 产生的粘连,所以这个命令是非常有用的。
通过使用 |\topglue|,你能够控制页面上第一个盒子的位置,而不必担心那些复杂的调整。

\enddesc

\begindesc
\cts kern {\<dimen>}
\explain
%The effect of this command depends on the mode that \TeX\ is in when
%it encounters it:
该命令产生的效果取决于 \TeX\ 遇到它时所处的模式:
\ulist

%\li In a horizontal mode, \TeX\ moves its position to the right (for a positive
%kern) or to the left (for a negative kern).
\li 在水平模式下,\TeX\ 向右(正的紧排)或向左(负的紧排)移动。

%\li In a vertical mode, \TeX\ moves its position down the page (for a positive
%kern) or up the page (for a negative kern).
\li 在竖直模式下,\TeX\ 向页面下方(正的紧排)或页面上方(负的紧排)移动。

\endulist
\noindent
%Thus a positive kern produces empty space while a negative kern
%causes \TeX\ to back up over something that it's already produced.
%This notion of a kern ^^{kerns}
%is different from the notion of a kern in some computerized
%typesetting systems---in \TeX, positive kerns push two letters \emph{apart}
%instead of bringing them closer together.
因此,正的紧排产生空白的间隔,而负的紧排使得 \TeX\ 倒退到已经存在的东西上。
在 \TeX 中,正的紧排将两个字母\emph{分开},而不是使它们更近一些。
^{紧排}的这一设计与一些计算化排版系统是不同的。

%A kern is similar to
%\minref{glue}, except that (a)~a kern can neither stretch nor shrink,
%and (b)~\TeX\ will only break a line or a page at a kern if the kern
%is followed by glue and is not part of a math formula.
%If \TeX\ finds a kern at the
%end of a line or a page, it discards the kern.
%If you want to get the effect of a kern that never disappears,
%use ^|\hglue| or ^|\vglue|.
紧排与\minref{粘连}相似,不同的是 (a)~紧排不能被伸展或收缩;
(b)~如果紧排后紧接粘连,并且不是数学公式的一部分时,\TeX\ 不能在紧排处断行或分页。
如果 \TeX\ 发现紧排位于一行或一页的结尾,该紧排将会被忽略。
如果你希望得到不会消失的紧排的效果,使用 ^|\hglue| 或 ^|\vglue|。

%You can use |\kern| in math mode, but you can't use |mu| units
%\seeconcept{mathematical unit}
%for \<dimen>.  If you want |mu| units, use |\mkern|
%(\xref\mkern) instead.
%^^{line breaks//kerns at}
%^^{page breaks//kerns at}
你可以在数学模式中使用 |\kern|,但你不能使用 |mu| 作为 \<dimen> 的单位\seeconcept{数学单位}。
如果你希望使用 |mu| 作为单位,可以使用 |\mkern| (\xref\mkern )代替之。
^^{断行//断行处的紧排}
^^{分页//分页处的紧排}

\example
\centerline{$\Downarrow$}\kern 3pt % 竖直的紧排
\centerline{$\Longrightarrow$\kern 6pt % 水平的紧排
   {\bf 留意我的警示!!}\kern 6pt % 另一水平的紧排
   $\Longleftarrow$}
\kern 3pt % 另一竖直的紧排
\centerline{$\Uparrow$}
|
\produces
\centerline{$\Downarrow$}\kern 3pt % a vertical kern
\centerline{$\Longrightarrow$\kern 6pt % a horizontal kern
%  {\bf Heed my warning!}\kern 6pt % another horizontal kern
   {\bf 留意我的警示!}\kern 6pt % another horizontal kern
   $\Longleftarrow$}
\kern 3pt % another vertical kern
\centerline{$\Uparrow$}
\endexample
\enddesc

%\begindesc
%\makecolumns 4/2:
%\cts hfil {}
%\cts hfill {}
%\cts vfil {}
%\cts vfill {}
%\explain
%\bix^^{glue//infinitely stretchable}
%These commands produce infinitely stretchable horizontal
%and vertical glue that
%overwhelms any finite stretch that may be present.
%|\hfil| and |\hfill| produce horizontal glue, while
%|\vfil| and |\vfill| produce vertical glue.
\begindesc
\makecolumns 4/2:
\cts hfil {}
\cts hfill {}
\cts vfil {}
\cts vfill {}
\explain
\bix^^{粘连//可无限伸展的粘连}
这些命令产生可无限伸展的水平或竖直的粘连,它们将取代任何存在的有限伸展。|\hfil| 和 |\hfill| 产生水平的粘连,而 |\vfil| 和 |\vfill| 产生竖直的粘连。

%|\hfill| is infinitely larger than |\hfil|.
%If both |\hfill| and |\hfil| appear in the same \minref{box},
%the |\hfill| will consume all the available extra space
%and the |\hfil| will be effectively ignored.
%|\hfill| can in turn be overwhelmed by |\hskip 0pt plus 1filll|.
%The glue produced by
%|\hfil| and |\hfill| never shrinks.
%|\hfill| 无限地大于 |\hfil|。如果 |\hfill| 和 |\hfil|  出现在一同一个\minref{盒子}里,|\hfill| 将占据所有可以获得的额外间隔,而 |\hfil| 的效应将被忽略。而 |\hfill| 可以被 |\hskip 0pt plus 1filll| 取代。由 |\hfil| 和 |\hfill| 产生的粘连不能被压缩。

%The behavior of |\vfil| and |\vfill| is analogous.
|\vfil| 和 |\vfill| 有着类似的行为。

\example
\hbox to 2in{左\hfil 中 \hfil 右}
|
\produces
%\hbox to 2in{Left\hfil Middle \hfil Right}
\hbox to 2in{左\hfil 中 \hfil 右}

\doruler{\8\8}2{in}
\nextexample
\hbox to 2in{左\hfil 中 \hfill 右}
|
\produces
%\hbox to 2in{Left\hfil Middle \hfill Right}
\hbox to 2in{左\hfil 中 \hfill 右}

\doruler{\8\8}2{in}
\nextexample
\leftline{%
\vbox to 4pc{%
   \hbox{上}\vfil\hbox{中}\vfil \hbox{下}}\quad
\vbox to 4pc{%
   \hbox{上}\vfil\hbox{中}\vfill\hbox{下}}}
|
\produces
\smallskip
\leftline{%
\vbox to 4pc{%
   %\hbox{Top}\vfil\hbox{Middle}\vfil \hbox{Bottom}}\quad
   \hbox{上}\vfil\hbox{中}\vfil \hbox{下}}\quad
\vbox to 4pc{%
   %\hbox{Top}\vfil\hbox{Middle}\vfill\hbox{Bottom}}}
   \hbox{上}\vfil\hbox{中}\vfill\hbox{下}}}
\endexample

%\eix^^{glue//infinitely stretchable}
%\enddesc
\eix^^{粘连//可无限伸展的粘连}
\enddesc

\begindesc
\cts hss {}
\cts vss {}
\explain
%These commands produce horizontal and vertical glue
%that is both infinitely stretchable and
%infinitely shrinkable. The glue can shrink
%to a negative distance, producing the effect of backspacing along a line
%(for |\hss|) or moving back up a page (for |\vss|).
这些命令产生水平和竖直的可无限伸展和收缩的粘连。
粘连可以收缩至负的距离,产生的效果是%
(对于 |\hss| 而言)沿一行向左移动或(对于 |\vss| 而言)向页面顶部移动。

\example
\line{正文文本\hfil\hbox to 0pt{页边空白\hss}}
% `页边空白\hss' 收缩到宽度为零的水平盒子中。
|
\produces
%\line{text\hfil\hbox to 0pt{margin\hss}}
\line{正文文本\hfil\hbox to 0pt{页边空白\hss}}
\nextexample
\vbox to 1pc{\hrule width 6pc % Top of box.
   \hbox{1} \vskip 1pc\hbox to 2pc{\hfil 2}
   % \vss 消除了由 \vskip 产生的额外间距。
   \vss \hbox to 3pc{\hfil 3}
   \hrule width 6pc}% 盒子的底部
|
\produces
\medskip
\vbox to 1pc{\hrule width 6pc % top of box
   \hbox{1} \vskip 1pc\hbox to 2pc{\hfil 2}
   \vss \hbox to 3pc{\hfil 3}
   \hrule width 6pc}% bottom of box
\vskip 2.5pc
\endexample
\enddesc

%\begindesc
%\cts hfilneg {}
%\cts vfilneg {}
%\explain
%^^{glue//negative}
%These commands cancel the effect of a preceding |\hfil|
%or |\vfil|. While |\hfil| and |\vfil|
%produce infinitely stretchable positive \minref{glue}, |\hfilneg|
%and |\vfilneg| produce infinitely stretchable negative glue.
%(Thus, $n$ |\hfilneg|s cancel $n$ ^|\hfil|s, and similarly for
%|\vfilneg|.)
%The main use of |\hfilneg| and |\vfilneg|
%is to counteract the effect of an |\hfil| or |\vfil|
%inserted by a \minref{macro}.
\begindesc
\cts hfilneg {}
\cts vfilneg {}
\explain
^^{粘连//负粘连}
这些命令可以消除其前接的 |\hfil| 或 |\vfil| 产生的效果。当 |\hfil| 和 |\vfil| 产生正的无限可伸展的粘连时,|\hfilneg| 和 |\vfilneg| 产生负的无限可伸展粘连。(因此,$n$ |\hfilneg| 消除 $n$ ^|\hfil| 产生的效果,对于 |\vfilneg| 也是相似的。)|\hfilneg| 和 |\vfilneg| 主要的用途是抵消由\minref{宏} 引入的 |\hfil| 或 |\vfil| 产生的效果。

%|\hfilneg| and |\vfilneg| have
%the curious property that if they are the only infinitely stretchable
%glue in a box, they produce exactly the same effect as |\hfil|
%and |\vfil|.
如果它们是一个盒子中仅有的可无限伸展的粘连,|\hfilneg| 和 |\vfilneg| 则具有奇异的特性,即它们产生与 |\hfil| 和 |\vfil| 完全一致的效果。

\example
\leftline{\hfil 位于右端\hfilneg}
% 消除了 \leftline 在其参数右侧产生的 \hfil。
|
\produces
%\leftline{\hfil on the right \hfilneg}
\leftline{\hfil 位于右端 \hfilneg}
% Cancel the \hfil that \leftline produces to the right
% of its argument.
%
\nextexample
\def\a{\hbox to 1pc{\hfil 2}\vfil}
\vbox to 4pc{\hbox{1} \vfil \a
   \vfilneg \hbox to 2pc{\hfil 3}}
|
\produces
\smallskip
\def\a{\hbox to 1pc{\hfil 2}\vfil}
\vbox to 4pc{\hbox{1} \vfil \a
   \vfilneg \hbox to 2pc{\hfil 3}}
\endexample\enddesc

%{\emergencystretch=2em
%\see |\hbadness| and |\vbadness| (\xref \vbadness),
%|\hfuzz| and |\vfuzz| (\xref \vfuzz),
%\conceptcit{leaders}.\par}
%\eix^^{space//producing}
%\eix^^{horizontal space}
%\eix^^{vertical space}
\see |\hbadness| 和 |\vbadness|(\xref \vbadness ),
|\hfuzz| 和 |\vfuzz|(\xref \vfuzz ),及\conceptcit{指引线}。
\eix^^{间隔//产生间隔}
\eix^^{水平间隔}
\eix^^{竖直间隔}

%==========================================================================
%\section {Manipulating boxes}
\section {操作盒子}

%==========================================================================
%\subsection {Constructing hboxes and vboxes}
\subsection {构造 hbox 和 vbox}

%\begindesc
%\bix^^{box commands}
%^^{hboxes//constructing with \b\tt\\hbox\e}
\begindesc
\bix^^{盒子命令}
^^{水平盒子//用 \b\tt\\hbox\e 构造}
%
\cts hbox {\rqbraces{\<horizontal mode material>}}
\aux\cts hbox {{\bt to} \<dimen> \rqbraces{\<horizontal mode material>}}
\aux\cts hbox {{\bt spread} \<dimen> \rqbraces{\<horizontal mode material>}}
\explain
%This command produces an hbox
%(horizontal \minref{box}) containing \<horizontal mode material>.
%The braces around \<horizontal mode material> define a group.
%\TeX\ doesn't break the \<horizontal mode material> into lines,
%since it's in restricted horizontal mode when it's assembling the box.
%\TeX\ won't change the size of the box once it's been produced.
该命令产生一个 hbox(水平\minref{盒子})以容纳 \<horizontal mode material>。
\<horizontal mode material> 两侧的大括号定义一个编组。
\TeX\ 不会对 \<horizontal mode material> 断行,
因为当其组装盒子时它处于受限水平模式下。一旦盒子生成后,\TeX\ 不会改变其大小。

%|\hbox| is often useful when you want to keep some text all on one line.
%If your use of |\hbox| prevents \TeX\ from breaking lines in an acceptable
%way, \TeX\ will complain about an overfull hbox.
当你希望将一些文字全部放在一行上时,|\hbox| 是有用的。
如果你所用的 |\hbox| 使得 \TeX\ 不能以一种可以接受的方式断行时,
\TeX\ 会给出 hbox 过满的警告。

%The width of the hbox depends on the arguments to |\hbox|:
%\ulist\compact
%\li If you specify only \<horizontal mode material>,
%the hbox will have its natural \minref{width}.
%\li If you specify |to| \<dimen>, the width of the hbox will be \<dimen>.
%\li If you specify |spread| \<dimen>, the width of the hbox will be
%its natural width plus \<dimen>, i.e., the hbox will be spread out by
%\<dimen>.
%\endulist
hbox 的宽度取决于 |\hbox| 的参数:
\ulist\compact
\li 如果你只设定了 \<horizontal mode material>,hbox 将具有参数本身的\minref{宽度}。
\li 如果你设定了 |to| \<dimen>,则 hbox 的宽度将是 \<dimen>。
\li 如果你设定了 |spread| \<dimen>,则 hbox 的宽度将是参数本身的宽度再加上 \<dimen>,也就是说,hbox 将伸展 \<dimen>。
\endulist

%The ^|\hfil| command (\xref\hfil) is useful for filling out an
%hbox with empty space when the material in the box isn't as wide as
%the width of the box.
当盒子中内容的宽度没有盒子宽,需要使用空白间隔来填充 hbox 时,^|\hfil| 命令(\xref\hfil )是非常有用的。
\example
\hbox{ugly suburban sprawl}
\hbox to 2in{ugly \hfil suburban \hfil sprawl}
\hbox spread 1in {ugly \hfil suburban \hfil sprawl}
% 在上面两行中,如果去掉 \hfil,将会得到 `underfull hbox' 警告。
|
\produces
\hbox{ugly suburban sprawl}
\hbox to 2in{ugly \hfil suburban \hfil sprawl}
\hbox spread 1in {ugly \hfil suburban \hfil sprawl}
% Without \hfil in the two preceding lines,
% you'd get `underfull hbox'es.

\doruler{\8\8\8}3{in}
\endexample
\enddesc

%\begindesc
%\cts vtop {\<vertical mode material>}
%\aux\cts vtop {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
%\aux\cts vtop {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
%\cts vbox {\rqbraces{\<vertical mode material>}}
%\aux\cts vbox {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
%\aux\cts vbox {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
%\explain
%^^{hbox//constructing with \b\tt\\hbox\e}
%These commands
%produce a \minref{vbox} (vertical \minref{box})
%containing \<vertical mode material>.
%The braces around \<vertical mode material> define a group.
%\TeX\ is in internal vertical mode when it's assembling the box.
%\TeX\ won't change the size of the box once it's been produced.
\begindesc
\cts vtop {\<vertical mode material>}
\aux\cts vtop {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
\aux\cts vtop {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
\cts vbox {\rqbraces{\<vertical mode material>}}
\aux\cts vbox {{\bt to} \<dimen> \rqbraces{\<vertical mode material>}}
\aux\cts vbox {{\bt spread} \<dimen> \rqbraces{\<vertical mode material>}}
\explain
^^{水平盒子//用 \b\tt\\hbox\e 构造}
这些命令产生一个 \minref{vbox}(竖直\minref{盒子})以容纳 \<vertical mode material>。
\<vertical mode material> 两侧的大括号定义一个编组。
当 \TeX\ 组装盒子时它处于内部竖直模式下。一旦盒子生成后,\TeX\ 不会改变其大小。

%The difference between |\vtop| and |\vbox| lies in where \TeX\ puts
%the reference point of the constructed vbox.
%Ordinarily, the reference point gotten from |\vtop| tends to be at or near
%the top of the constructed vbox,
%while
%the reference point gotten from |\vbox| tends to be at or near
%the bottom of the constructed vbox.
%Thus a row of vboxes all constructed with |\vtop|
%will tend to have their tops nearly in a line,
%while a row of vboxes all constructed with |\vbox|
%will tend to have their bottoms nearly in a line.
|\vtop| 和 |\vbox| 之间的不同点在于 \TeX\ 放置已构成的 vbox 的基准点的位置。
通常情况下,由 |\vtop| 获得的基准点位于或接近于已构成的 vbox 的顶部;
而 |\vbox| 获得的基准点位于或接近于已构成的 vbox 的底部。
因此,一行全部由 |\vtop| 构成的 vbox,其顶部将会近似在一条线上;
相应地,一行全部由 |\vbox| 构成的 vbox,其底部将会近似在一条线上。

%|\vtop| and |\vbox| are often useful
%when you want to keep some text together on a single page.
%(For this purpose, it usually doesn't matter which command you use.)
%If your use of these commands
%prevents \TeX\ from breaking pages in an acceptable
%way, \TeX\ will complain that it's found an overfull or underfull vbox while
%|\output| is active.
当你希望将一些文字放在单独的一页上时,|\vtop| 和 |\vbox| 是有用的。%
(为了这个目的,它通常不在乎你使用的命令。)%
如果你使用这些命令使得 \TeX\ 不能以一种可以接受的方式分页时,
\TeX\ 会在 |\output| 处于活动的情况下,给出 vbox 过满或不足的警告。

%The height of a vbox depends on
%the arguments to |\vtop| or |\vbox|.
%For |\vbox|, \TeX\ determines the height as follows:
%\ulist\compact
%\li If you specify only \<vertical mode material>,
%the vbox will have its natural height.
%\li If you specify |to| \<dimen>,
%the height of the vbox will be \<dimen>.
%\li If you specify |spread| \<dimen>, the height of the vbox will be
%its natural height plus \<dimen>, i.e.,
%the height of the vbox will be stretched vertically by \<dimen>.
%\endulist
%\noindent
%For |\vtop|,
%\TeX\ constructs the box using its rules for |\vbox| and then
%apportions the vertical extent between the height and the depth as
%described below.
vbox 的高度取决于 |\vtop| 或 |\vbox| 的参数。对于 |\vbox|,\TeX\ 采用如下方法确定其高度:
\ulist\compact
\li 如果你只设定 \<vertical mode material>,vbox 将具有参数本身的高度。
\li 如果你设定 |to| \<dimen>,vbox 的高度将是 \<dimen>。
\li 如果你设定了 |spread| \<dimen>,则 vbox 的高度将是参数本身的高度再加上 \<dimen>,
也就是说,vbox 将在竖直方向上伸展 \<dimen>。
\endulist
\noindent
对于 |\vtop|,\TeX\ 采用 |\vbox| 一样的规则来构造盒子,
然后以下面描述的方法在高度和深度之间分配竖直方向上的扩展。

%Ordinarily, the width of a constructed vbox is the width of the widest
%item inside it.\footnote
%{More precisely, it's the distance from the reference point to the rightmost
%edge of the constructed vbox.  Therefore,
%if you move any of the items right using ^|\moveright| or
%^|\moveleft| (with a negative distance),
%the constructed vbox might be wider.}
%The rules for apportioning the vertical extent between the
%height and the depth are more complicated:
%\ulist
%\li For |\vtop|,
%the height is the height of its first item, if that item is a box or rule.
%Otherwise the height is zero. The depth is whatever vertical
%extent remains after the height is subtracted.
%\li For |\vbox|,
%the depth is the depth of its last item, if that item is a box or rule.
%Otherwise the depth is zero. The height is whatever vertical
%extent remains after the depth is subtracted.%
%\footnote{In fact, there's a further complication.
%Suppose that after the depth has been determined
%using the two rules just given, the depth turns out to be greater than
%^|\boxmaxdepth|.
%Then the depth is reduced to |\boxmaxdepth| and the height is adjusted
%accordingly.}
%\endulist
通常,构造的 vbox 的宽度是其内部最宽项目的宽度。
\footnote{更准确地说,是从基准点至构造的 vbox 最右侧之间的距离。
因此,如果你使用 ^|\moveright| 或(负数距离的)^|\moveleft| 向右移动任何项目,
那么构造的 vbox 则可能更宽。}
在高度与深度间分配竖直扩展的规则更加复杂:
\ulist
\li 对于 |\vtop|,如果第一个项目是一个盒子或标线,则其高度是其第一个项目的高度。
否则,其高度是零。深度是减去高度后的竖直扩展。
\li 对于 |\vbox|,如果最后一个项目是一个盒子或标线,则其深度是其最后一个项目的深度。
否则浓度是零。高度是减去深度后的竖直扩展。
\footnote{实际上,规则可以更加复杂。假定在深度确定后,使用给出的两条规则,
则深度将会大于 ^|\boxmaxdepth|。 随后,深度将被缩小至 |\boxmaxdepth|,高度也相应地被调整。}
\endulist

%The |\vfil| command (\xref\vfil) is useful for filling out a vbox
%^^|\vfil//filling a vbox|
%with empty space when the material in the box isn't as tall as
%the vertical extent of the box.
当盒子中内容的高度没有盒子竖直伸展高,
需要使用空白间隔来填充 vbox ^^|\vfil//填充竖直盒子|时,
^|\vfil| 命令(\xref\vfil )是非常有用的。
\example
\hbox{\hsize = 10pc \raggedright\parindent = 1em
\vtop{在这个例子中,我们将看到如何使用 vbox 产生双栏的效果。
每个 vbox 都包含两个段落,除了设置为左对齐以外均依照 \TeX
通常的规则进行排版。\par
这实际上并不是获得真正双栏的最好的方法,因为两栏}
\hskip 2pc
\vtop{\noindent
并不对称,而且我们无法自动选择第一栏在何处断开,
甚至不能确定第一栏的最后一行。\par
然而,将行文放在 vbox 中是一个将文本放在页面上
你希望的位置上的有用的技巧。
}}
|
\produces
\hbox{\hsize = 10pc \raggedright\parindent = 1em
%\vtop{In this example, we see how to use vboxes to
%produce the effect of double columns.  Each vbox
%contains two paragraphs, typeset according to \TeX's
%usual rules except that it's ragged right.\par
%This isn't really the best way to get true double
%columns because the columns}
%\hskip 2pc
%\vtop{\noindent
%aren't balanced and we haven't done anything to choose
%the column break automatically or even to fix up the
%last line of the first column.\par
%However, the technique of putting running text into a
%vbox is very useful for placing that text where you
%want it on the page.}}
\vtop{在这个例子中,我们将看到如何使用 vbox 产生双栏的效果。
每个 vbox 都包含两个段落,除了设置为左对齐以外均依照 \TeX
通常的规则进行排版。\par
这实际上并不是获得真正双栏的最好的方法,因为两栏}
\hskip 2pc
\vtop{\noindent
并不对称,而且我们无法自动选择第一栏在何处断开,
甚至不能确定第一栏的最后一行。\par
然而,将行文放在 vbox 中是一个将文本放在页面上
你希望的位置上的有用的技巧。
}}
\nextexample
\hbox{\hsize = 1in \raggedright\parindent = 0pt
\vtop to .75in{\hrule 这个盒子的深度是 .75in。 \vfil\hrule}
\qquad
\vtop{\hrule 这个盒子具体其本身的深度。 \vfil\hrule}
\qquad
\vtop spread .2in{\hrule 这个盒子的深度比其自身的深度多 .2in。\vfil\hrule}}
|
\produces
\hbox{\hsize = 1in \raggedright\parindent=0pt
%\vtop to .75in{\hrule This box is .75in deep. \vfil\hrule}
\vtop to .75in{\hrule 这个盒子的深度是 .75in。 \vfil\hrule}
\qquad
%\vtop{\hrule This box is at its natural depth. \vfil\hrule}
\vtop{\hrule 这个盒子具体其本身的深度。 \vfil\hrule}
\qquad
%\vtop spread .2in{\hrule This box is .2in deeper than
%                  its natural depth.\vfil\hrule}}
\vtop spread .2in{\hrule 这个盒子的深度比其自身的深度多 .2in。\vfil\hrule}}
\nextexample
% 显示 \vbox 是如何底部对齐,而非顶部对齐的。
\hbox{\hsize = 1in \raggedright
\vbox to .5in{\hrule 这个盒子的深度是 .5in。\vfil\hrule}
\qquad
\vbox to .75in{\hrule 这个盒子的深度是 .75in。\vfil\hrule}}
|
\produces
\hbox{\hsize = 1in \raggedright
%\vbox to .5in{\hrule This box is .5in deep.\vfil\hrule}
\vbox to .5in{\hrule 这个盒子的深度是 .5in。\vfil\hrule}
\qquad
%\vbox to .75in{\hrule This box is .75in deep.\vfil\hrule}}
\vbox to .75in{\hrule 这个盒子的深度是 .75in。\vfil\hrule}}
\vskip 16pt % to avoid running into the next command description
\endexample
\enddesc

\begindesc
%\margin{Two commands interchanged here.}
\margin{可交换的两个命令}
\cts boxmaxdepth {\param{dimen}}
\explain
%This parameter contains a dimension $D$.
%\TeX\ will not construct a box whose depth exceeds $D$.
%If you produce a box whose depth $d$ would exceed $D$,
%\TeX\ will transfer the
%excess depth to the height of the box, effectively moving the
%\minref{reference point} of the box down by $d-D$.
%If you set |\boxmaxdepth| to zero, \TeX\ will line up a row of vboxes
%so that their bottom boundaries all lie on the same horizontal line.
%\PlainTeX\ sets |\boxmaxdepth| to |\maxdimen| \ctsref{\maxdimen},
%so |\boxmaxdepth| won't affect your boxes unless you change it.
这个参数包含的是一个尺寸 $D$。如果盒子的深度超过 $D$,\TeX\ 将不会构造这个盒子。
如果你生成一个盒子,其深度 $d$ 大于 $D$,\TeX\ 将超出的深度传递给盒子的高度,
即高效地将盒子的\minref{基准点}向下移动 $d-D$。如果你将 |\boxmaxdepth| 设为零,
\TeX\ 会将盒子向上排一列,以便它们的底线都位于同一个水平线上。
\PlainTeX\ 将 |\boxmaxdepth| 设为 |\maxdimen|\ctsref{\maxdimen},
因此,|\boxmaxdepth| 不会影响你的盒子,除非你有意改动它。
\enddesc

\begindesc
\cts underbar {\<argument>}
\explain
%This command puts \<argument> into an \minref{hbox}
%and underlines it without regard to anything that protrudes below the
%\minref{baseline} of the box.
这个命令将 \<argument> 放入到一个 \minref{hbox},并在其下划线,而不考虑任何突出到盒子的\minref{基线}以下的东西。
\example
\underbar{为什么不学习 \TeX?}
|
\produces
%\underbar{为什么不学习 \TeX?}
\underbar{Why not learn \TeX?}
\endexample
\enddesc

\begindesc
\cts everyhbox {\param{token list}}
\cts everyvbox {\param{token list}}
\explain
%These parameters contain token lists that \TeX\ expands at the start of
%every \minref{hbox} or \minref{vbox} that it constructs.
%Any items resulting from the expansion then become
%the beginning of the list of items for the box.
%By default these token lists are empty.
这些参数包含的是记号列表。\TeX\ 会在开始构造每个 \minref{hbox} 或 \minref{vbox} 时对其进行扩展。来自于扩展的任何项目随后成为盒子的项目列表的开始。这些记号列表默认是空的。
\enddesc

%==========================================================================
%\subsection {Setting and retrieving the contents of boxes}
\subsection {设置和获取盒子的内容}

%\begindesc
%\bix^^{box registers}
%%
%\cts setbox {\<register>\thinspace{\bt =}\thinspace\<box>}
%\cts box {\<register>}
%\explain
%^^{assignments//of boxes}
%These commands respectively set and retrieve the contents
%of the box register
%whose number is \<register>.
%Note that you set a box register a little differently than
%you set the other kinds of registers: you use
%|\setbox|$\,n$~|=| rather than |\box|$\,n$~|=|.
\begindesc
\bix^^{盒子寄存器}
%
\cts setbox {\<register>\thinspace{\bt =}\thinspace\<box>}
\cts box {\<register>}
\explain
^^{赋值//给盒子赋值}
这些命令分别设置和获取编号为 \<register> 的盒子寄存器的内容。
需要注意,设置盒子寄存器与设置其它寄存器有细微的差别:
你应该使用 |\setbox|$\,n$~|=|,而不是 |\box|$\,n$~|=|。

%\emph{Retrieving the contents of a box register
%with these commands has the side effect of emptying it,
%so that the box register become void.}  If you don't want that to happen,
%you can use |\copy| (see below) to retrieve the contents.
%You should use |\box| in preference to |\copy|
%when you don't care about what's in a box register after you've used it,
%so as not to exhaust \TeX's memory by filling it with obsolete boxes.
\emph{使用这些命令获取盒子寄存器中的内容时,有清空其内容的副作用,所以盒子寄存器将失效。}如果你不希望这些发生,你可以使用 |\copy|(参见后面的内容)来获取内容。如果你不在乎你使用之后的盒子寄存器中的内容,你应该优先使用 |\box| 而不是 |\copy|,这样可以不致于用废弃的盒子来消耗 \TeX\ 的内存。

\example
\setbox0 = \hbox{蘑菇}
\setbox1 = \vbox{\copy0\box0\box0}
\box1
|
\produces
%\setbox0 = \hbox{mushroom}
\setbox0 = \hbox{蘑菇}
\setbox1 = \vbox{\copy0\box0\box0}
\box1
\endexample
\enddesc

%\begindesc
%\cts copy {\<register>}
%\explain
%^^{boxes//copying}%\minrefs{box}
%\minrefs{盒子}
%This command
%produces a copy of box register \<register>.
%This command is useful when you want to retrieve the contents of a box
%register but don't want to destroy the contents.
%(Retrieving the register contents with ^|\box| makes the register void.)
\begindesc
\cts copy {\<register>}
\explain
^^{盒子//复制盒子}%\minrefs{box}
\minrefs{盒子}
这个命令可以产生盒子寄存器 \<register> 的一个拷贝。当你希望获取一个盒子的内容,
但又不希望破坏其中的内容时是有用的。(使用 ^|\box| 获取寄取器内容会使寄存器失效。)
\example
\setbox0 = \hbox{美好}
祝你拥有 \copy0 \box0 \box0 的一天!
|
\produces
%\setbox0 = \hbox{good }
%Have a \copy0 \box0 \box0 day!
\setbox0 = \hbox{美好}
祝你拥有 \copy0 \box0 \box0 的一天!
\endexample
\enddesc

%\begindesc
%\cts unhbox {\<register>}
%\cts unvbox {\<register>}
%^^{boxes//extracting contents of}
%\explain
%These commands produce the list contained in box register \<register> and make
%that box register void.
%|\unhbox| applies to box registers containing
%hboxes and |\unvbox| applies to box registers containing vboxes.
%You should use these commands in preference to |\unhcopy| and |\unvcopy|
%(see below)
%when you don't care about what's in the box register after you've used it,
%so as not to exhaust \TeX's memory by filling it with obsolete boxes.
\begindesc
\cts unhbox {\<register>}
\cts unvbox {\<register>}
^^{盒子//提取盒子的内容}
\explain
这些命令可以给出盒子寄存器 \<register> 容纳的列表,并且使盒子寄存器失效。
|\unhbox| 适用于包含 hbox 的盒子寄存器,而 |\unvbox| 适用于包含 vbox 的盒子寄存器。
当你不在乎你使用之后的盒子寄存器中的内容,你应该优先使用这些命令而不是 |\unhcopy| 和 |\unvcopy|,
这样可以不致于用废弃的盒子来消耗 \TeX\ 的内存。
\example
\setbox0=\hbox{素甲鱼深深地叹息着,用一只手背抹着眼泪。}
\setbox1=\hbox{他想说话,可是有好一阵子泣不成声。}
\unhbox0 \unhbox1
% \box0 \box1 将并排设置两个 hbox
% (并且输出难看的过满行)。
\box1 % 什么也不输出。
|
\produces
%\setbox0=\hbox{The Mock Turtle sighed deeply, and
%drew the back of one flapper across his eyes. }
%\setbox1=\hbox{He tried to speak, but sobs choked
%               his voice. }
\setbox0=\hbox{素甲鱼深深地叹息着,用一只手背抹着眼泪。}
\setbox1=\hbox{他想说话,可是有好一阵子泣不成声。}
\unhbox0 \unhbox1
% \hbox0 \hbox1 would set two hboxes side by side
% (and produce a badly overfull line).
\box1 % Produces nothing.
\endexample
\enddesc

%\begindesc
%\cts unhcopy {\<register>}
%\cts unvcopy {\<register>}
%^^{boxes//extracting contents of}
%^^{boxes//copying }%\minrefs{box}
%\minrefs{盒子}
%\explain
\begindesc
\cts unhcopy {\<register>}
\cts unvcopy {\<register>}
^^{盒子//提取盒子的内容}
^^{盒子//复制盒子}%\minrefs{box}
\minrefs{盒子}
\explain
%These commands produce the list contained in box register \<register> and
%leave the contents of the register undisturbed.
%|\unhcopy| applies to box registers containing hboxes
%and |\unvcopy| applies to box registers containing vboxes.
这些命令可以给出盒子寄存器 \<register> 容纳的列表,并且保持寄存器的内容不被改变。
|\unhcopy| 适用于包含 hbox 的盒子寄存器,而 |\unvcopy| 适用于包含 vbox 的盒子寄存器。
\example
\setbox0=\hbox{素甲鱼深深地叹息着,用一只手背抹着眼泪。}
\setbox1=\hbox{他想说话,可是有好一阵子泣不成声。}
\unhcopy0 \unhcopy1\par\noindent
% \box0 \box1 将并排设置两个 hbox
% (并且输出难看的过满行)。
\box1 % 输出一个(不能被断行)hbox。
|
\produces
%\setbox0=\hbox{The Mock Turtle sighed deeply, and
%drew the back of one flapper across his eyes. }
%\setbox1=\hbox{He tried to speak, but sobs choked his
%          voice. }
\setbox0=\hbox{素甲鱼深深地叹息着,用一只手背抹着眼泪。}
\setbox1=\hbox{他想说话,可是有好一阵子泣不成声。}
\unhcopy0 \unhcopy1\par\noindent
% \hbox0 \hbox1 would set two hboxes side by side
% (and produce a badly overfull line).
\box1 % produces an hbox (which can't be broken)
\endexample
\enddesc

%\see |\wd|, |\dp|, |\ht| (\xref\ht).
%\eix^^{box registers}
\see |\wd|, |\dp|, |\ht|(\xref\ht )。
\eix^^{盒子寄存器}

%==========================================================================
%\subsection {Shifting boxes}
\subsection {移动盒子}

%\begindesc
%\cts moveleft {\<dimen> \<box>}
%\cts moveright {\<dimen> \<box>}
%\bix^^{boxes//shifting}
%%\minrefs{box}
%\minrefs{盒子}
%\explain
%These commands move \<box> left or right by \<dimen> (which can be
%negative). You can only apply |\moveleft| and |\moveright| to a box
%that's in a \minref{vertical list}.
\begindesc
\cts moveleft {\<dimen> \<box>}
\cts moveright {\<dimen> \<box>}
\bix^^{盒子//移动盒子}
%\minrefs{box}
\minrefs{盒子}
\explain
这些命令将 \<box> 向左或右移动 \<dimen>(这个数值可以是负的)。
你只能对存在于\minref{竖直列表} 中的盒子使用 |\moveleft| 和 |\moveright|。
\example
\vbox{\vbox{Phoebe}\vbox{walked}%
\moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
\vbox{mile.}}
|
\produces
\hfuzz = \maxdimen
\vbox{\vbox{Phoebe}\vbox{walked}%
\moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
\vbox{mile.}}
\endexample
\enddesc

\begindesc
\cts lower {\<dimen> \<box>}
\cts raise {\<dimen> \<box>}
\explain
%These commands move \<box> up or down by \<dimen>
%(which can be negative).
%You can only apply |\raise| and |\lower| to a box
%that's in a \minref{horizontal list}.
这些命令将 \<box> 向上或下移动 \<dimen>(这个数值可以是负的)。你只能对存在于\minref{水平列表} 中的盒子使用 |\raise| 和 |\lower|。
\example
关于你鼻子上的 \lower 6pt \hbox{肿块},你觉得
                \raise 6pt \hbox{沮丧}吗?
|
\produces
%Are you feeling \lower 6pt \hbox{depressed} about the
%                \raise 6pt \hbox{bump} on your nose?
关于你鼻子上的 \lower 6pt \hbox{肿块},你觉得
                \raise 6pt \hbox{沮丧}吗?
\endexample

\eix^^{盒子//移动盒子}
\enddesc

%==========================================================================
%\subsection {Dimensions of box registers}
\subsection {盒子寄存器的尺寸}

%\begindesc
%\bix^^{box registers}
%\bix^^{dimensions//of box registers}
%\cts ht {\<register>\param{dimen}}
%\cts dp {\<register>\param{dimen}}
%\cts wd {\<register>\param{dimen}}
%\explain
%These parameters refer to the ^{height}, ^{depth}, and ^{width}
%respectively of \minref{box} \minref{register} \<register>.
%You can use them to find out the dimensions of a box.
%You can also change the dimensions of a box, but it's a tricky business;
%if you want to be adventurous you can
%learn all about it from \knuth{pages~388--389}.
\begindesc
\bix^^{盒子寄存器}
\bix^^{尺寸//盒子寄存器的尺寸}
\cts ht {\<register>\param{dimen}}
\cts dp {\<register>\param{dimen}}
\cts wd {\<register>\param{dimen}}
\explain
这些参数分别表示\minref{盒子}\minref{寄存器} \<register> 的^{高度}、^{深度}和^{宽度}。
你可以使用这些命令获得一个盒子的尺寸。你也可以改变一个盒子的尺寸,但这是一个需要技巧的事情;
如果你希望成为冒险者,你可以从 \knuth{pages~388--389} 中获得全部的技巧。
\example
\setbox0 = \vtop{\hbox{一个}\hbox{米黄色的}\hbox{兔子}}%
那个盒子的宽度是 \the\wd0,高度是 \the\ht0,
深度是 \the\dp0。
|
\produces
%\setbox0 = \vtop{\hbox{a}\hbox{beige}\hbox{bunny}}%
%The box has width \the\wd0, height \the\ht0,
%and depth \the\dp0.
\setbox0 = \vtop{\hbox{一个}\hbox{米黄色的}\hbox{兔子}}%
那个盒子的宽度是 \the\wd0,高度是 \the\ht0,
深度是 \the\dp0。
%\endexample
%\eix^^{box registers}
%\eix^^{dimensions//of box registers}
%\enddesc
\endexample
\eix^^{盒子}
\eix^^{尺寸//盒子寄存器的尺寸}
\enddesc

%==========================================================================
%\subsection {Struts, phantoms, and empty boxes}
\subsection {支架、幻影和空盒子}

\begindesc
%\margin{This subsection is a merger of two previous subsections.
%The commands have also been reordered.}
\margin{这一小节是前两个小节的联合体。相应的命令也被重新排序。}
%\bix^^{struts}
%\cts strut {}
%\explain
%This command produces a box whose width is zero
%and whose height (|8.5pt|) and depth (|3.5pt|)
%are those of a more or less typical line of type in |cmr10|,
%the default \plainTeX\ font.
%Its main use is in forcing lines to have the same height
%when you've disabled \TeX's interline glue with
%|\offinter!-lineskip| ^^|\offinterlineskip| or a similar command,
%e.g., when you're constructing an alignment.
%If the natural height of a line is
%too short, you can bring it up to standard by including a |\strut|
%in the line.  The strut will force the height and depth of the line
%to be larger, but it won't print anything or consume any horizontal
%space.
\bix^^{支架}
\cts strut {}
\explain
这个命令产生一个宽度为零的盒子,
盒子的高度 (|8.5pt|) 和深度 (|3.5pt|) 与用 \plainTeX\ 的默认字体 |cmr10| 排出的典型的一行文字是一致的。
当你使用 |\offinter!-lineskip| ^^|\offinterlineskip| 或类似的命令关闭 \TeX\ 的行间粘连,
如你正在构建一个阵列时,该命令主要用于强迫一行具有相同的高度。
如果一行的自然高度过矮,你可以在行中插入一个 |\strut| 使它回到标准的高度。
支架将使得一行的高度和深度更大一些,但它不会打印出任何东西,或者消耗任何水平间隔。

%If you're setting type in a font that's bigger or smaller than |cmr10|,
%you should redefine |\strut| for that context.
如果你正在使用一个大于或小于 |cmr10| 的字体排版,你应该根据所处环境重新定义 |\strut|。
\example
\noindent % 使我们处于水平模式下。
\offinterlineskip % 我们得到固有的间隔。
% 下面这些 vbox 中的句号在竖直方向不是等间距的。
\vtop{\hbox{.}\hbox{.(}\hbox{.x}
   \hbox{.\vrule height 4pt depth 0pt}}\qquad
% 因为支架的缘故,
%下面这些 vbox 中的句号在竖直方向上则是等间距的。
\vtop{\hbox{.\strut}\hbox{.(\strut}\hbox{.x\strut}
   \hbox{.\vrule height 4pt depth 0pt\strut}}
|

\produces
\noindent % So we're in horizontal mode.
\offinterlineskip % So we get the inherent spacing.
% The periods in this vbox are not vertically equidistant.
\vtop{\hbox{.}\hbox{.(}\hbox{.x}
   \hbox{.\vrule height 4pt depth 0pt}}\qquad
% The periods in this vbox are vertically equidistant
% because of the struts.
\vtop{\hbox{.\strut}\hbox{.(\strut}\hbox{.x\strut}
   \hbox{.\vrule height 4pt depth 0pt\strut}}
\endexample
\enddesc

\begindesc
\cts mathstrut {}
\explain
%This command produces a phantom formula whose width is zero
%and whose height and depth are the same as those of a left parenthesis.
%|\mathstrut| is in fact defined as `|\vphantom(|'.
%Its main use is for getting radicals, underbars, and overbars to line
%up with other radicals, underbars, and overbars in a formula.
%It is much like ^|\strut| (\xref \strut),
%except that it adjusts itself to the different \minref{style}s
%that can occur in math formulas.
这个命令产生一个宽度为零的幻影公式,它的高度与深度与左圆括号是一致的。
|\mathstrut| 实际上的定义是 `|\vphantom(|'。
它主要用于使得根号、下横线和上横线能与公式中其它的根号、下横线和上横线成行排列。
除能根据出现在数学公式中的不同\minref{样式}自动调节以外,它与 ^|\strut| (\xref \strut)非常相似。
\example
$$\displaylines{
\overline{a_1a_2} \land \overline{b_1b_2}
\quad{\rm versus}\quad \overline{a_1a_2\mathstrut}
  \land \overline{b_1b_2\mathstrut}\cr
\sqrt{\epsilon} + \sqrt{\xi} \quad{\rm versus}\quad
\sqrt{\epsilon\mathstrut} + \sqrt{\xi\mathstrut}\cr}$$
|
\dproduces
\kern 4pt
$$\displaylines{
\overline{a_1a_2} \land \overline{b_1b_2}
\quad{\rm versus}\quad \overline{a_1a_2\mathstrut}
  \land \overline{b_1b_2\mathstrut}\cr
\sqrt{\epsilon} + \sqrt{\xi} \quad{\rm versus}\quad
\sqrt{\epsilon\mathstrut} + \sqrt{\xi\mathstrut}\cr}$$
\endexample
\eix^^{支架}
\enddesc

%\begindesc
%\cts phantom {\<argument>}
%\explain
%\bix^^{boxes//phantom}
%\bix^^{phantoms}
%This command produces an empty \minref{box}
%having the same size and placement
%that \<argument> would have were it typeset.
%One use of |\phantom| is for reserving space for a symbol that for some
%reason needs to be drawn in by hand.
\begindesc
\cts phantom {\<argument>}
\explain
\bix^^{盒子//幻影盒子}
\bix^^{幻影}
此命令产生一个空\minref{盒子},它的大小和位置与假定 \<argument> 被排版出来时的相同。
因某种原因需要手工给一个符号留出空间时,|\phantom| 就可派上用场。
\example
$1\phantom{9}2$
|
\produces
$1\phantom{9}2$
\endexample
\enddesc

\begindesc
\cts hphantom {\<argument>}
\cts vphantom {\<argument>}
\explain
%These commands produce phantom boxes\minrefs{box}\ that
%don't print anything:
%\ulist\compact
%\li |\hphantom| produces a box with the same width as \<argument>
%but zero height and depth.
%\li |\vphantom| produces a box with the same height and depth as \<argu\-ment>
%but zero width.
%\endulist
%\noindent
%Their main purpose is to force a subformula to have a certain minimum
%horizontal or vertical dimension.
这些命令产生幻影盒子\minrefs{box},并不打印任何东西:
\ulist\compact
\li |\hphantom| 产生一个宽度与 \<argument> 一致的盒子,但高度与深度均为零。
\li |\vphantom| 产生一个高度与深度与 \<argu\-ment> 一致的盒子,但宽度为零。
\endulist
\noindent
它们的主要目的是迫使一个子公式具有特定的最小水平或竖直尺寸。
\example
$$\left[\vphantom{u\over v}t\right] \star
      \left[{u\over v}\right]\quad
   \{\hphantom{xx}\}$$
|
\dproduces
\kern 4pt
$$\left[\vphantom{u\over v}t\right] \star
      \left[{u\over v}\right]\quad
   \{\hphantom{xx}\}$$
\endexample
\enddesc

\begindesc
\cts smash {\<argument>}
\explain
%This command typesets \<argument>,
%but forces the height and depth of its containing \minref{box} to be zero.
%You can use |\smash| and |\vphantom| in combination to give a subformula
%any height and depth that you wish.
该命令排出 \<argument>,但迫使其包含的\minref{盒子}的高度和深度设为零。你可以联合使用 |\smash| 和 |\vphantom| 来获得任何你期望高度与深度的子公式。
\example
$${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$
|
\dproduces
\kern 4pt
$${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$
\endexample
%\eix^^{boxes//phantom}
%\eix^^{phantoms}
%\enddesc
\eix^^{盒子//幻影盒子}
\eix^^{幻影}
\enddesc

%\begindesc
%^^{boxes//empty}
%\cts null {}
%\explain
%This command produces an empty \minref{hbox}.
\begindesc
^^{盒子//空盒子}
\cts null {}
\explain
这个命令产生一个空的 \minref{hbox}。
\example
\setbox0 = \null
空盒子 \null 的宽度是 \the\wd0,高度是 \the\ht0,
深度是 \the\dp0。
|
\produces
\setbox0 = \null
%The null box \null has width \the\wd0, height \the\ht0,
%and depth \the\dp0.
空盒子 \null 的宽度是 \the\wd0,高度是 \the\ht0,
深度是 \the\dp0。
\endexample
\enddesc


%==========================================================================
%\subsection {Parameters pertaining to malformed boxes}
\subsection {有关畸形盒子的参数}

%\begindesc
%\bix^^{boxes//overfull}
%\bix^^{boxes//underfull}
%\cts overfullrule {\param{dimen}}
%\explain
%This parameter specifies the width of the rule
%that \TeX\ appends to an overfull \minref{hbox}.
%\PlainTeX\ sets it to |5pt|.
\begindesc
\bix^^{盒子//过满盒子}
\bix^^{盒子//未满盒子}
\cts overfullrule {\param{dimen}}
\explain
这个参数设定 \TeX\ 附加在过满\minref{水平盒子}后的标线的宽度。\PlainTeX\ 将其设为 |5pt|。
\enddesc

\begindesc
\cts hbadness {\param{number}}
\cts vbadness {\param{number}}
\explain
%These parameters specify the thresholds of horizontal and vertical
%\minref{badness} for reporting underfull or overfull boxes.
%|\hbadness| applies to hboxes and |\vbadness| applies to vboxes.
%If the badness of a constructed box exceeds the threshold,
%\TeX\ will report an error.  If you raise the thresholds
%(the \plainTeX\ defaults are both $1000$),
%\TeX\ will be less likely to complain.
%Note that the settings of |\hbadness| and |\vbadness| have no effect on
%the appearance of your typeset document; they only affect the error
%messages that you get.
%See \knuth{page~302} for a precise description
%of how \TeX\ decides when to complain about an overfull or underfull
%box.
这些参数设定了报告盒子未满或过满警告时的水平和竖直的\minref{恶劣状态}的阈值。|\hbadness| 适用于 hbox,而 |\vbadness| 适用于 vbox。如果一个盒子的恶劣状态超过了阈值,\TeX\ 将报告一个错误。如果你提高阈值(\plainTeX 的默认值是 $1000$),\TeX\ 将不再经常给出警告。需要注意的是,设定 |\hbadness| 和 |\vbadness| 对你的文档排版结果没有影响,它们只影响你获得的错误信息。参见 \knuth{page~302},以获得 \TeX\ 如何确定在什么时候对过满或未满盒子进行警告的准确描述。

%\margin{The material on tolerance was inappropriate here and has been
%removed.  A new example replaces it.}
\margin{在这里讨论容许量的内容是不合适的,被去掉了。因此,采用一个新的例子取代了它。}
\example
\hbadness = 10000 % 取消任何关于 hbadness 的警告。
\hbox to 2in{a b}\par
\hbadness = 500 % 当 hbadness 超过 500 就给出警告。
\hbox to 2in{a\hskip 0pt plus .5in b}
|
\logproduces
Underfull \hbox (badness 5091) detected at line 4
\tenrm a b

\hbox(6.94444+0.0)x144.54, glue set 3.70787
.\tenrm a
.\glue 0.0 plus 36.135
.\tenrm b
|
\endexample
\enddesc

\begindesc
\cts badness {}
\explain
%This command yields the numerical value of the badness of the \minref{box}
%(either horizontal or vertical) that \TeX\ has most recently produced.
%If the box was overfull, |\badness| will be $1000000$; in all other cases
%it will be between $0$ and $10000$.
该命令给出 \TeX\ 刚刚产生的(水平的或竖直的)\minref{盒子}的恶劣状态的数值。
如果盒子是过满的,|\badness| 将是 $1000000$;在所有其它情况下,它将在 $0$ 至 $10000$ 之间。
\enddesc

\begindesc
\cts hfuzz {\param{dimen}}
\cts vfuzz {\param{dimen}}
\explain
%These parameters specify the amount that
%a \minref{box} can exceed its natural size before \TeX\ considers it to be
%overfull. ^^{boxes//overfull}
%|\hfuzz| applies to hboxes and |\vfuzz| applies to vboxes.
%\PlainTeX\ sets both parameters to |0.1pt|.
这些参数设置在 \TeX\ 认为一个盒子过满之前,一个\minref{盒子} 能够超出其本身大小的量。
^^{盒子//过满盒子}|\hfuzz| 适用于水平盒子,而 |\vfuzz| 适用于竖直盒子。\PlainTeX\ 将两个参数均设为 |0.1pt|。
\example
\hfuzz = .5in
\hbox to 2in{This box is longer than two inches.}
% 没有错误的结果。
|
\produces
\hfuzz = .5in
\hbox to 2in{This box is longer than two inches.}
% No error results
\doruler{\8\8\8}3{in}
\endexample

%\eix^^{boxes//overfull}
%\eix^^{boxes//underfull}
%\eix^^{box commands}
%\enddesc
\eix^^{盒子//过满盒子}
\eix^^{盒子//未满盒子}
\eix^^{盒子命令}
\enddesc

%\see |\tolerance| \ctsref{\tolerance}.
\see |\tolerance| \ctsref{\tolerance}。

%==========================================================================
%\section {Retrieving the last item from a list}
\section {从列表中获取最后的项目}

%\begindesc
%^^{boxes//last box in a list}
%^^{kerns//last kern in a list}
%^^{penalties//last penalty in a list}
%^^{glue//last glue item in a list}
%\margin{This section has been moved in its entirety from the chapter
%(`Commands for general operations')}
\begindesc
^^{盒子//列表中最后一个盒子}
^^{紧排//列表中最后一个紧排}
^^{惩罚//列表中最后一个惩罚项}
^^{粘连//列表中最后一个粘连}
\margin{这一节整个儿地从(“常规操作命令”)一章中移过来的。}
\cts lastkern {}
\cts lastskip {}
\cts lastpenalty {}
\cts lastbox {}
\explain
%These control sequences yield the value of the last item on the current
%list.  They aren't true commands because they can only appear as
%part of an argument.
%If the last item on the list isn't of the indicated type,
%they yield a zero value (or an empty box, in the case of |\lastbox|).
%For example,
%if the last item on the current list is a \minref{kern},
%|\lastkern| yields the dimension of that kern; if it
%isn't a kern, it yields a dimension of $0$.
这些控制序列产生位于当前列表最后的项目值。它们不是真正的命令,因为它们只能以参数的一部分出现。如果列表中的最后的项目不是指示类型,它们将给出零值(或者空盒子,在 |\lastbox| 的情况下)。例如,如果在当前列表中最后一项是一个\minref{紧排},|\lastkern| 给出那个紧排的尺寸;如果它不是紧排,它给出一个尺寸 $0$。

%Using |\lastbox| has the additional effect of removing the last box from
%the list.
%If you want the original |\last!-box| to remain on the list, you
%have to add a copy of it to the list.
%|\last!-box| is not permitted in a math list or in the main
%vertical~list.
使用 |\lastbox| 具有从列表中移除最后一个盒子的附加效应。如果你希望原来的 |\last!-box| 仍保留在列表中,你不得不向列表中增加它的一个拷贝。|\last!-box| 不允许用于数学列表或主竖直列表。

%These control sequences are
%most useful after macro calls that might have inserted entities of
%the indicated kinds.
这些控制序列在可能插入指标类型的宏调用后是非常有用的。

\example
\def\a{two\kern 15pt}
one \a\a\hskip 2\lastkern three\par
% 在`三'之前产生三倍的紧排。
\def\a{\hbox{二}}
一 \a
\setbox0 = \lastbox % 将`二'去掉。
三 \box0.
|
\produces
\def\a{二\kern 15pt}
一 \a\a\hskip 2\lastkern 三\par
% get three times as much space before `three'
\def\a{\hbox{二}}
一 \a
\setbox0 = \lastbox % removes `two'
三 \box0.
\endexample
\enddesc

\begindesc
\cts unkern {}
\cts unskip {}
\cts unpenalty {}
\explain
%If the last item on the current list is of type \minref{kern},
%\minref{glue}, or \minref{penalty} respectively, these commands remove it
%from that list.  If the item isn't of the right type, these commands have
%no effect.  Like ^|\lastbox|, you can't apply them to lists in math mode or to
%the main vertical list.
%These commands
%are most useful after a macro call that is known to have inserted
%a specific item that you don't want there.
%\TeX\ doesn't provide an ^|\unbox| command because |\lastbox| produces
%nearly the same effect.
如果当前列表的最后一项分别是\minref{紧排}、\minref{粘连}或\minref{惩罚}的类型,这些命令可以将它们从列表中去除。如果项目不是正确的类型,这些命令将不起作用。与 ^|\lastbox| 类似,你不能将它们应用于处于数学模式或主竖直列表中。在已知道会插入你不希望存在的特定项目的宏调用后,这些命令是非常有用的。\TeX\ 不提供 ^|\unbox| 命令,因为 |\lastbox| 产生了近乎一致的效果。
\enddesc


%==========================================================================
%\section {Rules and leaders}
\section {标线与指引线}

%\begindesc
%\bix^^{rules}
%\bix^^{horizontal rules}
%\bix^^{vertical rules}
\begindesc
\bix^^{标线}
\bix^^{水平标线}
\bix^^{竖直标线}
%
\cts hrule {}
\aux\cts hrule {\bt height \<dimen> width \<dimen> depth \<dimen>}
\cts vrule {}
\aux\cts vrule {{\bt width \<dimen> height \<dimen> depth \<dimen>}}
\explain
%The |\hrule| command produces a horizontal rule; the |\vrule| command
%produces a vertical rule.  You can specify any or all of the width,
%height, and depth of the rule---\TeX\ supplies default values for those
%that you omit.  You can give the dimensions of the rule in any order;
%the forms listed above show just two of the possible combinations.  You
%can even give a dimension of a given kind more than once---if you do,
%the last one is the one that counts.
|\hrule| 命令用于产生水平的标线;相应的 |\vrule| 命令用于产生竖直的标线。
你可以指定标线的宽度、高度或深度的任意或全部。
\TeX\ 会为你省略的那些提供默认值。你可以以任何顺序给定标线的尺寸;
上面给出的形式只是可能的组合中的两个。
你甚至可以为一个给定类型的尺寸给出多个值---如果你这么做,起作用的是最后一个值。

%If you don't specify the width of a horizontal rule, the rule is
%extended horizontally to the boundaries of the innermost \minref{box} or
%\minref{alignment} that contains the rule.  If you don't specify the
%height of a horizontal rule, it defaults to |0.4pt|; if you don't
%specify the depth of a horizontal rule, it defaults to |0pt|.
如果你没有设定水平标线的宽度,
则标线将水平地扩展到包含标线的\minref{盒子}或\minref{阵列}的最内侧的边界。
如果你没有设定水平标线的高度,其默认值是 |0.4pt|;
如果你没有设定水平标线的深度,其默认值是 |0pt|。

%If you don't specify the width of a vertical rule, it defaults to
%|0.4pt|.  If you don't specify the height or the depth of a vertical
%rule, the rule is extended to the boundary of the innermost \minref{box}
%or \minref{alignment} that contains the rule.
如果你没有设定竖直标线的宽度,其默认值是 |0.4pt|;
如果你没有设定竖直标线的高度或深度,
则标线将地扩展到包含标线的\minref{盒子}或\minref{阵列}的最内侧的边界。

%\TeX\ treats a horizontal rule as an inherently vertical item
%and a vertical rule as an inherently horizontal item.
%Thus a horizontal rule is legal only in a \minref{vertical mode},
%while a vertical rule is legal only in a \minref{horizontal mode}.
%^^{horizontal mode//rules in}
%^^{vertical mode//rules in}
%If this seems surprising, visualize it---a horizontal rule runs
%from left to right and separates vertical items in a sequence, while
%a vertical rule runs up and down and
%separates horizontal items in a sequence.
\TeX\ 以内在的竖直项目处理水平标线,而以内在的水平项目处理竖直标线。
因此,水平标线只有\minref{竖直模式}下是有效的,而竖直标线只在\minref{水平模式}下是有效的。
^^{水平模式//水平模式中的标线}
^^{竖直模式//竖直模式中的标线}
如果觉得意外,可以直观化地观测。水平标线从左向右移动,并且将竖直的项目有序地分开,
而竖直标线从上到下,将水平项目有序地分开。

\example
\hrule\smallskip
\hrule width 2in \smallskip
\hrule width 3in height 2pt \smallskip
\hrule width 3in depth 2pt
|
\produces
\medskip
\hrule\smallskip
\hrule width 2in \smallskip
\hrule width 3in height 2pt \smallskip
\hrule width 3in depth 2pt
\nextexample
% 在这里,你能看到基线与 \hrule 的高度与深度之间有的关系。
\leftline{
   \vbox{\hrule width .6in height 5pt depth 0pt}
   \vbox{\hrule width .6in height 0pt depth 8pt}
   \vbox{\hrule width .6in height 5pt depth 8pt}
   \vbox{\hbox{基线}\kern 3pt \hrule width .6in}
}
|
\produces
\medskip
\leftline{
   \vbox{\hrule width .6in height 5pt depth 0pt}
   \vbox{\hrule width .6in height 0pt depth 8pt}
   \vbox{\hrule width .6in height 5pt depth 8pt}
   \vbox{\hbox{基线}\kern 3pt \hrule width .6in}
}
\nextexample
\hbox{( {\vrule} {\vrule width 8pt} )}
\hbox {( {\vrule height 13pt depth 0pt}
   {\vrule height 13pt depth 7pt} x)}
% 圆括号定义了两个连续的盒子的高度与深度;
% 而 `x' 位于基线之上。
|
\produces
\medskip
\hbox{( {\vrule} {\vrule width 8pt} )}
\hbox {( {\vrule height 13pt depth 0pt}
   {\vrule height 13pt depth 7pt} x)}
\endexample

%\eix^^{rules}
%\eix^^{horizontal rules}
%\eix^^{vertical rules}
%\enddesc
\eix^^{标线}
\eix^^{水平标线}
\eix^^{竖直标线}
\enddesc

%\begindesc
%\bix^^{leaders}
%\easy\cts leaders {\<box or rule> \<skip command>}
%\cts cleaders {\<box or rule> \<skip command>}
%\cts xleaders {\<box or rule> \<skip command>}
%\explain
%These commands produce \minref{leaders}, i.e., they fill a
%horizontal or vertical space with
%copies of a pattern \seeconcept{leaders}.
%The \<box> or \<rule> specifies a leader,
%i.e., a single copy of the pattern,
%while the \<skip command> specifies a
%window to be filled with a
%row or a column of the leaders.
%The pattern is repeated as many times as will fit into the window.
%If \<skip command> is a horizontal skip, the window
%contains a row of leaders and \TeX\ must be in a horizontal mode;
%if \<skip command> is a vertical skip, the window
%contains a column of leaders and \TeX\ must be in a vertical mode.
\begindesc
\bix^^{指引线}
\easy\cts leaders {\<box or rule> \<skip command>}
\cts cleaders {\<box or rule> \<skip command>}
\cts xleaders {\<box or rule> \<skip command>}
\explain
这些命令用于产生\minref{指引线},
也就是用某一个模式\seeconcept{指引线}的复本填充水平或竖直的间隔。
\<box> 或 \<rule> 确定一个指引体,即模式的单个复本,
而 \<skip command> 确定了用一行或一列的指引体填充的窗体。
模式将重复多次,直到填充了整个窗体。如果 \<skip command> 是一个水平的间距,
窗体中包括的是行向的指引线,\TeX\ 必须处于水平模式下;
如果 \<skip command> 是一个竖直的间距,
窗体中包括的是列向的指引线,\TeX\ 必须处于竖直模式下。

%The commands differ in how they arrange the repeated pattern in the space
%and where they put any leftover space:
这些命令的差异是它们在空间内如何组织重复的模式以及在什么地方放置剩余的间距:

%\ulist\compact
%\li For |\leaders|, \TeX\ aligns a row of leaders with the left end of
%the innermost \minref{box} $B$ that is to contain the result of the
%|\leaders| command.
%It aligns a column of leaders with the top of $B$.
%Those leaders that fall entirely within the window are retained.
%Any leftover space at the top and bottom of the window is left empty.
%\li For |\cleaders|, the leaders are centered within the window.
%\li For |\xleaders| the pattern is uniformly distributed throughout the window.
%If the leftover space is $l$ and the leader is repeated  $n$ times,
%\TeX\ puts space of width or height $l/(n+1)$ between adjacent leaders and
%at the two ends (left and right or top and bottom) of the leaders.
%\endulist
\ulist\compact
\li 对于 |\leaders|,\TeX\ 将一行指引线与包含 |\leaders| 这一命令结果的最内侧的\minref{盒子} $B$ 的左侧对齐。它将一列指引线与 $B$ 的顶端对齐。整个落在窗体中的指引线将被保留。任何在窗体顶部或底部剩余的间隔将空着。
\li 对于 |\cleaders|,指引线在窗体内是居中的。
\li 对于 |\xleaders|,模式是均匀分布在窗体中的。如果剩余空间是 $l$,指引体被重复 $n$ 次,\TeX\ 将在相邻的指引线以及指引线的两个端点(左和右或者上和下)之间填充宽度或高度为 $l/(n+1)$ 的间隔。
\endulist

\example
\def\pattern{\hbox to 15pt{\hfil.\hfil}}
\line{Down the Rabbit-Hole {\leaders\pattern\hfil} 1}
\line{The Pool of Tears {\leaders\pattern\hfil} 9}
\line{A Caucus-Race and a Long Tale {\cleaders\pattern
      \hfil} 19}
\line{Pig and Pepper {\xleaders\pattern\hfil} 27}
|
\produces
\def\pattern{\hbox to 15pt{\hfil.\hfil}}\par
\line{Down the Rabbit-Hole {\leaders\pattern\hfil} 1}
\line{The Pool of Tears {\leaders\pattern\hfil} 9}
\line{A Caucus-Race and a Long Tale {\cleaders\pattern
      \hfil} 19}
\line{Pig and Pepper {\xleaders\pattern\hfil} 27}
\nextexample
\def\bulletfill{\vbox to 3ex{\vfil\hbox{$\bullet$}\vfil}}%
\def\mybox{\vbox to 1in}
\def\myrule{\hrule width 4pt}\hsize=2in
\hrule \line{%
   \mybox{\myrule depth 8pt \leaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 15pt \leaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 18pt \cleaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 12pt \xleaders\bulletfill\vfill}%
}\hrule
|
\produces
\medskip
\def\bulletfill{\vbox to 3ex{\vfil\hbox{$\bullet$}\vfil}}%
\def\mybox{\vbox to 1in}\def\myrule{\hrule width 4pt}\hsize=2in
\hrule \line{%
   \mybox{\myrule depth 8pt \leaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 15pt \leaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 18pt \cleaders\bulletfill\vfill}
   \hfil
   \mybox{\myrule depth 12pt \xleaders\bulletfill\vfill}%
}\hrule
\endexample\enddesc

%\begindesc
%\cts dotfill {}
%\cts hrulefill {}
%\explain
%^^{fill}
%These commands respectively fill the enclosing horizontal space with
%a row of dots on the baseline and with
%a horizontal line on the baseline.
%It's usually a good idea to leave a space between
%|\dotfill| or |\hrulefill|
%and any text that precedes or follows it (see the example below).
\begindesc
\cts dotfill {}
\cts hrulefill {}
\explain
^^{填充}
这些命令分别采用一行位于基线上的点和水平线填充封闭的水平空间。
通常,在 |\dotfill| 或 |\hrulefill| 与任何其之前或之后的文字之间留一个空格是一个好的主意(参见下面的例子)。
\example
\hbox to 3in{开始 {\dotfill} 结束}
\hbox to 3in{瑞典语 {\hrulefill} 芬兰语}
|
\produces
\par\hbox to 3in{开始 {\dotfill} 结束}
\hbox to 3in{瑞典语 {\hrulefill} 芬兰语}
\endexample\enddesc

%\begindesc
%\cts leftarrowfill {}
%\cts rightarrowfill {}
%\explain
%^^{fill}
%These commands fill the enclosing horizontal space with
%left-pointing or right-pointing ^{arrows}.
\begindesc
\cts leftarrowfill {}
\cts rightarrowfill {}
\explain
^^{填充}
这些命令用向左或向右的^{箭头}来填充封闭的水平空间。
\example
\hbox to 3in{\vrule \rightarrowfill \ 3 in
             \leftarrowfill\vrule}
|
\produces
\medskip
\hbox to 3in{\vrule \rightarrowfill \ 3 in
        \leftarrowfill\vrule}
\endexample

%\eix^^{leaders}
%\enddesc
\eix^^{指引线}
\enddesc

%==========================================================================
%\section {Alignments}
\section {阵列}

%==========================================================================
%\subsection {Tabbing alignments}
\subsection {制表阵列}

%\begindesc
%\bix^^{tabbing alignments}
%\bix^^{alignments//commands for}
%%
%\ctspecial + {{\bt \<text>\thinspace\&\thinspace\<text>%
%   \thinspace\& $\cdots$ \\cr}}
%\ctsxrdef{@plus}
%\cts tabalign {}
%\explain
\begindesc
\bix^^{制表阵列}
\bix^^{阵列//用于阵列的命令}
%
\ctspecial + {{\bt \<text>\thinspace\&\thinspace\<text>%
   \thinspace\& $\cdots$ \\cr}}
\ctsxrdef{@plus}
\cts tabalign {}
\explain
%These commands begin a single line in a  tabbed \minref{alignment}.
%The only difference between |\+| and |\tabalign| is that
%|\+| is an outer macro---you can't use it when \TeX\ is reading tokens at
%high speed \seeconcept{outer}.
在制表\minref{阵列}中,这些命令开始单独的一行。
|\+| 与 |\tabalign| 之间唯一的不同在于 |\+| 是一个外部宏,
当 \TeX\ 高速读取记号时,你不能使用它\seeconcept{外部的}。

%If you place an `|&|' at a position
%to the right of all existing tabs in a tabbing alignment,
%the `|&|' establishes a new tab at that position.
在制表阵列中,如你将 `|&|' 放在所有已经存在的制表符的右侧,那么 `|&|' 将在那个位置上建立一个新的制表符。
\example
\cleartabs % Nullify any previous \settabs.
\+ {\bf if }$a[i] < a[i+1]$ &{\bf then}&\cr
\+&&$a[i] := a[i+1]$;\cr
\+&&{\it found }$:=$ {\bf true};\cr
\+&{\bf else}\cr
\+&&{\it found }$:=$ {\bf false};\cr
\+&{\bf end if};\cr
|
\produces
\cleartabs % Nullify any previous \settabs.
\+ {\bf if }$a[i] < a[i+1]$ &{\bf then}&\cr
\+&&$a[i] := a[i+1]$;\cr
\+&&{\it found }$:=$ {\bf true};\cr
\+&{\bf else}\cr
\+&&{\it found }$:=$ {\bf false};\cr
\+&{\bf end if};\cr
\endexample
\enddesc

\begindesc
\cts settabs {\<number> {\bt \\columns}}
\aux\cts settabs {{\bt \\+} \<sample line> {\bt \\cr}}
\explain
%The first form of
%this command defines a set of tab stops ^^{tabs}
%for a tabbing \minref{alignment}.
%It tells \TeX\ to set the tab stops so as to divide each line into
%\<number> equal parts.  \TeX\ takes the length of a line to be
%|\hsize|, as usual.  You can make the alignment narrower by decreasing
%|\hsize|.
这个命令的第一种形式为制表\minref{阵列}定义一系列制表符^^{制表符}的停止位置。
它告诉 \TeX\ 设置制表符停止位置以便将每一行分成 \<number> 等份。
\TeX\ 仍将行的长度设为 |\hsize|。你可以通过减小 |\hsize| 来使得阵列更加紧密。
%\margin{paragraph ``The tab settings $\ldots$'' moved to below.}
\margin{``制表符设定 $\ldots$''一段被移到下面了。}
\example
{\hsize = 3in \settabs 3 \columns
\+$1$&一&第一\cr
\+$2$&二&第二\cr
\+$3$&三&第三\cr}
|
\produces
{\hsize = 3in \settabs 3 \columns
\+$1$&一&第一\cr
\+$2$&二&第二\cr
\+$3$&三&第三\cr}

\noindent\doruler{\8\8\8}3{in}
\smallskip
\endexample

%The second form of this command defines tab stops by setting the tab stops
%at the positions indicated by the `|&|'s in the sample line.
%The sample line itself does not appear in the output.  When you
%use this form you'll usually want to put material into the sample line that is
%somewhat wider than the widest corresponding material in the alignment,
%in order to produce space between the columns.
%That's what we've done in the
%example below.  The material following the last tab
%stop is irrelevant, since \TeX\ does not need to position
%anything at the place where the |\cr|~appears.
这个命令的第二利形式是利用样例行中的 `|&|' 指示的位置来定义制表符停止位置。样例行本身不会出现在最终输出中。当你使用这种形式,你通常希望将一些宽度大于需要排列的最宽的内容放在样例行中,以便在列之间产生间隔。正象我们在下面的例子中所做的那样。最后一个制表符后的内容是无关紧要的,因为 \TeX\ 在 |\cr| 出现的地方不需要任何位置指示。

%The tab settings established by |\settabs| remain in effect until
%you issue a new |\settabs| command or end a group containing
%the |\settabs| command.
%This is true for both forms of the command.
由 |\settabs| 建立起来的制表符设置一直有效,直到你使用一个新的 |\settabs| 命令或结束包含 |\settabs| 命令的编组。该命令的两种形式都是这样的。

\example
% The first line establishes the template.
\settabs \+$1$\qquad & three\quad & seventh\cr
\+$1$&一&第一\cr
\+$2$&二&第二\cr
\+$3$&三&第三\cr
|
\produces
\settabs \+$1$\qquad & three\quad & seventh\cr % the sample line
\+$1$&一&第一\cr
\+$2$&二&第二\cr
\+$3$&三&第三\cr
\smallskip
\endexample
\enddesc

\begindesc

\cts cleartabs {}
\explain
%This command clears all the tabs to the right of the current column.
%Its main use is in applications such as typesetting computer programs
%in which the tab positions change from line to line.
这个命令消除位于当前列右侧的所有制表符。它主要用于排版计算机程序等一些应用,在这类应用中,从一行至另一行,制表符的位置是变化的。
\enddesc

%\see |\cr|, |\endline|, |\crcr| (\xref \endline).
%\eix^^{tabbing alignments}
\see |\cr|、|\endline|、|\crcr|(\xref \endline )。
\eix^^{制表阵列}

%==========================================================================
%\subsection {General alignments}
\subsection {常规阵列}

\begindesc
\cts halign {{\bt \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
   \xrdef{@and}\xrdef{@pound}
\aux\cts halign {{\bt to \<dimen>%
   \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
\aux\cts halign {{\bt spread \<dimen>%
   \rqbraces{\<preamble> \\cr \<row> \\cr $\ldots$ \<row> \\cr}}}
\explain
%This command produces a horizontal \minref{alignment} consisting of a
%sequence of rows, where each row in turn contains a sequence of column
%entries.  \TeX\ adjusts the widths of the column entries to accommodate
%the widest one in each column.
这一命令产生由一系列行组成的水平的\minref{阵列},每一行又包括了一系列的列。\TeX\ 调节列的宽度以容纳每一列中最宽的那一个条目。

%A horizontal alignment can only appear when \TeX\ is in a vertical
%\minref{mode}.  We recommend that you first study alignments in general
%(\xref{alignment}) before you attempt to use this command.
只有当 \TeX\ 位于竖直\minref{模式}下水平阵列才能出现。
我们建议你在使用该命令之前首先学习一下常见的阵列(\xref{阵列})。

%An alignment consists of a ^{preamble}
%followed by the text to be aligned. The preamble,
%which describes the layout of the rows that follow, consists of a
%sequence of column templates, separated by `|&|' and ended
%by |\cr|.
阵列由^{导言}和随后的需要排列的文字构成。导言描述随后行的版式,
由一系列列的模板构成,列之间由 `|&|' 分隔,用 |\cr| 作为结束标志。
%\bix^^{template}
%\bix^^{entry (column or row)}
%Each row consists of a sequence of column
%entries, also separated by `|&|' and ended by |\cr|. Within
%a template, `|#|' indicates where \TeX\ should insert the
%corresponding text of a column entry.
%In contrast, |\settabs| uses a fixed implicit template of `|#|',
%i.e., it just inserts the text as is.
\bix^^{模板}
\bix^^{条目(在行或列中)}
每一行由一系列列的条目构成,也由 `|&|' 分隔,用 |\cr| 作为结束标志。
在模板中,`|#|' 表示 \TeX\ 应该在一个列条目中插入相应文字的位置。
与之相反,|\settabs| 使用 `|#|' 的固定隐式模板,即它只插入文字本身。

%\TeX\ typesets each column entry in restricted horizontal mode,
%i.e., as the contents of an \minref{hbox},
%and implicitly encloses it in a group.
\TeX\ 在受限水平模式中对每一列条目进行排版,即像 \minref{hbox} 的内容一样,并且隐式地将它封闭在一个编组中。

%The |to| form of this command instructs \TeX\
%to make the width of the alignment be \<dimen>,
%adjusting the space between columns as necessary.
%The |spread| form of this command instructs \TeX\
%to make the alignment wider by \<dimen> than its natural width.
%These forms are like the corresponding forms of |\hbox| \ctsref\hbox.
这个命令的 |to| 形式指导 \TeX\ 构造一个宽度为 \<dimen> 的阵列,在需要的时候调节列的间距。
这个命令的 |spread| 形式指导 \TeX\ 构造一个比其本身宽度再宽 \<dimen> 的阵列。
这些形式与 |\hbox|\ctsref\hbox 相应的形式是类似的。

%See |\tabskip| \ctsref\tabskip{} for an example using the
%|to| form.
参见 |\tabskip| \ctsref\tabskip{}中使用 |to| 形式的例子。

\example
\tabskip = 1em \halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
      美国&华盛顿&美元&1.00\cr
      法国&巴黎&法朗&0.174\cr
      以色列&耶路撒冷&新谢克尔&0.507\cr
      日本&东京&日元&0.0829\cr}
|
\produces
\tabskip = 1em \halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
      美国&华盛顿&美元&1.00\cr
      法国&巴黎&法朗&0.174\cr
      以色列&耶路撒冷&新谢克尔&0.507\cr
      日本&东京&日元&0.0829\cr}
\endexample
\enddesc

\begindesc
{\tighten
\cts valign {{\bt \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$
   \<column>\\cr}}}
\aux\cts valign {{\bt to \<dimen>%
   \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$ \<column>\\cr}}}
\aux\cts valign {{\bt spread \<dimen>%
   \rqbraces{\<preamble>\\cr \<column>\\cr $\ldots$ \<column>\\cr}}}
\par}
\explain
%This command produces a vertical \minref{alignment}
%consisting of
%a sequence of columns, where each column in turn contains a sequence
%of row entries.
%\TeX\ adjusts the heights of the row entries to accommodate the tallest one
%in each row.
这一命令产生由一系列列组成的竖直的\minref{阵列},每一列又包括了一系列的行。
\TeX\ 调节行的高度以容纳每一列中最高的那一个条目。

%A vertical alignment
%can only appear when \TeX\ is in a horizontal \minref{mode}.
%Because vertical alignments are (a)~conceptually somewhat difficult and
%(b)~not often used, we recommend that you learn about
%alignments in general
%(\xref{alignment}) and the |\halign| command (see above) before
%you attempt to use the |\valign| command.
只有当 \TeX\ 位于水平\minref{模式}下竖直阵列才能出现。
因为竖直阵列(a)在概念上有一些困难,并且(b)不经常使,
因此,我们建议在你试图使用 |\valign| 命令之前首先学习一下常见的阵列(\xref{阵列})%
以及 |\halign| 命令(参见上面的描述)。

%An alignment consists of a ^{preamble}
%followed by the text to be aligned. The preamble,
%which describes the layout of the columns that follow,
%consists of a
%sequence of row templates, separated by `|&|' and ended
%by |\cr|.
阵列由^{导言}和随后的需要排列的文字构成。导言描述随后列的版式,
由一系列行的模板构成,列之间由 `|&|' 分隔,用 |\cr| 作为结束标志。
%\bix^^{template}
%Each column consists of a sequence of ^{row}
%entries, also separated by `|&|' and ended by |\cr|. Within
%a template, `|#|' indicates where \TeX\ should insert the
%corresponding text of a row entry.
\bix^^{模板}
每一列由一系列行的条目构成,也由 `|&|' 分隔,用 |\cr| 作为结束标志。
在模板中,`|#|' 表示 \TeX\ 应该在一个行条目中插入相应文字的位置。

%\TeX\ typesets each row entry in internal vertical
%mode, i.e., as the contents of a \minref{vbox},
%and implicitly encloses the entry in a group.
%It always gives the vbox zero depth.
%Any text or other horizontal mode material in a row entry then puts \TeX\
%into ordinary horizontal mode.
%(This is just an application of the general rules for \TeX's behavior
%in internal vertical mode.)
%The usual paragraphing parameters apply in this case:
%the row entry has an initial
%indentation of |\parindent| (\xref\parindent) and
%its lines have the
%|\leftskip| and |\rightskip| (\xref\leftskip) \minref{glue}
%appended to~them.
\TeX\ 在内部竖直模式中对每一行条目进行排版,即像\minref{竖直盒子}的内容一样,
并且隐式地将它封闭在一个编组中。它总是将 vbox 的深度设为零。
随后,列中的任何文字或其它水平模式内容将 \TeX\ 带回通常的水平模式。%
(这只是在内部竖直模式下 \TeX 行为常见准则的一个应用。)常见的段落参数适用于这种情形:
行条目具有 |\parindent|(\xref\parindent )的起始缩进,
而且它的每一行都附加了 |\leftskip| 和 |\rightskip|(\xref\leftskip )\minref{粘连}。

%Note in particular that a row entry containing text has
%a width of |\hsize| (\xref\hsize).  Unless you reset
%|\hsize| to the row width that you want, you're likely to
%encounter overfull \minref{hbox}es, or find that
%the first column takes up the width of the entire page, or both.
尤其需要注意的是,列条目包含的文字具有 |\hsize|(\xref\hsize )的宽度。
除非你重新设置 |\hsize| 到你希望得到的行宽,否则你总能遇到过满\minref{水平盒子}的情况,
或者发现第一列占据了整页的宽度,或者两种情况都会出现。
\eix^^{条目(在行或列中)}

%Normally, you need to include a \minref{strut}
%^^{struts//in vertical alignments}
%in each
%template so that the rows don't come out crooked as a result
%of the varying heights of the entries in the alignment.  You
%can produce a strut with the |\strut| command.
正常情况下,你需要在每个模板中包括\minref{支架}^^{支架//在竖直阵列中},
以便行不会由于阵列中条目高度的变化而变得弯曲。你可以使用 |\strut| 获得支架。

%The |to| form of this command instructs \TeX\
%to make the vertical extent of the alignment be \<dimen>,
%adjusting the space between rows as necessary.
%The |spread| form of this command instructs \TeX\
%to make the alignment taller by \<dimen> than its natural height.
%These forms are like the corresponding forms of |\vbox| \ctsref\vbox.
这个命令的 |to| 形式指导 \TeX\ 构造一个竖直伸展为 \<dimen> 的阵列,在需要的时候调节行的间距。
这个命令的 |spread| 形式指导 \TeX\ 构造一个比其本身高度再高 \<dimen> 的阵列。
这些形式与 |\vbox| \ctsref\vbox 相应的形式是类似的。

\example
{\hsize=1in \parindent=0pt
\valign{#\strut&#\strut&#\strut&#\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
|
\produces
{\hsize=1in \parindent=0pt \leftskip=0pt
\valign{#\strut&#\strut&#\strut&#\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
\nextexample
% 与上例相同的内容,但没有支架
%(这个例子显示了支架存在的必要性)。
{\hsize=1in \parindent=0pt
\valign{#&#&#&#\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
|
\produces
{\hsize=1in \parindent=0pt \leftskip=0pt
\valign{#&#&#&#\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
\endexample
\enddesc

\begindesc
\cts ialign {}
\explain
%This command behaves just like ^|\halign|,
%except that it first sets the |\tabskip| glue to zero and
%sets |\everycr| empty.
除了首先将 |\tabskip| 粘连设为零,并将 |\everycr| 清空以外,这个命令的行为与 ^|\halign| 相似。
\enddesc

\begindesc
\cts cr {}
\explain
%This command ends the preamble of a horizontal or vertical
%alignment, a row of a horizontal or tabbing alignment,
%or a column of a vertical alignment.
%You can cause \TeX\ to take certain actions whenever it sees a |\cr|
%by setting the value of the ^|\everycr| parameter \ctsref\everycr.
这个命令用于结束水平或竖直阵列的导言、水平的或制表阵列的行,或竖直阵列的列。你可以通过设置 ^|\everycr|\ctsref\everycr 参数的值,引导 \TeX\ 采取特定的行动,无论什么时候它遇到 |\cr|。
\enddesc

\begindesc
\cts endline {}
\explain
%This command is a synonym for the ^|\cr| command.  It is useful when
%you've redefined |\cr| but still need access to the original definition.
这个命令是 ^|\cr| 的另一种形式。在你重新定义了 |\cr|,但还需要利用其原始的定义是,这个命令是有用的。
\enddesc

\begindesc
\cts crcr {}
\explain
%This command behaves just like ^|\cr|, except that \TeX\ ignores it if
%it comes immediately after a |\cr| or a ^|\noalign|.
%Its main application is as a safety measure to avoid a misleading error
%message caused by a \minref{macro} that expects an argument ending in |\cr|.
%If you put |\crcr| after the `|#|$n$' that denotes such an argument
%in the macro's definition, the
%macro will work properly whether or not the argument ends with |\cr|.
如果该命令紧随 |\cr| 或 ^|\noalign| 之后出现,\TeX\ 会忽略它。除此之外,它的行为与 ^|\cr| 类似。它主要的应用是作为一种安全措施以避免由期望以 |\cr| 作为结束符的\minref{宏包}而引起的错误信息。如果你将 |\crcr| 放在用以表示宏定义中此类参数的后面,宏将正常工作,无论其参数是否以 |\cr| 作为结束标记。
\enddesc

\begindesc
\cts omit {}
\explain
%This command tells \TeX\ to ignore a template in a horizontal or vertical
%\minref{alignment} while processing a particular column or row entry
%respectively.
%|\omit| must appear as the first item in a column or row entry; in effect,
%it overrides the template from the preamble with the simple
%template `|#|'.
这个命令告诉 \TeX\ 在处理特定的列或行条目时,忽略水平的或竖直的\minref{阵列} 中的一个模板。|\omit| 必须以第一个项目出现在列或行条目中,它有效地使用简单的模板 `|#|' 覆盖来自导言中的模板。

\example
\tabskip = 2em\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&华盛顿&美元&1.00\cr
   \omit \dotfill 法国\dotfill&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}

|
\produces
\tabskip = 2em\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&华盛顿&美元&1.00\cr
   \omit \dotfill 法国\dotfill&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}
\nextexample
{\hsize=1.2in \parindent=0pt
\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&\omit\strut{\bf MARINARA!!}&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
|
\produces
{\hsize=1.2in \parindent=0pt \leftskip=0pt
\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&\omit\strut{\bf MARINARA!}&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
\endexample
\enddesc

\begindesc
\cts span {}
\explain
%The meaning of this command depends on whether it appears in a preamble
%or in an alignment entry.
%\ulist
%\li Normally, \TeX\ does not expand tokens in the preamble
%when it reads them.
%Putting |\span| in front of a token in the preamble causes
%that token to be expanded immediately according to \TeX's usual rules
%of \minref{macro} expansion.
%\li Putting |\span| instead of `|&|' between two column or row entries
%causes those columns or rows to be combined.
%For a horizontal alignment,
%the width of the combined column is the sum of the
%widths of the component columns.
%For a vertical alignment,
%the height of the combined row is the sum of the
%heights of the component rows.
%The template of the combined column or combined row forms a single group,
%so font-setting commands preceding a |\span| affect everything up to
%the next `|&|'.
%\endulist
%\noindent
%|\span| is rarely useful by itself outside of a template,
%but it provides the basic mechanism
%for defining ^|\multispan|.
这个命令的意义取决于它出现在导言中,还是在阵列条目中。
\ulist
\li 通常,\TeX\ 并不扩展它读入的导言中的记号。将 |\span| 放在导言中记号的前面,根据\minref{宏}扩展的 \TeX 常用规则,会导致这些记号立即得到扩展。
\li 用 |\span| 取代 `|&|',放在两列或两行条目之前,会导致这些列或行合并到一起。对于水平阵列,合并的列的宽度是列成员宽度之和。对于竖直阵列,合并的行的高度是行成员高度之和。合并的行或合并的列的模板形成一个编组,因此,在 |\span| 前的字体设置命令影响下一个 `|&|' 前的一切。
\endulist
\noindent
|\span| 很少单独用在模板之外,但它为定义 ^|\multispan| 提供了基本的机制。
\enddesc

\begindesc
\cts multispan {\<number>}
\explain
%This command tells \TeX\ that the following
%\<number> columns in a row of a horizontal alignment,
%or
%\<number> rows in a column of a vertical alignment,
%should be combined into a single column or row (as with
%|\span|) and that their templates should be omitted (as with |\omit|).
该命令告诉 \TeX ,随后水平阵列的行中的 \<number> 列或竖直阵列的列中的 \<number> 行应该合并成一个单独的列或行(就像 |\span| 那样),并且它们的模板应该被忽略(就像 |\omit| 那样)。

\example
\tabskip = 13pt\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&
   \multispan 2 \hfil\it(无信息)\hfil \cr
   日本&东京&日元&0.0829\cr}
|
\produces
\tabskip = 13pt\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&
   \multispan 2 \hfil\it(无信息)\hfil \cr
   日本&东京&日元&0.0829\cr}
\nextexample
{\hsize=1.2in \parindent=0pt
\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   \multispan 3$$\left\{{{\rm ketchup}\atop{\rm marinara}}
      \right\}$$&mustard\cr
   rarebit&tartar\cr}}
|
\produces
{\hsize=1.2in \parindent=0pt \leftskip=0pt
\valign{(#)\strut&(#)\strut&(#)\strut&(#)\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   \multispan 3$$\left\{{{\rm ketchup}\atop{\rm marinara}}
      \right\}$$&mustard\cr
   rarebit&tartar\cr}}
\endexample

%\eix^^{template}
%\enddesc
\eix^^{模板}
\enddesc

\begindesc
\cts noalign {\rqbraces{\<vertical mode material>}}
\aux\cts noalign {\rqbraces{\<horizontal mode material>}}
\explain
%This command inserts
%\<vertical mode material>
%after the current row of a horizontal \minref{alignment} or
%\<horizontal mode material> after the current column of a vertical
%\minref{alignment}.
%The material can be text, glue, a rule, or anything else.
该命令在水平\minref{阵列}的当前行之后插入 \<vertical mode material>,或者在竖直\minref{阵列}的当前列之后插入 \<horizontal mode material>。插入的内容可以是文本、粘连、标线,或者其它任何东西。

%The most common use of |\noalign|
%is to put extra space after a row or column.
%If you want to put extra space after \emph{every\/} row of a horizontal
%alignment, use ^|\openup| (\xref\openup).
|\noalign| 最常见的用途是在一行或列后插入额外的间隔。如果你希望在水平阵列的\emph{每}行后都插入额外的间隔,可以使用 ^|\openup|(\xref\openup)。

\example
\halign{%
   \hfil\it#\hfil\tabskip=2em&\hfil#\hfil&#&
      \hfil\$#\tabskip=0em\cr
   % 改变 \tabskip 将阻止下面的标线突出来。
   美国&华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   \noalign{\smallskip\hrule\smallskip}
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}
|
\produces
\halign{%
   \hfil\it#\hfil\tabskip=2em&\hfil#\hfil&#&
      \hfil\$#\tabskip=0em\cr
   % The \tabskip changes prevent the rule below
   % from sticking out.
   美国&华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   \noalign{\smallskip\hrule\smallskip}
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}
\nextexample
{\hsize=1in \parindent=0pt
\valign{#\strut&#\strut&#\strut&#\strut\cr
   \noalign{\vrule width 2pt\quad}
   bernaise&curry&hoisin&hollandaise\cr
   \noalign{\vrule width 2pt\quad}
   ketchup&marinara&mayonnaise&mustard\cr
   \noalign{\vrule width 2pt\quad}
   rarebit&tartar\cr
   \noalign{\vrule width 2pt\quad}}}
|
\produces
\medskip
{\hsize=1in \parindent=0pt
\valign{#\strut&#\strut&#\strut&#\strut\cr
   \noalign{\vrule width 2pt\quad}
   bernaise&curry&hoisin&hollandaise\cr
   \noalign{\vrule width 2pt\quad}
   ketchup&marinara&mayonnaise&mustard\cr
   \noalign{\vrule width 2pt\quad}
   rarebit&tartar\cr
   \noalign{\vrule width 2pt\quad}}}
\endexample
\enddesc

\begindesc
\cts tabskip {\param{glue}}
\explain
%This parameter specifies the amount of horizontal or vertical glue
%that \TeX\ puts between the
%columns of a horizontal alignment or between the
%rows of a vertical alignment.
%\TeX\ also puts the |\tabskip| glue
%to the left of the first column and to the right of the last column
%of a horizontal alignment, and
%above the first row
%and below the last row of a vertical alignment.
%You can change |\tabskip| within a template---%
%the change will affect the glue associated with all the following
%|&|'s as well as the glue after the last row or column.
该参数指定 \TeX 在水平阵列的列之间或竖直阵列的行之间放置水平或竖直粘连的量。\TeX\ 也在水平阵列的第一列的左侧和最后一行的右侧,以及竖直阵列的第一行的上端和最后一行的下端放置 |\tabskip| 粘连。你可以在模板中改变 |\tabskip|---这一改变将影响所有紧接其后的 |&| 的粘连以及最后一行或列之后的粘连。
\example
\halign to 3.5in{%
   \hfil\it#\tabskip = 2em plus 8pt
      \hfil&\hfil#\hfil&#\tabskip = 1em
      &\hfil\$#\tabskip = 0em\cr
      美国&华盛顿&美元&1.00\cr
      法国&巴黎&法朗&0.174\cr
      以色列&耶路撒冷&新谢克尔&0.507\cr
      日本&东京&日元&0.0829\cr}
|
\produces
\halign to 3.5in{%
   \hfil\it#\tabskip = 2em plus 8pt
      \hfil&\hfil#\hfil&#\tabskip = 1em
      &\hfil\$#\tabskip = 0em\cr
      美国&华盛顿&美元&1.00\cr
      法国&巴黎&法朗&0.174\cr
      以色列&耶路撒冷&新谢克尔&0.507\cr
      日本&东京&日元&0.0829\cr}
\nextexample
{\hsize = 1in \parindent=0pt \tabskip=5pt
\valign{#\strut&#\strut\tabskip = 3pt
   &#\strut&#\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
|
\produces
{\hsize = 1in \parindent=0pt \tabskip=5pt
\valign{#\strut&#\strut\tabskip = 3pt
   &#\strut&#\strut\cr
   bernaise&curry&hoisin&hollandaise\cr
   ketchup&marinara&mayonnaise&mustard\cr
   rarebit&tartar\cr}}
\endexample
\enddesc

\begindesc
\cts hidewidth {}
\explain
%This command tells \TeX\ to ignore the width of the next column entry in a
%horizontal alignment.  It's useful when you have an entry that is longer
%than most of the others in the same column,
%and you'd rather have that entry stick out of the column than
%make all the entries
%in the column wider.  If the |\hidewidth| is at the left of the
%entry, the entry sticks out to the left; if the |\hidewidth| is at the
%right of the entry, the entry sticks out to the~right.
该命令告诉 \TeX\ 忽略水平阵列中下一个列条目的宽度。如果你有一个条目长于同一列中其它大多数,并且 ,你希望条目伸到列外,而不是使得该条目所在列变得更宽时,该命令是有用的。如果 |\hidewidth| 在条目的左侧,则条目向左伸展;如果 |\hidewidth| 在条目的右侧,则条目向右伸展。
\example
\tabskip = 25pt\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&\hidewidth 华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}
|
\produces
\tabskip = 25pt\halign{%
   \hfil\it#\hfil&\hfil#\hfil&#&\hfil\$#\cr
   美国&\hidewidth 华盛顿&美元&1.00\cr
   法国&巴黎&法朗&0.174\cr
   以色列&耶路撒冷&新谢克尔&0.507\cr
   日本&东京&日元&0.0829\cr}
\endexample
\enddesc

\begindesc
\cts everycr {\param{token list}}
\explain
%\TeX\ expands \<token list> whenever it executes
%a |\cr|---at the end of every preamble,
%at the end of every row of a horizontal alignment,
%and at the end of every column of a vertical alignment.
%The |\everycr| commands are expanded just after the |\cr|.
%Thus you can cause \TeX\ to
%execute certain commands at the end of a preamble, row, or column by
%assigning a list of those commands to |\everycr|.
无论什么时候,当 \TeX\ 遇到处于每个导言结尾处、水平阵列的每行结尾处以及竖直阵列的每列结尾处的|\cr| 时,它扩展 \<token list>。|\everycr| 只在 |\cr| 后扩展。因此,你可以通过向 |\everycr| 赋与导言、行、列相关列表,引导 \TeX\ 在导言、行或列的结尾处执行特定的命令。

%The |\everycr| tokens shouldn't include any commands other than |\no!-align|.
%That's because
%the |\everycr| tokens will reappear after the last
%|\cr| of the alignment. A command other than
%|\noalign| will then make \TeX\ think that it's starting a new
%row or column.
%\TeX\ will complain about a missing |\cr|, insert
%a |\cr|, insert the |\everycr| tokens again, and repeat these actions
%indefinitely.
|\everycr| 的记号不应该包括 |\no!-align| 以外的任何命令。这是因为,|\everycr| 记号会出现在阵列的最后一个 |\cr|。任何一个非 |\no!-align| 命令会导致 \TeX\ 认为它新开了一行或一列,因此,\TeX\ 会报怨丢失了 |\cr|,插入 |\cr|,再次插入 |\everycr| 记号,并且无限地重复这些动作。

\example
\everycr={\noalign{\smallskip\hrule\smallskip}}
\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
      \tabskip = 0pt\cr
   $1$&一&第一\cr
   $2$&二&第二\cr
   $3$&三&第三\cr}
|
\produces
\medskip
\everycr={\noalign{\smallskip\hrule\smallskip}}
\halign{#\tabskip = 11pt&\hfil#\hfil&\hfil#\hfil
      \tabskip = 0pt\cr
   $1$&一&第一\cr
   $2$&二&第二\cr
   $3$&三&第三\cr}
\endexample

%\eix^^{alignments//commands for}
%\enddesc
\eix^^{阵列//用于阵列的命令}
\enddesc

\enddescriptions

\ifoldeplain\else\ifcompletebook\else
\vskip4em{\sectionfonts\leftline{本章索引}}
\readindexfile{i}
\fi\fi

\endchapter
\byebye