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
|
%% This is part of 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 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 another languages (for example `Ahoj světe!`)
where Unicode fonts are needed
because of 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 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, 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 formats dimensions stays 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 review is done, the second line can be commented out.
\secc Concept of default page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\OpTeX/ uses \"output routine" for page design.
It is very similar to 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 to top insertions (floating tables and
figures) followed by a real text and followed by footnotes.
Typically, only real text is here.
The \^`\pgbackground` tokens list is empty by default but it can be used for
creating background of each page (colors, picture, watermark for example).
The macro \^`\draft` uses this register and puts big text DRAFT as 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
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> have to be `1` if only one such command is in the box.
Second \^`\fnotemark` inside the same box have 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\badselineskip{<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
how to register your own font family is appended in such 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 keeps their internal setting until group ends or until another
modifier which negates the previous feature is used. So
`{\caps \rm First text \it Second text}`
gives {\caps \rm First text \it Second text}.
\new
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 in respect to current values by default.
If you want to do it in respect to 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 size of the current font can be changed by the command
\^`\thefontsize[<font-size>]` or 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 following variant slelector
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; 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 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]
{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
the current text font family. This is 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). Moreover, there is the macro \^`\mathstyles{<math list>}` which depends on
the current math style. It is documented at the end of the
section~\ref[math-macros].
\sec Typical elements of 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 section have only one number and subsection two.
The implicit design of the titles of chapter etc.\ are 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 to more lines in the output. It is better to hint the
breakpoints because \TeX/ does not interpret the meaning of the title.
User can put the \^`\nl` (it means newline) macro 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 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 in 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
resets 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 actual selected language (see
section~\ref[lang] about languages).
If you wish to make the table or figure as 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 user 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 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 generated by \^`\ref` or \^`\pgref`,
* numbers of chapters, sections and subsections 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>. Others 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 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 \^`\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 PDF format provides {\em outlines} which are notes placed in the special frame of
the PDF viewer. These notes can be managed as structured and hyperlinked
table of contents of the document. The command \^`\outlines{<level>}` creates
such outlines from data used for 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 variant of the macro for outlines case which is
expandable. Use \~`\regmacro` in such case. See the section \ref[toc] for more information
about \~`\regmacro`.
The command \^`\insertoutline{<text>}` inserts next entry into PDF outlines at
the main level~0. These entries can be placed before table of contents (created
by \^`\outlines`) or after it. Theirs hyperlink destination is in the place
where the \^`\insertoutline` macro is used.
\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 are without vertical spaces
automatically. More information about design of lists of items should be
found in the section~\ref[lists].
\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 following result:
\medskip
\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 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 which 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 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
The <number> parameter of \^`\vspan` must be one-digit number.
If you want to set more digits then use braces.
You can use non-integer values too if you feel that the
result is better, for example \^`\vspan{2.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.
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
\^`\activettchar``<char>`. For example \code{\\activettchar`}
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 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.
User can change values of the `\parindent` and \^`\ttindent` independently.
The \^`\begtt` command starts internal group in which the catcodes are changed.
\new
Then the \^`\everytt` tokens register is run. It is empty by default and user can
control fine behavior by it. For example the catcodes can be re-declared here. If
you need to define 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 \^`\activettchar` or processed by the \~`\code`
command.
The \^`\everytt` is applied to all \^`\begtt...`\^`\endtt` environments (if it is not
decared 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 an `\activettchar` 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 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, second one 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 the \^`\verbinput` before
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 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 it uses two characters at the front
of the lines as a comment lines,
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 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 the 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 outlines
\endtt
\secc Making the index
%%%%%%%%%%%%%%%%%%%%%
The index can be included into document by the \^`\makeindex` macro. No external
program is needed, the alphabetical sorting are 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 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 \^`\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 have 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 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 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 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. Default index type is empty, which
prints page numbers in normal font. The \TeX/book index is 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 another 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 complex index entry. Use
\"pure equivalent" in the \~`\ii` parameter and map this equivalent to the
real word which is printed in the index by the \^`\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 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
\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 old program which 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
\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite),
\usebib/s (<style>) <bib-base> % sorted by style (s=style).
% example:
\usebib/s (simple) op-example
\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.
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 only tells that mentioned bib-record should be printed in the
reference list. If \^`\nocite[*]` is used then all records from <bib-base>
are printed.
\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.
There is 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 good idea. You can overcome this
problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only 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 specially 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 substractive 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 \^`\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 powerfull 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/ in order 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 a 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 \"programm" such pictures then Tikz package is recommended.
It works in Plain \TeX.
\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 have to be the same from \TeX{}'s point of
view as from 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 calls 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 transfomed 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 to a box with relevant dimension. The <transfromation> parameter
includes one or more transfromation 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 current point of typesetting and does'n not change the
position of the current point. Assume 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>}` puts the `<image>` 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 given.
\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 another 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 another 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 the section~\ref[langphrases].
The \~`\makeindex` command needs to know the sorting rules used in your language.
\OpTeX/ defines only 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 `languages.opm` file.
The `\"` is used for quotes visualy more similar to the `"` character which
can be primary quotes or secondary quotes depending on the language rules.
May be you want to alternate 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 document 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 next pages
are numbered (from number~2). Footnotes are numbered from one in whole
document. The macro `\author <authors><end-line>` can be used when
\^`\report` is declared. It prints `<authors>` in italics at 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 to use any special mark at the end of lines: end
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 most wide line used in it. So, you can use
`\hfill\address...` in order to put the address box to the right side of the
document. Or you can use `<prefixed text>\address...` to put
`<prefixed text>` before 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 an
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 to specify 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>`, 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.
\secc Lorem ipsum dolor sit
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\new
A designer needs to concentrate to the design of the output and maybe he/she
needs a 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 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 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
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
%%%%%%%%%%%%
\begtt \typosize[9/11]\adef!{\string\endtt}\adef&{\kern.25em}
\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 list of the items
\enditems % end of list of the items
\begtt % start verbatim text
! % end verbatim text
\activettchar 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 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 basic set of such Plain
\TeX/ control sequences (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 in 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 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 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 typographical area is not at top left 1\,in 1\,in coordinates
but at top left paper corner exactly. For example, `\hoffset` includes directly left
margin.
The `\sec` macro is reserved to sections but original Plain \TeX/ declares this
control sequence for math secans.
\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.
|