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
|
%% This is part of the OpTeX project, see http://petr.olsak.net/optex
% This file is read from optex-doc.tex
% Use: optex optex-doc (three times) to create whole documentation.
\let\new=\relax
\sec Starting with \OpTeX/
%%%%%%%%%%%%%%%%%%%%%%%%%
\new
\OpTeX/ is compiled as a format for \LuaTeX/. Maybe there is a command
`optex` in your \TeX/ distribution. Then you can write into the command line
\begtt
optex document
\endtt
%
You can try to process `optex op-demo` or `optex optex-doc`.
If there is no `optex` command, see more information about installation
\OpTeX/ at \url{http://petr.olsak.net/optex}.
A minimal document should be
\begtt
\fontfam[LMfonts]
Hello World! \bye
\endtt
The first line \~`\fontfam[LMfonts]` tells that Unicode Latin Modern
fonts (derived from Computer Modern) are used. If you omit this line then
preloaded Latin Modern fonts are used but preloaded fonts cannot be in
Unicode\fnote
{This is a technical limitation of \LuaTeX/ for fonts downloaded in formats:
only 8bit fonts can be preloaded.}.
So the sentence `Hello World` will be OK without the first line, but you
cannot print such sentence in other languages (for example `Ahoj světe!`)
where Unicode fonts are needed
because the characters like `ě` are not mapped correctly in preloaded
fonts.
A somewhat larger example with common settings should be:
\begtt \catcode`!=0
\fontfam[Termes] % selecting Unicode font family Termes (section !ref[fontfam])
\typosize[11/13] % setting default font size and baselineskip (sec. !ref[sizes])
\margins/1 a4 (1,1,1,1)in % setting A4 paper, 1 in margins (section !ref[marg])
\cslang % Czech hyphenation patterns (section !ref[lang])
Tady je zkušební textík v českém jazyce.
\bye
\endtt
%
You can look at `op-demo.tex` file for a more complex, but still simple example.
\sec Page layout
%%%%%%%%%%%%%%%%
\secc[marg] Setting the margins
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The \^`\margins` command declares margins of the document. This command have
the following parameters:
\begtt \catcode`\<=13
\margins/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>
example:
\margins/1 a4 (2.5,2.5,2,2)cm
\endtt
Parameters are:
\begitems
* <pg> \dots\ `1` or `2` specifies one-page or two-pages design.
* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined).
* <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right,
top and bottom margins.
* <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>.
\enditems
Each of the parameters <left>, <right>, <top>, <bot> can be empty.
If both <left> and <right> are nonempty then `\hsize` is set. Else `\hsize`
is unchanged. If both <left> and <right> are empty then typesetting area is
centered in the paper format. The analogical rule works when <top> or <bot>
parameter is empty (`\vsize` instead `\hsize` is used). Examples:
\begtt
\margins/1 a4 (,,,)mm % \hsize, \vsize untouched,
% typesetting area centered
\margins/1 a4 (,2,,)cm % right margin set to 2cm
% \hsize, \vsize untouched, vertically centered
\endtt
If `<pg>=1` then all pages have the same margins. If `<pg>=2` then the
declared margins are true for odd pages. The margins at the even pages are
automatically mirrored in such case, it means that <left> is replaced by
<right> and vice versa.
\OpTeX/ declares following paper formats: a4, a4l (landscape~a4),
a5, a5l, a3, a3l, b5, letter and user can declare another own format by \~`\sdef`:
\begtt
\sdef{_pgs:b5l}{(250,176)mm}
\sdef{_pgs:letterl}{(11,8.5)in}
\endtt
The `<fmt>` can be also in the form `(<width>,<height>)<unit>` where `<unit>` is
optional. If it is missing then `<unit>` after margins specification is
used. For example:
\begtt
\margins/1 (100,200) (7,7,7,7)mm
\endtt
%
declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces
before and after <fmt> parameter are necessary.
The command \^`\magscale[<factor>]` scales the whole typesetting area.
\new The fixed point of such scaling is the upper left corner of the paper sheet.
Typesetting (breakpoints etc.) is unchanged. All units are relative after
such scaling. Only paper format's dimensions stay unscaled. Example:
\begtt
\margins/2 a5 (22,17,19,21)mm
\magscale[1414] \margins/1 a4 (,,,)mm
\endtt
%
The first line sets the `\hsize` and `\vsize` and margins for final
printing at a5 format. The setting on the second line centers the scaled
typesetting area to the true a4 paper while breaking points for paragraphs
and pages are unchanged. It may be usable for
review printing. After the review is done, the second line can be commented out.
\secc Concept of the default page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\OpTeX/ uses \"output routine" for page design.
It is very similar to the Plain \TeX/ output routine.
There is \^`\headline` followed by \"page body" followed by
\^`\footline`. The \^`\headline` is empty by default and it can be used
for running headers repeated on each page. The \^`\footline` prints
centered page number by default. You can set the \^`\footline` to empty
using \^`\nopagenumbers` macro.
The margins declared by \^`\margins` macro (documented in the previous
section~\ref[marg]) is concerned to the page body,
i.e.\ the \^`\headline` and \^`\footline` are placed to the top and bottom
margins.
The distance between the \^`\headline` and the top of the page body is given by
the \^`\headlinedist` register. The distance between bottom of the page body and
the \^`\footline` is given by \^`\footlinedist`. The default values are:
\begtt
\headline = {}
\footline = {\_hss\_rmfixed \_folio \_hss} % \folio expands to page number
\headlinedist = 14pt % from baseline of \headline to top of page body
\footlinedist = 24pt % from last line in pagebody to baseline of footline
\endtt
The page body should be divided into top insertions (floating tables and
figures) followed by a real text and followed by footnotes.
Typically, the only real text is here.
The \^`\pgbackground` tokens list is empty by default but it can be used for
creating a background of each page (colors, picture, watermark for example).
The macro \^`\draft` uses this register and puts big text DRAFT as a watermark
to each page. You can try it.
More about the page layout is documented in sections~\ref[oparams] and~\ref[output].
\secc Footnotes and marginal notes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The Plain \TeX/'s macro \^`\footnote` can be used as usual. But a new macro
\^`\fnote{<text>}` is defined. The footnote mark is added automatically and it
is numbered
\new
on each chapter from one\fnote
{You can declare \^`\fnotenumglobal` if you want footnotes numbered in whole
document from one or \^`\fnotenumpages` if you want footnotes numbered at each
page from one. Default setting is \^`\fnotenumchapters`}.
The <text> is scaled to 80 \%.
User can redefine footnote mark or scaling, as shown in the section~\ref[fnotes].
The \^`\fnote` macro is fully applicable only in \"normal outer" paragraph.
It doesn't work inside boxes (tables, for example). If you are solving such
a case then you can use the command \^`\fnotemark``<numeric-label>` inside the box: only the
footnote mark is generated here. When the box is finished you can use
\^`\fnotetext{<text>}`. This macro puts the <text> to the footnote.
The <numeric-label> has to be `1` if only one such command is in the box.
Second \^`\fnotemark` inside the same box has to have the parameter `2` etc.
The same number of \^`\fnotetext`s have to be written
after the box as the number of \^`\fnotemark`s inserted inside the box.
Example:
\begtt
Text in a paragraph\fnote{First notice}... % a "normal" footnote
\table{...}{...\fnotemark1...\fnotemark2...} % two footnotes in a box
\fnotetext{Second notice}
\fnotetext{Third notice}
...
\table{...}{...\fnotemark1...} % one footnote in a box
\fnotetext{Fourth notice}
\endtt
The marginal note can be printed by the \^`\mnote{<text>}` macro. The <text>
is placed to the right margin on the odd pages and it is placed to the left
margin on the even pages. This is done after second \TeX{} run because the
relevant information is stored in an external file and read from it again.
If you need to place the notes only to the fixed margin write
\^`\fixmnotes\right` or \^`\fixmnotes\left`.
The <text> is formatted as a little paragraph with the maximal width
\^`\mnotesize` ragged left on the left margins or ragged right on the right
margins. The first line of this little paragraph has its vertical position
given by the position of \^`\mnote` in the text. The exceptions are possible
by using the `up` keyword: \~`\mnote`` up<dimen>{<text>}`.
You can set such <dimen> to each \^`\mnote` manually in final printing
in order to margin notes do not overlap. The positive value of <dimen>
shifts the note up and negative value shifts it down. For example
\^`\mnote`` up 2\baselineskip{<text>}` shifts this marginal note two lines up.
\sec Fonts
%%%%%%%%%%
\secc[fontfam] Font families
%%%%%%%%%%%%%%%%%%%%%%%
You can select the font family by \^`\fontfam[<Family-name>]`.
The argument <Family-name> is case insensitive and spaces are ignored in it. For
example, \^`\fontfam[LM Fonts]` is equal to \^`\fontfam[LMfonts]` and it is equal
to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus
\^`\fontfam[Latin Modern]` can be used for loading Latin Modern family too.
If you write \^`\fontfam[?]` then all font families registered in \OpTeX/
are listed on the terminal and in the log file.
If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in
\OpTeX/ and available in your \TeX/ system is printed. The instructions
on how to register your own font family are appended in the catalog.
If the family is loaded then {\em font modifiers} applicable in such font family
are listed on the terminal: (`\caps`, `\cond` for example).
And there are four basic {\em variant selectors} (\^`\rm`, \^`\bf`, \^`\it`, \^`\bi`).
The usage of variant selectors is the same as in Plain \TeX:
`{\it italics text}`, `{\bf bold text}` etc.
The font modifiers (`\caps`, `\cond` for example) can
be used before a variant selector and they
can be (independently) combined: `\caps\it` or `\cond\caps\bf`. The
modifiers keep their internal setting until the group ends or until another
modifier that negates the previous feature is used. So
`{\caps \rm First text \it Second text}`
gives {\caps \rm First text \it Second text}.
The font modifier without following variant selector does not change the font
actually, it only prepares data used by next variant selectors.
There is one special variant selector \^`\currvar` which does not change the
selected variant but reloads the font due to (maybe newly
specified) font modifier(s).
The context between variants \^`\rm` $\leftrightarrow$ \^`\it` and
\^`\bf` $\leftrightarrow$ \^`\bi` is kept by the \^`\em`
macro (emphasize text).
It switches from current \^`\rm` to \^`\it`, from current \^`\it` to \^`\rm`, from
current \^`\bf` to \^`\bi` and from current \^`\bi` to \^`\bf`.
The italics correction `\/` is inserted automatically, if needed. Example:
\begtt
This is {\em important} text. % = This is {\it important\/} text.
\it This is {\em important} text. % = This is\/ {\rm important} text.
\bf This is {\em important} text. % = This is {\bi important\/} text.
\bi This is {\em important} text. % = This is\/ {\bf important} text.
\endtt
\new
More about the \OpTeX/ Font Selection System is written in the technical
documentation in the section~\ref[fontsystem].
You can mix more font families in your document, you can
declare your own variant selectors or modifiers, etc.
\secc[sizes] Font sizes
%%%%%%%%%%%%%%%%%%%%%
The command \^`\typosize[<fontsize>/<baselineskip>]` sets the font size of text and
math fonts and baselineskip. If one of these two parameters is empty, the
corresponding feature stays unchanged. Don't write the unit of these
parameters. The unit is internally set to \^`\ptunit` which is 1pt by default.
You can change the unit by the command \^`\ptunit=<something-else>`,
for instance \^`\ptunit=1mm` enlarges all font sizes declared by \^`\typosize`.
Examples:
\begtt
\typosize[10/12] % default of Plain TeX
\typosize[11/12.5] % font 11pt, baseline 12.5pt
\typosize[8/] % font 8pt, baseline unchanged
\endtt
The commands for font size setting described in this section
have local validity. If you put them into a group,
the settings are lost when the group is finished. If you set
something relevant with paragraph shape (baselineskip given by
\^`\typosize` for example) then you must first finalize the
paragraph before closing the group:
`{\typosize[12/14] ...<text of paragraph>... \par}`.
The command \^`\typoscale[<font-factor>/<baselineskip-factor>]`
sets the text and math fonts
size and baselineskip as a multiple of the current fonts size and
baselineskip. The factor is written in \"scaled"-like way, it means that 1000
means factor one. The empty parameter is equal to the parameter 1000,
i.e. the value stays unchanged. Examples:
\begtt
\typoscale[800/800] % fonts and baselineskip re-size to 80 %
\typoscale[\magstep2/] % fonts bigger 1,44times (\magstep2 expands to 1440)
\endtt
First usage of \^`\typosize` or \^`\typoscale` macro in your document sets so-called {\em main values}, i.\,e.\ main font size and main baselineskip. They are internally
saved in registers \^`\mainfosize` and \^`\mainbaselineskip`.
\new
The \^`\typoscale` command does scaling with respect to current values by default.
If you want to do it with respect to the main values, type \^`\scalemain` immediately
before \^`\typoscale` command.
\begtt
\typosize[12/14.4] % first usage in document, sets main values internally
\typosize[15/18] % bigger font
\scalemain \typoscale[800/800] % reduces from main values, no from current.
\endtt
The \^`\typosize` and \^`\typoscale` macros initialize the font family by `\rm`.
You can re-size only the current font by the command
\^`\thefontsize[<font-size>]` or the font can be rescaled by
\^`\thefontscale[<factor>]`. These macros don't change math fonts sizes nor
baselineskip.
\new
There is \"low level" \^`\setfontsize{<size-spec>}` command which behaves like
a font modifier and sets given font size used by next variant selectors.
It doesn't change the font size immediately, but the following variant selector
does it. For example \^`\setfontsize{at15pt}`\^`\currvar` sets current variant to 15pt.
If you are using a font family with \"optical sizes feature" (i.\,e.\ there
are more recommended sizes of the same font which are not scaled
linearly; a good example is Computer Modern aka Latin Modern fonts)
then the recommended size is selected by all mentioned commands automatically.
More information about resizing of fonts is documented in the
section~\ref[setfontsize].
\secc Typesetting math
%%%%%%%%%%%%%%%%%%%%%
See the additional document
\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]
{Typesetting Math with \OpTeX/} for more details about this issue.
\OpTeX/ preloads a collection of 7bit Computer Modern math fonts
and AMS fonts in its format for math typesetting.
You can use them in any size and in the \^`\boldmath` variant.
%
\new
Most declared text font families (see \^`\fontfam` in the section~\ref[fontfam])
are configured with a recommended Unicode
math font. This font is automatically loaded unless you specify
\^`\noloadmath` before first \^`\fontfam` command. See log file for more
information about loading text font family and Unicode math fonts. If you
prefer another Unicode math font, specify it by \^`\loadmath{[<font-file>]}`
or \^`\loadmath{<font-name>}` before first \^`\fontfam` command.
Hundreds math symbols and operators like in AMS\TeX/ are accessible.
For example `\alpha` $\alpha$, `\geq`~$\geq$, `\sum` $\sum$,
`\sphericalangle` $\sphericalangle$, `\bumpeq`, $\bumpeq$. See AMS\TeX/
manual or
\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf\#ref:objects]
{Typesetting Math with \OpTeX/} for complete list of math symbols.
The following math alphabets are available:
\begtt \catcode`\$=3 \catcode`/=0 \medmuskip=0mu \adef{ }{ }
\mit % mathematical variables $abc-xyz,ABC-XYZ$
\it % text italics $/it abc-xyz,ABC-XYZ$
\rm % text roman $/rm abc-xyz,ABC-XYZ$
\cal % normal calligraphics $/cal ABC-XYZ$
\script % script $/script ABC-XYZ$
\frak % fracture $/frak abc-xyz,ABC-XYZ$
\bbchar % double stroked letters $/bbchar ABC-XYZ$
\bf % sans serif bold $/bf abc-xyz,ABC-XYZ$
\bi % sans serif bold slanted $/bi abc-xyz,ABC-XYZ$
\endtt
The last two selectors \^`\bf` and \^`\bi` select the sans serif fonts in math regardless of the current text font family. This is a common notation for vectors and
matrices. You can re-declare them, see section~\ref[unimath-codes] where
definitions of Unicode math variants of \^`\bf` and \^`\bi` selectors are documented.
The math fonts can be scaled by \^`\typosize` and \^`\typoscale` macros.
Two math fonts collections are prepared: \^`\normalmath` for normal weight
and \^`\boldmath` for bold. The first one is set by default, the second one
is usable for math formulae in titles typeset in bold, for example.
\new
You can use \^`\mathbox{<text>}` inside math mode. It behaves as `{\hbox{<text>}}`
(i.e. the <text> is printed in horizontal non-math mode)
but the size of the <text> is adapted to the context of math size (text or script or
scriptscript).
\sec Typical elements of the document
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\secc[chap] Chapters and sections
%%%%%%%%%%%%%%%%%%%%%%%%%%
The documents can be divided into chapters (\^`\chap`),
sections (\^`\sec`), subsections (\^`\secc`) and they can be titled
by \^`\tit` command. The parameters are separated by the end of current line (no
braces are used):
\begtt \catcode`\<=13
\tit Document title <end of line>
\chap Chapter title <end of line>
\sec Section title <end of line>
\secc Subsection title <end of line>
\endtt
The chapters are automatically numbered by one number, sections by two numbers
(chapter.section), and subsections by three numbers. If there are no chapters
then sections have only one number and subsections two.
The implicit design of the titles of chapter etc.\ is implemented in the
macros \^`\_printchap`, \^`\_printsec` and \^`\_printsecc`. A designer can simply change
these macros if he/she needs another behavior.
The first paragraph after the title of chapter, section, and subsection is
not indented but you can type `\let`\^`\_firstnoindent=\relax` if you need all
paragraphs indented.
If a title is so long then it breaks into more lines in the output. It is better to hint at the
breakpoints because \TeX/ does not interpret the meaning of the title.
Users can put the \^`\nl` (means newline) to the breakpoints.
If you want to arrange a title to more lines in your source file then you can
use `^^J` at the end of each line (except the last one).
When `^^J` is used, then the reading of the title continues at the next line.
The \"normal" comment character `%` doesn't work in titles.
You can use \^`\nl`{\visiblesp` ^^J`} if you want to have corresponding lines in the source
and the output.
The chapter, section, or subsection isn't numbered if the \^`\nonum` precedes.
And the chapter, section, or subsection isn't delivered to the table of
contents if \^`\notoc` precedes. You can combine both prefixes.
\secc[cap] Another numbered objects
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Apart from chapters, sections, and subsections, there are another
automatically numbered objects: equations, captions for tables and
figures. The user can declare more numbered objects.
If the user writes the \^`\eqmark` as the last element of the display mode then
this equation is numbered. The equation number is printed in brackets. This number
is reset in each section by default.
If the \^`\eqalignno` is used, then user can put \^`\eqmark` to the last column
before `\cr`. For example:
\begtt
\eqalignno{
a^2+b^2 &= c^2 \cr
c &= \sqrt{a^2+b^2} & \eqmark \cr}
\endtt
Another automatically numbered object is a caption which is tagged by \^`\caption/t` for
tables and \^`\caption/f` for figures. The caption text follows.
The \^`\cskip` can be used between \^`\caption` text and the real object (table
or figure). You can use two orders: `<caption>\cskip <object>` or
`<object>\cskip <caption>`.
The \^`\cskip` creates appropriate vertical space between them. Example:
\begtt
\caption/t The dependency of the computer-dependency on the age.
\cskip
\noindent\hfil\table{rl}{
age & value \crl\noalign{\smallskip}
0--1 & unmeasured \cr
1--6 & observable \cr
6--12 & significant \cr
12--20 & extremal \cr
20--40 & normal \cr
40--60 & various \cr
60--$\infty$ & moderate}
\endtt
This example produces:
\medskip
\caption/t The dependency of the computer-dependency on the age.
\cskip
\noindent\hfil\table{rl}{
age & value \crl\noalign{\smallskip}
0--1 & unmeasured \cr
1--6 & observable \cr
6--12 & significant \cr
12--20 & extremal \cr
20--40 & normal \cr
40--60 & various \cr
60--$\infty$ & moderate}
\medskip
You can see that the word \"Table" followed by a number is added by the macro
`\caption/t`.
The caption text is centered. If it occupies more lines then the
last line is centered.
The macro \^`\caption/f` behaves like \^`\caption/t` but it is intended for
figure captions with independent numbering.
The word (Table, Figure) depends on the selected language (see
section~\ref[lang] about languages).
If you wish to make the table or figure as a floating object, you need to use
Plain \TeX/ macros \^`\midinsert` or \^`\topinsert` terminated by \^`\endinsert`.
Example:
\begtt
\topinsert % table and its caption printed at the top of the current page
<caption and table>
\endinsert
\endtt
%
The pair \^`\midinsert`...\^`\endinsert` prefers to put the enclosed object
to the current place. Only if this is unable due to page breaking, it
behaves like \^`\topinsert`...\^`\endinsert`.
\new
There are five prepared counters `A`, `B`, `C`, `D` and `E`.
They are reset in each chapter and section\fnote
{This feature can be changed, see the section~\ref[sections] in the technical documentation.}.
They can be used in context of \^`\numberedpar` `<letter>{<text>}`
macro. For example:
\begtt
\def\theorem {\numberedpar A{Theorem}}
\def\corollary {\numberedpar A{Corollary}}
\def\definition {\numberedpar B{Definition}}
\def\example {\numberedpar C{Example}}
\endtt
%
Three independent numbers are used in this example. One for Theorems and Corollaries
second for Definitions and third for Examples. The user can write
`\theorem Let $M$ be...` and the new paragraph is started with the text:
{\bf Theorem 1.4.1.} Let $M$ be...
You can add an optional parameter in brackets. For example,
`\theorem [(L'Hôpital's rule)] Let $f$, $g$ be...`
is printed like {\bf Theorem 1.4.2 (L'Hôpital's rule).} Let $f$, $g$ be...
\secc References
%%%%%%%%%%%%%%%
Each automatically numbered object documented in
sections \ref[chap] and \ref[cap] can be referenced
\new
if optional parameter
`[<label>]` is appended to \^`\chap`, \^`\sec`,
\^`\secc`, \^`\caption/t`, \^`\caption/f` or \^`\eqmark`. The alternative syntax is
to use \^`\label[<label>]` before mentioned commands (not necessarily directly
before). The reference is realized by \^`\ref[<label>]` or \^`\pgref[<label>]`.
Example:
\begtt
\sec[beatle] About Beatles
\noindent\hfil\table{rl}{...} % the table
\cskip
\caption/t [comp-depend] The dependency of the comp-dependency on the age.
\label[pythagoras]
$$ a^2 + b^2 = c^2 \eqmark $$
Now we can point to the section~\ref[beatle] on the page~\pgref[beatle]
or write something about the equation~\ref[pythagoras]. Finally there
is an interesting Table~\ref[comp-depend].
\endtt
If there are forward referenced objects then users have to run \TeX{} twice.
During each pass, the working `*.ref` file (with references data) is created
and this file is used (if it exists) at the beginning of the document.
You can use the \^`\label[<label>]` before the `\theorem`, `\definition` etc.\
(macros defined with `\numberedpar`) if you want to reference these numbered objects.
You can't use `\theorem[<label>]` because the optional parameter
is reserved to another purpose here.
You can create a reference to whatever else by commands
\^`\label[<label>]`\^`\wlabel{<text>}`. The connection between <label> and
<text> is established. The \^`\ref[<label>]` will print <text>.
By default, labels are not printed, of course. But if you are preparing a
draft version of your document then you can declare \^`\showlabels`. The labels
are printed at their destination places after such a declaration.
\secc Hyperlinks, outlines
%%%%%%%%%%%%%%%%%%%%%%%%%
If the command \^`\hyperlinks` `<color-in> <color-out>` is used at the beginning of
the document, then the following objects are hyperlinked in the PDF output:
\begitems
* numbers and texts generated by \^`\ref` or \^`\pgref`,
* numbers of chapters, sections, subsections, and page numbers in the table of contents,
* numbers or marks generated by \~`\cite` command (bibliography references),
* texts printed by \~`\url` or \~`\ulink` commands.
\enditems
The last object is an external link and it is colored by
<color-out>. Other links are internal and they are colored by
<color-in>. Example:
\begtt
\hyperlinks \Blue \Green % internal links blue, URLs green.
\endtt
You can use another marking of active links: by frames which are visible in
the PDF viewer but invisible when the document is printed. The way to do it
is to define the macros \^`\_pgborder`, \^`\_tocborder`, \^`\_citeborder`,
\^`\_refborder` and \^`\_urlborder` as the triple of RGB components of the used
color. Example:
\begtt
\def\_tocborder {1 0 0} % links in table of contents: red frame
\def\_pgborder {0 1 0} % links to pages: green frame
\def\_citeborder {0 0 1} % links to references: blue frame
\endtt
By default, these macros are not defined. It means that no frames are created.
The hyperlinked footnotes can be activated by \^`\fnotelinks` `<color-fnt> <color-fnf>`
where footnote marks in the text have `<color-fnt>` and the same footnote marks
in footnotes have <color-fnf>. You can define relevant borders
\^`\_fntborder` and \^`\_fnfborder` analogically as \^`\_pgborder` (for example).
There are \"low level" commands to create the links. You can specify the
destination of the internal link by \^`\dest[<type>:<label>]`. The
active text linked to the \^`\dest` can be created by
\^`\ilink[<type>:<label>]{<text>}`. The `<type>` parameter is one of
the `toc`, `pg`, `cite`, `ref`, or another special for your purpose.
These commands create internal links only when \^`\hyperlinks` is declared.
The \^`\url` macro prints its parameter in \~`\tt` font and creates a potential
breakpoints in it (after slash or dot, for example). If the \^`\hyperlinks`
declaration is used then the parameter of \^`\url` is treated as an external URL link.
An example: `\url{http://www.olsak.net}` creates \url{http://www.olsak.net}.
The characters \code{\%}, `\`, `#`, `{`, and `}` have to be protected by
backslash in the \^`\url` argument, the other special characters `~`,
`^`, `&` can be written as single character\fnote
{More exactly, there are the same rules as for `\code` command, see
section~\ref[verbatim].}.
You can insert the `\|` command
in the `\url` argument as a potential breakpoint.
If the linked text have to be different than the URL, you can use
\^`\ulink[<url>]{<text>}` macro. For example:
`\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}`
outputs to the text
\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}.
The characters \code{\%}, `\`, `#`, `{`, and `}` must by escaped in
the <url> parameter.
The PDF format provides {\em outlines} which are notes placed in the special frame of
the PDF viewer. These notes can be managed as a structured and hyperlinked
table of contents of the document. The command \^`\outlines{<level>}` creates
such outlines from data used for the table of contents in the document. The
<level> parameter gives the level of opened sub-outlines
in the default view. The deeper levels can be opened by mouse click on the
triangle symbol after that.
\new
If you are using a special unprotected macro in section titles then \^`\outlines` macro
may crash. You must declare a variant of the macro for outlines case which is
expandable. Use \~`\regmacro` in this case. See the section \ref[toc] for more information
about \~`\regmacro`.
The command \^`\insertoutline{<text>}` inserts a next entry into PDF outlines at
the main level~0. These entries can be placed before the table of contents (created
by \^`\outlines`) or after it. Their hyperlink destination is in the place
where the \^`\insertoutline` macro is used.
The command \^`\thisoutline{<text>}` uses <text> in the outline instead of default
title text for the first following `\chap`, `\sec`, or `\secc`.
Special case: \^`\thisoutline{\relax}` doesn't create any outline for the following
`\chap`, `\sec`, or `\secc`.
\secc Lists
%%%%%%%%%%
The list of items is surrounded by \^`\begitems` and \^`\enditems` commands.
The asterisk (`*`) is active within this environment and it starts one item.
The item style can be chosen by the \^`\style` parameter written after \^`\begitems`:
\begtt
\style o % small bullet
\style O % big bullet (default)
\style - % hyphen char
\style n % numbered items 1., 2., 3., ...
\style N % numbered items 1), 2), 3), ...
\style i % numbered items (i), (ii), (iii), ...
\style I % numbered items I, II, III, IV, ...
\style a % items of type a), b), c), ...
\style A % items of type A), B), C), ...
\style x % small rectangle
\style X % big rectangle
\endtt
For example:
\begtt
\begitems
* First idea
* Second idea in subitems:
\begitems \style i
* First sub-idea
* Second sub-idea
* Last sub-idea
\enditems
* Finito
\enditems
\endtt
%
produces:
\begitems
* First idea
* Second idea in subitems:
\begitems \style i
* First sub-idea
* Second sub-idea
* Last sub-idea
\enditems
* Finito
\enditems
Another style can be defined by the command \~`\sdef{_item:<style>}{<text>}`.
Default item can be set by \^`\defaultitem={<text>}`.
The list environments can be nested. Each new level of items is indented by
next multiple of \^`\iindent` value which is set to `\parindent` by default.
The \^`\ilevel` register says what level of items is currently processed.
Each \^`\begitems` starts \^`\everylist` tokens register. You can set, for
example:
\begtt
\everylist={\ifcase\ilevel\or \style X \or \style x \else \style - \fi}
\endtt
You can say \^`\begitems` \^`\novspaces` if you don't want vertical spaces above
and below the list. The nested item list is without vertical spaces
automatically. More information about the design of lists of items should be
found in the section~\ref[lists].
A \"selected block of text" can be surrounded by
\^`\begblock`\dots\^`\endblock`. The default design of blocks of text is
indented text in smaller font. The blocks of text can be nested.
\secc Tables
%%%%%%%%%%%
The macro \^`\table{<declaration>}{<data>}` provides similar <declaration>
of tables as in \LaTeX: you can use letters `l`, `r`, `c`, each letter declares
one column (aligned to left, right, center, respectively).
These letters can be combined by the `|` character (vertical line). Example
\begtt
\table{||lc|r||}{ \crl
Month & commodity & price \crli \tskip2pt
January & notebook & \$ 700 \cr
February & skateboard & \$ 100 \cr
July & yacht & k\$ 170 \crl}
\endtt
%
generates the result:
\vskip-\medskipamount
\noindent\hfil\table{||lc|r||}{ \crl
Month & commodity & price \crli \tskip2pt
January & notebook & \$ 700 \cr
February & skateboard & \$ 100 \cr
July & yacht & k\$ 170 \crl}
\medskip
Apart from `l`, `r`, `c` declarators, you can use the `p{<size>}` declarator
which declares the column with paragraphs of given width. More precisely,
a long text in the table cell is printed as a multiline paragraph with given width.
By default, the paragraph is left-right justified. But there are
alternatives:
\begitems
* `p{<size>`\^`\fL}` fit left, i.e.\ left justified, ragged right,
* `p{<size>`\^`\fR}` fit right, i.e.\ right justified, ragged left,
* `p{<size>`\^`\fC}` fit center, i.e.\ ragged left plus right,
* `p{<size>`\^`\fS}` fit special, short one-line pararaph centered,
long paragraph normal,
* `p{<size>`\^`\fX}` fit extra, left-right justified but last line centered.
\enditems
You can use `(<text>)` in the <declaration>. Then this text is applied in
each line of the table. For example `r(\kern10pt)l` adds more 10\,pt space
between `r` and `l` rows.
An arbitrary part of the <declaration> can be repeated by a <number>
prefixed. For example `3c` means `ccc` or `c 3{|c}` means
`c|c|c|c`. Note that spaces in the <declaration> are ignored and you
can use them in order to more legibility.
The command `\cr` used in the <data> part of the table
is generally known from Plain \TeX. It marks the end of each row in the table.
Moreover \OpTeX/ defines following similar commands:
\begitems
* \^`\crl` \dots\ the end of the row with a horizontal line after it.
* \^`\crll` \dots\ the end of the row with a double horizontal line after it.
* \^`\crli` \dots\ like \^`\crl` but the horizontal line doesn't intersect the
vertical double lines.
* \^`\crlli` \dots\ like \^`\crli` but horizontal line is doubled.
* \^`\crlp{<list>}` \dots\ like \^`\crli` but the lines are drawn only in the
columns mentioned in comma-separated `<list>` of their numbers.
The <list> can include `<from>-<to>` declarators, for example
\^`\crlp{1-3,5}` is equal to \^`\crlp{1,2,3,5}`.
\enditems
The \^`\tskip``<dimen>` command works like the `\noalign{\vskip<dimen>}`
immediately after `\cr*` commands but it doesn't interrupt the vertical lines.
\new
You can use the following parameters for the \^`\table` macro. Default values are listed
too.
\begtt
\everytable={} % code used in \vbox before table processing
\thistable={} % code used in \vbox, it is removed after using it
\tabiteml={\enspace} % left material in each column
\tabitemr={\enspace} % right material in each column
\tabstrut={\strut} % strut which declares lines distance in the table
\tablinespace=2pt % additional vert. space before/after horizontal lines
\vvkern=1pt % space between lines in double vertical line
\hhkern=1pt % space between lines in double horizontal line
\tabskip=0pt % space between columns
\tabskipl=0pt \tabskipr=0pt % space before first and after last column
\endtt
Example: if you do \^`\tabiteml={$\enspace}`\^`\tabitemr={\enspace$}` then
the \^`\table` acts like \LaTeX's array environment.
If there is an item that spans to more than one column in the table then
the macro \^`\multispan{<number>}` (from Plain \TeX) can help you. Another
alternative is
the command \^`\mspan``<number>[<declaration>]{<text>}`
which spans <number> columns and formats the <text> by the
<declaration>. The <declaration> must include a declaration of only one column
with the same syntax as common \^`\table` <declaration>.
If your table includes vertical rules and you want to
create continuous vertical rules by \^`\mspan`, then use rule declarators `|`
after `c`, `l` or `r` letter in \^`\mspan` <declaration>. The
exception is only in the case when \^`\mspan` includes the first
column and the table have rules on the left side. The example of \^`\mspan`
usage is below.
The \^`\frame{<text>}` makes a frame around <text>. You can put the whole \^`\table`
into \^`\frame` if you need double-ruled border of the table. Example:
\begtt
\frame{\table{|c||l||r|}{ \crl
\mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli
first & second & third \crlli
seven & eight & nine \crli}}
\endtt
%
creates the following result:
\hfil\frame{\table{|c||l||r|}{\crl
\mspan3[|c|]{\bf Title} \crl \noalign{\kern\hhkern}\crli
first & second & third \crlli
seven & eight & nine \crli}}
\bigskip
The \^`\vspan``<number>{<text>}` shifts the <text> down in order it looks
like to be in the center of the <number> lines (current line is first).
You can use this for creating tables like in the following example:
\begtt \typosize[8.7/11]
\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt}
\baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt}
\table{|8{c|}}{\crlp{3-8}
\mspan2[c|]{} & \mspan3[c|]{Singular} & \mspan3[c|]{Plural} \crlp{3-8}
\mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl
\vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} & \mspan3[c|]{X} \crlp{2,6-8}
& Exclusive & \mspan3[c|]{} & \mspan3[c|]{X} \crl
\vspan2{II} & Informal & \mspan3[c|]{X} & \mspan3[c|]{X} \crlp{2-8}
& Formal & \mspan6[c|]{X} \crl
\vspan2{III} & Informal & \vspan2{O} & X & X & \mspan2[c|]{X} &\vspan2{O} \crlp{2,4-7}
& Formal & & \mspan4[c|]{X} & \crl
}
\endtt
\puttext 8.9cm -4cm {\pdfsave\pdfscale{.5}{.5}\rlap{%
\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt}
\baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt}
\table{|8{c|}}{\crlp{3-8}
\mspan2[c|]{} &\mspan3[c|]{Singular} &\mspan3[c|]{Plural} \crlp{3-8}
\mspan2[c|]{} & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl
\vspan2{I} & Inclusive & \mspan3[c|]{\vspan2{O}} &\mspan3[c|] X \crlp{2,6-8}
& Exclusive & \mspan3[c|]{} &\mspan3[c|] X \crl
\vspan2{II} & Informal & \mspan3[c|] X &\mspan3[c|] X \crlp{2-8}
& Formal & \mspan6[c|] X \crl
\vspan2{III} & Informal & \vspan2{O} & X & X &\mspan2[c|] X & \vspan2{O} \crlp{2,4-7}
& Formal & &\mspan4[c|] X & \crl
}}\pdfrestore}
\hangindent=-7.5cm \hangafter=0
You can use \^`\vspan` with non-integer parameter too if you feel that the
result looks better, for example \^`\vspan2.1{text}`.
\hangindent=-7.5cm \hangafter=0
The rule width of tables and implicit width of all `\vrule`s and `\hrule`s
can be set by the command \^`\rulewidth=<dimen>`. The default value given
by \TeX/ is 0.4\,pt.
\hangindent=-7.5cm \hangafter=-2
The `c`, `l`, `r` and `p` are default \"declaration letters" but you can define
more such letters by `\def\_tabdeclare<letter>{<left>##<right>}`.
More about it is in technical documentation in section~\ref[table.impl].
See the definition of the \^`\_tabdeclarec` macro, for example.
The `:` columns boundary declarator is described in section~\ref[table.bound].
The tables with given width can be declared by `to<size>` or `pxto<size>`.
More about it is in section~\ref[table.w].
Many tips about tables can be seen on the site
\url{http://petr.olsak.net/optex/optex-tricks.html}.
\label[verbatim]\secc Verbatim
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
The display verbatim text have to be surrounded by the \^`\begtt` and
\^`\endtt` couple.
The in-line verbatim have to be tagged (before and after)
by a character which is declared by
\^`\verbchar``<char>`. For example \code{\\verbchar`}
declares the character \code{`}
for in-line verbatim markup.
And you can use \code{`\\relax`} for
verbatim `\relax` (for example).
\new
Another alternative of printing in-line
verbatim text is \~`\code{<text>}` (see below).
If the numerical register \^`\ttline` is set to the non-negative value then
display verbatim will number the lines. The first line has the number
\^`\ttline+1` and when the verbatim ends then the \^`\ttline` value is equal to the
number of the last line printed. Next \^`\begtt...`\^`\endtt` environment will follow
the line numbering. \OpTeX/ sets \^`\ttline=-1` by default.
The indentation of each line in display verbatim is controlled by
\^`\ttindent` register. This register is set to the `\parindent` by default.
Users can change the values of the `\parindent` and \^`\ttindent` independently.
The \^`\begtt` command starts the internal group in which the catcodes are changed.
\new
Then the \^`\everytt` tokens register is run. It is empty by default and the user can
control fine behavior by it. For example, the catcodes can be re-declared here. If
you need to define an active character in the \^`\everytt`, use \~`\adef` as in the
following example:
\begtt \adef@{\string\endtt}
\everytt={\adef!{?}\adef?{!}}
\begtt
Each occurrence of the exclamation mark will be changed to
the question mark and vice versa. Really? You can try it!
@
\endtt
%
The \~`\adef` command sets its parameter as active {\it after\/}
the parameter of \^`\everytt` is read. So you don't have to worry about active
categories in this parameter.
There is an alternative to \^`\everytt` named \^`\everyintt` which is used for
in-line verbatim surrounded by an \^`\verbchar` or processed by the \~`\code`
command.
The \^`\everytt` is applied to all \^`\begtt...`\^`\endtt` environments (if it is not
declared in a group). There are tips for such global `\everytt` definitions here:
\begtt \adef!{\char9251 }
\everytt={\typosize[9/11]} % setting font size for verbatim
\everytt={\ttline=0} % each listing will be numbered from one
\everytt={\visiblesp} % visualization!of!spaces
\endtt
\new
If you want to apply a special code only for one \^`\begtt...`\^`\endtt`
environment then don't set any \^`\everytt` but put desired material at the
same line where \^`\begtt` is. For example:
\begtt \adef@{\string\endtt}
\begtt \adef!{?}\adef?{!}
Each occurrence of ? will be changed to ! and vice versa.
@
\endtt
The in-line verbatim surrounded by a \^`\verbchar` doesn't work in
parameter of macros and macro definitions. (It works in titles declared by
\~`\chap`, \~`\sec` etc. and in \~`\fnote`s, because these macros are
specially defined in \OpTeX/).
\new
You can use more robust command \^`\code{<text>}` in problematic
situations, but you have to escape the following characters in the <text>:
`\`, `#`, `%`, braces (if the braces are unmatched in the <text>),
and space or `^` (if there are more than one subsequent spaces or `^` in
the <text>). Examples:
\begtt
\code{\\text, \%\#} ... prints \text, %#
\code{@{..}*&^$ $} ... prints @{..}*&^$ $ without escaping, but you can
escape these characters too, if you want.
\code{a \ b} ... two spaces between a b, the second must be escaped
\code{xy\{z} ... xy{z ... unbalanced brace must be escaped
\code{^\^M} ... prints ^^M, the second ^ must be escaped
\endtt
You can print verbatim listing from external files by the \^`\verbinput` command.
Examples:
\begtt
\verbinput (12-42) program.c % listing from program.c, only lines 12-42
\verbinput (-60) program.c % print from begin to the line 60
\verbinput (61-) program.c % from line 61 to the end
\verbinput (-) program.c % whole file is printed
\verbinput (70+10) program.c % from line 70, only 10 lines printed
\verbinput (+10) program.c % from the last line read, print 10 lines
\verbinput (-5+7) program.c % from the last line read, skip 5, print 7
\verbinput (+) program.c % from the last line read to the end
\endtt
\new
You can insert additional commands for \^`\verbinput` before
the first opening bracket. They are processed in the local group.
For example, `\verbinput \hsize=20cm (-) program.c`.
The \~`\ttline` influences the line numbering by the same way as in
\~`\begtt...`\~`\endtt` environment. If \~`\ttline=-1` then real line numbers are
printed (this is the default). If \code{\\ttline<-1} then no line
numbers are printed.
The \^`\verbinput` can be controlled by \^`\everytt`, \^`\ttindent` just like
in \~`\begtt...`\~`\endtt`.
The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of
codes. Automatic syntax highlighting is possible, for example
`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or
`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes.
\OpTeX/ implements C, Python, \TeX/, HTML and XML syntax highlighting.
More languages can be declared, see the section~\ref[hisyntax].
If the code is read by \^`\verbinput` and there are comment lines prefixed
by two characters then
you can set them by \~`\commentchars``<first><second>`. Such comments are
fully interpreted by \TeX/ (i.e. not verbatim).
Section~\ref[verb] (page \pgref[commentchars]) says more about this feature.
\sec Autogenerated lists
%%%%%%%%%%%%%%%%%%%%%%%%
\secc[toc] Table of contents
%%%%%%%%%%%%%%%%%%%%%%
The \^`\maketoc` command prints the table of contents of all \~`\chap`, \~`\sec`
and \~`\secc` used in the document. These data are read from the external `*.ref` file, so
you have to run \TeX/ more than once (typically three times if the table of
contents is at the beginning of the document).
Typically, we don't want to repeat the name of the section \"Table of contents"
in the table of contents again. The direct usage
of \~`\chap` or \~`\sec` isn't recommended here because the table of contents
is typically not referenced to itself. You can print the unnumbered and unreferenced
title of the section like this:
\begtt
\nonum\notoc\sec Table of Contents
\endtt
If you need a customization of the design of the TOC, read the
section~\ref[maketoc].
\new
If you are using a special macro in section or chapter titles
and you need different behavior of such macro in other cases then use
\^`\regmacro{<case-toc>}{<case-mark>}{<case-outline>}`.
The parameters are applied locally in given cases. The \^`\regmacro` can be
used repeatedly: then its parameters are accumulated (for more macros).
If a parameter is empty then original definition is used in given case.
For example:
\begtt
% default value of \mylogo macro used in text and in the titles:
\def\mylogo{\leavevmode\hbox{{\Red\it My}{\setfontsize{mag1.5}\rm Lo}Go}}
% another variants:
\regmacro {\def\mylogo{\hbox{\Red My\Black LoGo}}} % used in TOC
{\def\mylogo{\hbox{{\it My}\/LoGo}}} % used in running heads
{\def\mylogo{MyLoGo}} % used in PDF outlines
\endtt
\secc Making the index
%%%%%%%%%%%%%%%%%%%%%
The index can be included in the document by the \^`\makeindex` macro. No external
program is needed, the alphabetical sorting is done inside \TeX/ at macro
level.
The \^`\ii` command (insert to index) declares the word separated by the space
as the index item. This declaration is represented as an invisible item on the
page connected to the next visible word. The page number of the page where
this item occurs is listed in the index entry. So you can type:
\begtt
The \ii resistor resistor is a passive electrical component ...
\endtt
You cannot double the word if you use the \^`\iid` instead of \^`\ii`:
\begtt
The \iid resistor is a passive electrical component ...
or:
Now we'll deal with the \iid resistor .
\endtt
Note that the dot or comma has to be separated by space when \^`\iid` is
used. This space (before dot or comma) is removed by the macro in
the current text.
The multiple-words entries are commonly arranged in the index as follows:
\medskip
linear~dependency 11, 40--50
--- independency 12, 42--53
--- space 57, 76
--- subspace 58
\medskip
To do this you have to declare the parts of the index entries by the `/` separator.
Example:
\begtt
{\bf Definition.}
\ii linear/space,vector/space
{\em Linear space} (or {\em vector space}) is a nonempty set of...
\endtt
The number of the parts of one index entry (separated by `/`) is unlimited. Note, that you can
spare your typing by the comma in the \~`\ii` parameter. The previous example
is equivalent to `\ii linear/space \ii vector/space`~.
Maybe you need to propagate to the index the similar entry to the
linear/space in the form of space/linear. You can do this by the shorthand `,@`
at the end of the \~`\ii` parameter. Example:
\begtt
\ii linear/space,vector/space,@
is equivalent to:
\ii linear/space,vector/space \ii space/linear,space/vector
\endtt
If you really need to insert the space into the index entry, write `~`.
The \~`\ii` or \~`\iid` commands can be preceded by \^`\iitype` `<letter>`, then such
reference (or more references generated by one \~`\ii`) has the specified type.
The page numbers of such references should be formatted
specially in the index. \OpTeX/ implements only \^`\iitype` `b`,
\^`\iitype` `i` and \^`\iitype` `u`:
the page number in bold or in italics or underlined is printed
in the index when these types are used. The default index type is empty, which
prints page numbers in normal font. The \TeX/book index is a good example.
The \^`\makeindex` creates the list of alphabetically sorted index entries
without the title of the section and without creating more columns. \OpTeX/
provides other macros \^`\begmulti` and \^`\endmulti` for more columns:
\begtt \catcode`\<=13
\begmulti <number of columns>
<text>
\endmulti
\endtt
The columns will be balanced. The Index can be printed by the following
code:
\begtt
\sec Index
\begmulti 3 \makeindex \endmulti
\endtt
Only \"pure words" can be propagated to the index by the \~`\ii` command. It
means that there cannot be any macro, \TeX/ primitive, math selector, etc.
But there is another possibility to create such a complex index entry. Use
\"pure equivalent" in the \~`\ii` parameter and map this equivalent to a
real word that is printed in the index. Such mapping is done by
\^`\iis` command. Example:
\begtt
The \ii chiquadrat $\chi$-quadrat method is ...
If the \ii relax `\relax` command is used then \TeX/ is relaxing.
...
\iis chiquadrat {$\chi$-quadrat}
\iis relax {\code{\\relax}}
\endtt
%
The \^`\iis` `<equivalent> {<text>}` creates one entry in the \"dictionary
of the exceptions". The sorting is done by the <equivalent> but the
<text> is printed in the index entry list.
The sorting rules when \^`\makeindex` runs depends on the current language.
See section~\ref[lang] about languages selection.
\secc Bib\TeX/ing
%%%%%%%%%%%%%%%%
The command \^`\cite[<label>]` (or
\hbox{\^`\cite[<label-1>,<label-2>,...,<label-n>]`})
creates the citation in the form [42] (or [15,~19,~26]).
If \^`\shortcitations` is declared at the beginning of the document then
continuous sequences of numbers are re-printed like this:
\hbox{[3--5,~7,~9--11]}. If
\^`\sortcitations` is declared then numbers generated by one \^`\cite` command
are sorted upward.
If \^`\nonumcitations` is declared then the marks instead of numbers are generated
depending on the used bib-style. For example, the citations look like
[Now08] or [Nowak, 2008].
The \^`\rcite[<labels>]` creates the same list as \^`\cite[<labels>]` but without
the outer brackets. Example: `[\rcite[tbn], pg.~13]` creates [4,~pg.~13].
The \^`\ecite[<label>]{<text>}` prints the `<text>` only, but the entry labeled
<label> is decided as to be cited. If \~`\hyperlinks` is used then <text>
is linked to the references list.
You can define alternative formating of \^`\cite` command. Example:
\begtt \catcode`\<=13
\def\cite[#1]{(\rcite[#1])} % \cite[<label>] creates (27)
\def\cite[#1]{$^{\rcite[#1]}$} % \cite[<label>] creates^{27}
\endtt
The numbers printed by \^`\cite` correspond to the same numbers generated in
the list of references. There are two possibilities to generate this
references list:
\begitems
* Manually using \~`\bib[<label>]` commands.
* By \~`\usebib/<type> (<style>) <bib-base>` command which reads `*.bib`
files directly.
\enditems
\new
Note that another two possibilities documented in OPmac (using external
Bib\TeX/ program) isn't supported because Bib\TeX/ is an old program that does not
support Unicode. And Biber seems to be not compliant with Plain \TeX.
\medskip\noindent
{\bf References created manually using \^`\bib[<label>]` command.}
\begtt
\bib [tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997.
\bib [tst] P. Olšák. {\it Typografický systém \TeX.}
269~s. Praha: CSTUG, 1995.
\endtt
If you are using \~`\nonumcitations` then you need to declare the <marks>
used by \~`\cite` command. To do it you must use long form of the \^`\bib`
command in the format \^`\bib[<label>] = {<mark>}`. The spaces around
equal sign are mandatory. Example:
\begtt
\bib [tbn] = {Olšák, 2001}
P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001.
\endtt
\noindent
{\bf Direct reading of `.bib` files} is possible by \^`\usebib` macro.
This macro reads and uses macro package `librarian.tex` by Paul Isambert.
The usage is:
\begtt \catcode`\<=13
\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite),
\usebib/s (<style>) <bib-base> % sorted by style (s=style).
% example:
\nocite[*] \usebib/s (simple) op-biblist % prints all from op-biblist.bib
\endtt
The <bib-base> is one or more `*.bib` database source files (separated by
spaces and without extension) and the <style> is the part of the filename
`bib-<style>.opm` where the formatting of the references list is
defined. \OpTeX/ supports `simple` or `iso690` styles. The features of
the `iso690` style is documented in the section~\ref[isobib] in detail.
The \^`\usebib` command is more documented in section~\ref[usebib].
Not all records are printed from <bib-base> files: the command \^`\usebib`
selects only such bib-records which were used in \~`\cite` or \^`\nocite`
commands in your document. The \^`\nocite` behaves as \~`\cite` but prints
nothing. It tells only that the mentioned bib-record should be printed in the
reference list. If \^`\nocite[*]` is used then all records from <bib-base>
are printed.
You can create more independent lists of references (you are creating proceedings,
for example). Use \^`\bibpart` `{<name>}` to set the scope where \~`\cite`s
and references list are printed (and interconnected) independent of another
parts of your document. The \~`\cite` labels used in different parts can be
the same and they are not affected. References lists can be created manualy
by \^`\bib` or from a database by `\usebib`.
Example:
\begtt \typosize[10/12]
\bibpart {AA}
...\cite[labelX] ... \cite[labelY] ... % They belong to AA bib-list
\usebib/c (simple) file.bib % generates AA bib-list numbered 1, 2, ...
% \cite prints [1], [2], ... by bib-list AA
\bibpart {BB}
...\cite[labelZ] ... \cite[labelX] ... % They belong to BB bib-list
\bibnum=0 \usebib/c (simple) my.bib % generates BB bib-list numbered 1, 2, ...
% \cite prints [1], [2], ... by bib-list BB
\endtt
%
By default, \^`\bibpart` is empty. So \~`\cite`s and the references list are conneted
using this empty internal name.
\sec Graphics
%%%%%%%%%%%%%
\secc Colors
%%%%%%%%%%%
\OpTeX/ provides a small number of color selectors:
{\Blue `\Blue`},
{\Red `\Red`},
{\Brown `\Brown`},
{\Green `\Green`},
{\Yellow `\Yellow`},
{\Cyan `\Cyan`},
{\Magenta `\Magenta`},
{`\White`},
{\Grey `\Grey`},
{\LightGrey `\LightGrey`} and
`\Black`. User can define more
such selectors by setting four CMYK components
\new
or three RGB components. For example
\begtt
\def \Orange {\setcmykcolor{0 0.5 1 0}}
\def \Purple {\setrgbcolor{1 0 1}}
\endtt
\new
The command \^`\morecolors` reads more definitions of color selectors from
the \LaTeX/ file `x11nam.def`.
There are about 300 color names like
`\DeepPink`, `\Chocolate` etc. If there are numbered variants of the same
name, then the letters B, C, etc. are appended to the name in \OpTeX/. For example
`\Chocolate` is Chocolate1, `\ChocolateB` is Chocolate2 etc.
\new
The color selectors work locally in groups by default but with limitations. See
the technical documentation, section~\ref[colors] for more information.
The basic colors \^`\Blue`, \^`\Red`, \^`\Cyan`, \^`\Yellow` etc.\ are defined
with CMYK components using \^`\setcmykcolor`.
On the other hand, you can define a color with three
RGB components and \^`\morecolors` defines such RGB colors.
By default, the color model isn't converted but only stored to
PDF output for each used color. Thus, there may be a mix of color
models in the PDF output which is not a good idea. You can overcome this
problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only the selected color
model is used for PDF output and if a used color is declared by another color
model then it is converted.
The \^`\onlyrgb` creates colors more bright (usable for computer
presentations). On the other hand, CMYK makes colors more true\fnote
{Printed output is more equal to the monitor preview especially if you are
using ICC profile for your printer.}
for printing.
\new
You can define your color by a linear combination of previously defined colors using
\^`\colordef`. For example:
\begtt
\colordef \myCyan {.3\Green + .5\Blue} % 30 % green, 50 % blue, 20% white
\colordef \DarkBlue {\Blue + .4\Black} % Blue mixed with 40 % of black
\colordef \myGreen{\Cyan+\Yellow} % exact the same as \Green
\colordef \MyColor {.3\Orange+.5\Green+.2\Yellow}
\endtt
%
The linear combination is done in CMYK subtractive color space by default
(RGB colors used in \^`\colordef` argument are converted first).
If the resulting component is greater than 1 then it is truncated to 1.
If a convex linear combination (as in the last example above) is used then it
emulates color behavior on a painter's palette.
You can use \^`\rgbcolordef` instead of \^`\colordef` if you want to mix colors
in the additive RGB color space.
\def\coloron#1#2#3{%
\setbox0=\hbox{{#2#3}}\leavevmode
\localcolor \rlap{#1\strut \vrule width\wd0}\box0
}
The following example defines the macro for the
\coloron\Yellow\Brown{colored text on the colored background}. Usage:
`\coloron<background><foreground>{<text>}`
The `\coloron` can be defined as follows:
\begtt
\def\coloron#1#2#3{%
\setbox0=\hbox{{#2#3}}%
\leavevmode \rlap{#1\strut \vrule width\wd0}\box0
}
\coloron\Yellow\Brown{The brown text on the yellow background}
\endtt
\secc Images
%%%%%%%%%%%
The \^`\inspic` `{<filename>.<extension>}` or
\^`\inspic` `<filename>.<extension><space>`
inserts the picture stored in
the graphics file with the name `<filename>.<extension>` to the document.
You can set the picture width by \^`\picw=<dimen>`
before \^`\inspic` command which declares the width of the picture.
The image files can be in the PNG, JPG, JBIG2 or PDF format.
The \^`\picwidth` is an equivalent register to `\picw`. Moreover, there is an
\^`\picheight` register which denotes the height of the picture. If both
registers are set then the picture will be (probably) deformed.
The image files are searched in \^`\picdir`. This token list is empty
by default, this means that the image files are searched in the
current directory. Example: \^`\picdir={img/}` supposes that image files are
in `img` subdirectory. Note: the directory name must end by `/` in
the \^`\picdir` declaration.
Inkscape\fnote
{A powerful and free Wysiwyg editor for creating vector graphics.}
is able to save a picture to PDF and labels of the picture to another
file\fnote
{Chose \"Omit text in PDF and create LaTeX file" option.}.
This second file should be read by \TeX/to print labels
in the same font as document font. \OpTeX/ supports this feature by
\^`\inkinspic` `{<filename>.pdf}` command. It reads and displays
both: PDF image and labels generated by Inkscape.
If you want to create vector graphics (diagrams, schema, geometry
skicing) then you can do it by Wysiwyg graphics editor (Inkscape, Geogebra for
example), export the result to PDF and include it by \^`\inspic`.
If you want to \"program" such pictures then Tikz package is recommended.
It works in Plain \TeX/ and \OpTeX.
\secc PDF transformations
%%%%%%%%%%%%%%%%%%%%%%%%
All typesetting elements are transformed by linear
transformation given by the current transformation matrix. The
`\pdfsetmatrix` `{<a> <b> <c> <d>}` command makes the internal multiplication
with the current matrix so linear transformations can be composed.
One linear transformation given by the `\pdfsetmatrix` above transforms
the vector $[0,1]$ to [<a>,\,<b>] and $[1,0]$ to [<c>,\,<d>].
The stack-oriented commands `\pdfsave` and `\pdfrestore` gives a possibility of
storing and restoring the current transformation matrix and the position of the current point.
This position has to be the same from \TeX{}'s point of
view as from the transformation point of view when `\pdfrestore` is processed.
Due to this fact the `\pdfsave\rlap{<transformed text>}\pdfrestore`
or something similar is recommended.
\OpTeX/ provides two special transformation macros
\^`\pdfscale` and \^`\pdfrotate`:
\begtt \catcode`\<=13
\pdfscale{<horizontal-factor>}{<vertical-factor>}
\pdfrotate{<angle-in-degrees>}
\endtt
These macros simply call the properly `\pdfsetmatrix` command.
It is known that the composition of transformations is not commutative. It
means that the order is important. You have to read the transformation
matrices from right to left. Example:
\begtt
First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore
% text1 is scaled two times and it is reflected about vertical axis
% and next it is rotated by 30 degrees left.
second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore
% text2 is rotated by 30 degrees left then it is scaled two times
% and reflected about vertical axis.
third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}%
\pdfrestore % first slanted, then rotated by 15.3 degrees right
\endtt
%
\par\nobreak\bigskip\smallskip
This gives the following result.
First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore
second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore
third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}\pdfrestore
\par\nobreak\bigskip\penalty0%\bigskip
You can see that \TeX/ knows nothing about dimensions of transformed material,
it treats it as with a zero dimension object.
\new
The \^`\transformbox{<transformation>}{<text>}`
macro solves the problem. This macro puts the transformed
material into a box with relevant dimensions. The <transfromation> parameter
includes one or more transformation commands `\pdfsetmatrix`, `\pdfscale`,
`\pdfrotate` with their parameters. The <text> is transformed text.
Example: \~`\frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}`
creates \frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}.
The \^`\rotbox{<deg>}{<text>}` is shortcut for
\^`\transformbox{\pdfrotate{<deg>}}{<text>}`.
\secc Ovals, circles
%%%%%%%%%%%%%%%%%%%%
\new
The \^`\inoval{<text>}` creates a box like this: \inoval{text}.
Multiline text can be put in an oval by the command \^`\inoval{\vbox{<text>}}`.
Local settings can be set by
\^`\inoval[<settings>]{<text>}` or you can re-declare global settings by
\^`\ovalparams={<settings>}`. The default settings are:
\begtt
\ovalparams={\roundness=2pt % diameter of circles in the corners
\fcolor=\Yellow % color used for filling oval
\lcolor=\Red % line color used in the border
\lwidth=0.5bp % line width in the border
\shadow=N % use a shadow effect
\overlapmargins=N % ignore margins by surrounding text
\hhkern=0pt \vvkern=0pt} % left-righ margin, top-bottom margin
\endtt
The total distance from text to oval boundary is `\hhkern+\roundness` at the left and right
sides and
`\vvkern+\roundness` at the top and bottom sides of the text.
If you need to set a parameters for the <text> (color, size, font etc.),
put such setting right in front of the <text>:
\^`\inoval{<text settings><text>}`.
\new
The \^`\incircle[\ratio=1.8]{<text>}` creates a box like this \incircle[\ratio=1.8]{text}.
The \^`\ratio` parameter means width/height. The usage is analogical like for oval.
The default parameters are
\begtt
\circleparams={\ratio=1 \fcolor=\Yellow \lcolor=\Red \lwidth=0.5bp
\shadow=N \ignoremargins=N \hhkern=2pt \vvkern=2pt}
\endtt
\new
The macros \^`\clipinoval` `<x> <y> <width> <height> {<text>}`
and \^`\clipincircle` (with the same parameters)
print the `<text>` when a clipping path (oval or cirle with given
`<with>` and `<height>` shifted its center by `<x>` to right and by `<y>` to up)
is used.
The `\roundness=5mm` is default for \^`\clipinoval` and user can change it.
Example:
\begtt
\clipincircle 3cm 3.5cm 6cm 7cm {\picw=6cm \inspic{myphoto.jpg}}
\endtt
\secc Putting images and texts wherever
\new
The \^`\puttext` `<x> <y> {<text>}` puts the `<text>` shifted by `<x>` right and by
`<y>` up from the current point of typesetting and does not change the
position of the current point. Assume a coordinate system with origin in the
current point. Then \^`\puttext` `<x> <y> {<text>}` puts the text at the
coordinates `<x>`, `<y>`. More exactly the left edge of its baseline is at that
position.
\new
The \^`\putpic` `<x> <y> <width> <height> {<image-file>}` puts an image
given by `<image-file>` (including extension) of given
`<width>` and `<height>` at given position (its left-bottom corner).
You can write \^`\nospec` instead `<width>` or `<height>` if this parameter
is not specified.
\sec Others
%%%%%%%%%%%
\secc[lang] Using more languages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\OpTeX/ prepares hyphenation patterns for all languages if such patterns are
available in your \TeX/ system.
\new
Only USenglish patterns (original from Plain \TeX/) are preloaded.
Hyphenation patterns of all other languages are loaded on demand when you first use
the `\<iso-code>lang` command in your document.
For example \^`\delang` for German, \^`\cslang` for
Czech, \^`\pllang` for Polish. The <iso-code> is a shortcut
of the language (mostly from ISO 639-1).
You can list all available languages by \^`\langlist`
macro. This macro prints now:
\medskip
{\typosize[8.5/11.5]\emergencystretch=4em \hbadness=4000
\noindent \langlist
\par}
\medskip
\new
For compatibility with e-plain macros, there is the command
\^`\uselanguage{<language>}`. The parameter <language> is long-form of
language name, i.e.\ \^`\uselanguage{Czech}` works the same as \^`\cslang`.
The \^`\uselanguage` parameter is case insensitive.
For compatibility with \csplain/, there are macros \^`\ehyph`, \^`\chyph`,
\^`\shyph` which are equivalent to \^`\enlang`, \^`\cslang` and \^`\sklang`.
You can switch between language patterns by `\<iso-code>lang` commands mentioned
above. Default is \^`\enlang`.
\OpTeX/ generates three phrases used for captions and titles in technical
articles or books: \"Chapter", \"Table" and \"Figure". These phrases need to be known
in used language and it depends on the previously used language selectors
`\<iso-code>lang`. \OpTeX/ declares these words only for few languages:
\new
Czech, German, Spanish, French, Greek, Italian, Polish, Russian, Slovak and
English, If you need to use these words in other languages or you want to
auto-generate more words in your macros, then you can declare it by
\~`\sdef` or \^`\_langw` commands as shown in section~\ref[langphrases].
The \~`\makeindex` command needs to know the sorting rules used in your language.
\OpTeX/ defines only a few language rules for sorting: Czech,
Slovak and English. How to declare sorting rules for more languages are
described in the section~\ref[makeindex].
If you declare `\<iso-code>quotes`, then the control sequences `\"` and `\'`
should be used like this: `\"<quoted text>"` or `\'<quoted text>'`
(note that the terminating character is the same but it isn't escaped).
This prints language-dependent normal or alternative quotes around
<quoted text>. The language is specified by <iso-code>. \OpTeX/ declares
quotes only for Czech, German, Spanish, French, Greek, Italian, Polish,
Russian, Slovak and English (\^`\csquotes`, \^`\dequotes`, \dots, \^`\enquotes`).
You can simply define your own quotes as shown in section~\ref[langphrases].
The `\"` is used for quotes visually more similar to the `"` character which
can be primary quotes or secondary quotes depending on the language rules.
Maybe you want to alternate the meaning of these two types of quotes. Use
`\<isocode>quotes\altquotes` in such case.
\secc[styles] Pre-defined styles
%%%%%%%%%%%%%%%%%%%%%%%
\OpTeX/ defines three style-declaration macros \~`\report`, \~`\letter` and
\~`\slides`. You can use them at the beginning of your document if you are
preparing these types of documents and you don't need to create your own
macros.
The \^`\report` declaration is intended to create reports. It
sets default font size to 11\,pt and `\parindent` (paragraph indentation) to 1.2\,em.
The `\tit` macro uses smaller font because we assume that \"chapter level"
will be not used in reports. The first page has no page number, but the next pages
are numbered (from number~2). Footnotes are numbered from one in the whole
document. The macro `\author <authors><end-line>` can be used when
\^`\report` is declared. It prints `<authors>` in italics at the center of the
line. You can separate authors by `\nl` to more lines.
The \^`\letter` declaration is intended to create letters.
See the files `op-letter-*.tex` for examples.
The \^`\letter` style sets default
font size to 11\,pt and `\parindent` to 0\,pt. It sets half-line space
between paragraphs. The page numbers are not printed. The \^`\subject` macro
can be used, it prints the word \"Subject:" or \"Věc" (or something else
depending on current language) in bold. Moreover, the \^`\address` macro
can be used when \^`\letter` is declared. The usage of the \^`\address` macro
looks like:
\begtt \catcode`\<=13
\address
<first line of address>
<second line of address>
<etc.>
<empty line>
\endtt
It means that you need not use any special mark at the end of lines: the ends
of lines in the source file are the same as in printed output. The
\^`\address` macro creates `\vtop` with address lines. The width of such
`\vtop` is equal to the widest line used in it. So, you can use
`\hfill\address...` to put the address box to the right side of the
document. Or you can use `<prefixed text>\address...` to put
`<prefixed text>` before the first line of the address.
The \^`\slides` style creates a simple presentation slides. See an example
in the file `op-slides.tex`. Run `optex op-slides.tex` and see the documentation of
\^`\slides` style in the file `op-slides.pdf`.
Analogical declaration macro `\book` is not prepared. Each book needs
individual typographical care. You need to create specific macros for
design.
\secc Loading other macro packages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
You can load more macro packages by `\input{<file-name>}` or by
\^`\load[<file-names>]`. The first case (`\input`) is \TeX/ primitive command, it can be
used in the alternative old syntax `\input <filename><space>` too. The
second case (\^`\load`) allows specifying a comma-separated list of included files.
Moreover, it loads each macro file only once, it sets
temporarily standard category codes during loading and it tries to
load `<filename>.opm` or `<filename>.tex` or `<filename>`, the first occurence
wins. Example:
\begtt
\load [qrcode, tikz]
\endtt
%
does `\input qrcode.opm` \,and `\input tikz.tex` \,and it saves
local information about the fact that these file names
`qrcode` and `tikz` were already used, i.\,e. next \^`\load` will skip them.
It is strongly recommended to use the `\load` macro for loading external
macros if you need them. On the other hand, if your source document is structured
to more files (with individual chapters or sections), use simply the `\input` primitive.
The macro packages intended to \OpTeX/ have the name `*.opm`.
The following packages are distributed as part of \OpTeX/:
\begitems
* `qrcode.opm` enables to create QR codes.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/mte-doc.pdf]{\tt mte.opm}
includes settings for microtypographic extensions (protrusions+expanding fonts).
* `vlna.opm` enables to protect of one-letter prepositions and more things automatically.
* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons.
* `plain-at.opm` defines the old names from plain \TeX/.
* \ulink[https://ctan.org/tex-archive/macros/luatex/optex/pdfextra/pdfextra-doc.pdf]{\tt pdfextra.opm}
allows the use of many extra features from PDF standard (by M. Vlasák).
\enditems
See these files in `optex/pkg/` or `optex/<pkgname>` for more information about
them. The packages may have their documentation, try `texdoc <pkgname>`.
\secc Lorem ipsum dolor sit
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\new
A designer needs to concentrate on the design of the output and maybe he/she
needs material for testing macros. There is the possibility to generate a
neutral text for such experiments. Use \^`\lorem[<number>]` or
\^`\lorem[<from>-<to>]`. It prints a paragraph (or paragraphs) with neutral
text. The numbers <number> or <from>, <to> must be in the range 1 to 150
because there are 150 paragraphs with neutral text prepared for you.
The \^`\lipsum` macro is equivalent to \^`\lorem`. Example: \^`\lipsum[1-150]`
prints all prepared paragraphs.
\secc Logos
%%%%%%%%%%
\new
The control sequences for typical logos can be terminated by optional `/`
which is ignored when printing. This makes logos more legible in the source file:
\begtt
We are using \TeX/ because it is cool. \OpTeX/ is better than \LaTeX.
\endtt
\secc The last page
%%%%%%%%%%%%%%%%%%%
The number of the last page (it may be different from the number of pages) is
expanded by \^`\lastpage` macro. It expands to `?` in first \TeX/ run and to
the last page in next \TeX/ runs.
There is an example for footlines in the format \"current page / last page":
\begtt
\footline={\hss \fixedrm \folio/\lastpage \hss}
\endtt
\new
The \^`\lastpage` expands to the last \^`\folio` which is a decimal
number or Roman numeral (when \^`\pageno` is negative). If you need to know
the total pages used in the document, use \^`\totalpages` macro. It expands to
zero (in first \TeX/ run) or to the number of all pages in the document
(in next \TeX/ runs).
\secc Use \OpTeX/
%%%%%%%%%%%%%%%%%
\new
The command \^`\useOpTeX` (or \^`\useoptex`) does nothing in \OpTeX/ but it causes
an error (undefined control sequence) when another format is used. You can
put it as the first command in your document:
\begtt
\useOpTeX % we are using OpTeX format, no LaTeX :)
\endtt
\sec Summary
%%%%%%%%%%%%
\def\ttref#1'{\ea\~\ea`\csname#1\endcsname`}
\begtt \typosize[9/11]\adef&{\kern.25em}\adef~#1'{\ea\~\ea`\csname#1\endcsname`}
~tit' Title (terminated by end of line)
~chap' Chapter Title (terminated by end of line)
~sec' Section Title (terminated by end of line)
~secc' Subsection Title (terminated by end of line)
~maketoc' % table of contents generation
~ii' item1,item2 % insertion the items to the index
~makeindex' % the index is generated
~label' [labname] % link target location
~ref' [labname] % link to the chapter, section, subsection, equation
~pgref' [labname] % link to the page of the chapter, section, ...
~caption'/t % a numbered table caption
~caption'/f % a numbered caption for the picture
~eqmark' % a numbered equation
~begitems' % start a list of the items
~enditems' % end of list of the items
~begblock' % start a block of text
~endblock' % end of block of text
~begtt' % start a verbatim text
~endtt' % end verbatim text
~verbchar' X % initialization character X for in-text verbatim
~code' % another alternative for in-text verbatim
~verbinput' % verbatim extract from the external file
~begmulti' num % start multicolumn text (num columns)
~endmulti' % end multicolumn text
~cite' [labnames] % refers to the item in the lits of references
~rcite' [labnames] % similar to \cite but [] are not printed.
~sortcitations' ~shortcitations' ~nonumcitations' % cite format
~bib' [labname] % an item in the list of references
~usebib'/? (style) bib-base % direct using of .bib file, ? in {s,c}
~load' [filenames] % loadaing macro files
~fontfam' [FamilyName] % selection of font family
~typosize' [font-size/baselineskip] % size setting of typesetting
~typoscale' [factor-font/factor-baselineskip] % size scaling
~thefontsize' [size] ~thefontscale' [factor] % current font size
~inspic' file.ext % insert a picture, extensions: jpg, png, pdf
~table' {rule}{data} % macro for the tables like in LaTeX
~fnote' {text} % footnote (local numbering on each page)
~mnote' {text} % note in the margin (left or right by page number)
~hyperlinks' {color-in}{color-out} % PDF links activate as clickable
~outlines' {level} % PDF will have a table of contents in the left tab
~magscale'[factor] % resize typesetting, line/page breaking unchanged
~margins'/pg format (left, right, top, bottom)unit % margins setting
~report' ~letter' ~slides' % style declaration macros
\endtt
\sec API for macro writers
%%%%%%%%%%%%%%%%%%%%%%%%%%
All \TeX/ primitives and almost all \OpTeX/ macros are accesible by two
names: `\foo` (public or user name space) and `\_foo` (private name space).
For example `\hbox` and `\_hbox` means the same \TeX/ primitive. More about
it is documented in section~\ref[prefixed].
If this manual refers `\foo` then `\_foo` equivalent exists too. For example,
we mention the `\addto` macro below. The `\_addto` equivalent exists too, but it
is not explicitly mentioned here. If we refer only `\_foo` then its public
equivalent does not exist. For example, we mention the `\_codedecl` macro below, so
this macro is not available as `\codedecl`.
If you are writing a document or macros specific for the document, then use
simply user namespace (`\foo`). If you are writing more general macros,
then use private namespace (`\_foo`), but you should declare your own namespace
by \~`\_namespace` macro and you have to follow the naming discipline described in
section~\ref[pkg-namespace].
The alphabetically sorted list of macros typically usable for macro writers follows.
More information about such macros can be found in the technical documentation.
You can use hyperlinks here in order to go to the appropriate place of the technical
documentation.
\medskip \noindent
\^`\addto`` \macro{<text>}` adds <text> at the end of `\macro` body.\nl
\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl
\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl
\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl
\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl
\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl
\^`\cs` `{<string>}` expands `\<string>`.\nl
\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl
\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl
\~`\_endcode` closes the part of macro code in macro files.\nl
\~`\_endnamespace` closes name space declared by \~`\_namespace`.\nl
\~`\eqbox`` [<label>]{<text>}` creates `\hbox{<text>}` with common width across whole document.\nl
\^`\expr`` {<expression>}` expands to result of the <expression> with decimal numbers.\nl
\~`\fontdef`` \f {<font spec.>}` declares `\f` as font switch.\nl
\~`\fontlet` `\fa=\fb <sizespec.>` declares `\fa` as the same font switch
like `\fb` at given <sizespec.>.\nl
\^`\foreach` `<list>\do <parameters>{<what>}` is exapandable loop over <list>.\nl
\^`\foreachdef` `\macro <parameters>{<what>}` declares expandable `\macro` as loop over <list>.\nl
\^`\fornum` `<from>..<to>\do {<what>}` is expanadable loop with numeric variable.\nl
\^`\incr` `<counter>` increases and \^`\decr` `<counter>` decreases `<counter>` by one globally.\nl
\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl
`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl
\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist`
\~`\isfile`, \~`\isfont` do various tests. Example: \~`\isinlist\list{<text>}\iftrue` does
`\iftrue` if <text> is in `\list`.\nl
\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next
character is <char>, else <text2>.\nl
\~`\kv` `{<key>}` expands to value when key-value parameters are used.\nl
\^`\loop` `...` \^`\repeat` is classical Plain \TeX/ loop.\nl
\^`\mathstyles`` {<math list>}` enables to create macros dependent on current math style.\nl
\~`\_namespace`` {<pkg>}` declares name space used by package writers.\nl
\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl
\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl
\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl
\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl
\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl
\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl
\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl
\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl
\~`\readkv` `\macro` reads parameters from `\macro` in key-value format.\nl
\^`\replstring`` \macro{<stringA>}{<stringB>}` replaces all <stringA> to <stringB> in `\macro`.\nl
\^`\sdef` `{<string>}<parameters>{<body>}` behaves like `\def\<string><parameters>{<body>}`.\nl
\^`\setctable` and \^`\restorectable` manipulate with stack of catcode tables.\nl
\^`\slet` `{<stringA>}{<stringB>}` behaves like `\let\<stringA>=\<stringB>`\nl
\^`\sxdef` `{<string>}<parameters>{<body>}` behaves like `\xdef\<string><parameters>{<body>}`.\nl
\^`\trycs`` {<string>}{<text>}` expands `\<string>` if it is defined else expands <text>.\nl
\^`\useit` `<one>`, \^`\usesecond` `<one><two>` uses given parameter.\nl
\^`\wlog`` {<text>}` writes <text> to .log file.\nl
\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl
\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl
\unpenalty\unskip
\sec Compatibility with Plain \TeX/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
All macros of Plain \TeX/ are re-written in \OpTeX/. Common macros should
work in the same sense as in original Plain \TeX. Internal control sequences
like `\p@` or `\f@@t` are removed and mostly replaced by control sequences
prefixed by `_` (like `\_this`). If you need to use the basic set of old Plain
\TeX/ control sequences like `\p@` (for example you are reading an old macro file),
use `\load[plain-at]`.
All primitives and common macros have two
control sequences with the same meaning: in prefixed and unprefixed form.
For example `\hbox` is equal to `\_hbox`.
Internal macros of \OpTeX/ have and use only prefixed form. User should use
unprefixed forms, but prefixed forms are accessible too because the `_` is
set as a letter category code globally (in macro files and users document too). User
should re-define unprefixed forms of control sequences without worries that
something internal will be broken (only the sequence `\par` cannot be
re-defined without change of internal \TeX/ behavior because it is
hard-coded in \TeX/, unfortunately).
\new
The Latin Modern 8bit fonts instead Computer Modern 7bit fonts are
preloaded in the format, but only a few ones. The full family set is ready to
use after the command \~`\fontfam[LMfonts]` which reads the fonts in OTF
format.
\new
Plain \TeX/ defines `\newcount`, `\bye` etc. as `\outer` macros. \OpTeX/
doesn't set any macro as `\outer`. Macros like `\TeX`, `\rm` are defined as
`\protected`.
\new
The text accents macros `\"`, `\'`, `\v`, `\u`, `\=`, `\^`, `\.`, `\H`,
`\~`, \code{\\`}, `\t` are undefined\fnote
{The math accents macros like `\acute`, `\bar`, `\dot`, `\hat` still work.}
in \OpTeX/. Use real
letters like á, ř, ž in your source document instead of these old accents macros.
If you really want to use them, you can initialize them by the \^`\oldaccents`
command. But we don't recommend it.
\new
The default paper size is not set as the letter with 1\,in margins but as A4 with
2.5\,cm margins. You can change it, for example by
\^`\margins/1 letter (1,1,1,1)in`. This example sets the classical Plain \TeX/
page layout.
\new
The origin for the typographical area is not at the top left 1\,in 1\,in coordinates
but at the top left paper corner exactly. For example, `\hoffset` includes directly left
margin.
The tabbing macros `\settabs` and `\+` (from Plain \TeX/)
are not defined in \OpTeX/ because they are obsolete. But you can use the
\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021}
if you really need such feature.
The `\sec` macro is reserved for sections but original Plain \TeX/ declares this
control sequence for math secant\fnote{Use \code{$\\secant(x)$} to get $\secant(x)$.}.
\enddocument
\sec Dependencies
%%%%%%%%%%%%%%%%%
When `optex.fmt` is created then the following must be installed
\begitems
* The `\luatex` program.
* Latin moder font metrics
`ec-lmr10.tfm`, `ec-lmbx10.tfm`, `ec-lmri10.tfm`,
`ec-lmbxi10.tfm`, `ec-lmtt10.tfm` (for basic text font initializing).
* Computer rmodern font metrics
`cmr10.tfm`, `cmmi10.tfm`, `cmsy10.tfm`, `cmex10.tfm` (for basic math
initializing). If there are more Computer Modern fonts then they are read
too.
* The file `hyphen.tex` form plain \TeX.
\enditems
When `\fontfam` is used then the ability of Unicode fonts reading
is initialized using Lua scripts: `ltluatex.lua` (from \LaTeX/ package),
`luaotfload-main.lua` and more 20 similar `.lua` files (from `luaotfload`
package).
When a font family is needed using `\fontfam` then such font family must be
installed in the OTF format otherwise, the `\fontfam` command is ignored
(only warning about no-existent font family is printed).
When `\cslang`, `\delang` etc. commands are used in the document
then the hyphenation patterns of relevant languages must be installed.
Moreover the Lua script `luatex-hyphen.lua` (from `hyph-utf8` package)
and data file `language-dat.lua` (from `hyphen-base` package)
must be installed.
When `\usebib` command is used then `librarian.tex` file
(from the `librarian` macro package) must be installed.
When `\morecolors` command is used then `x11nam.def` file
(from the `xcolor` package) must be installed.
When `\lorem` command is used then `lipsum.ltd.tex` file
(from the `lipsum` package) must be installed.
|