summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pm-isomath/pm-isomath.dtx
blob: e72d09d24ba20a2413a4a42b462cc079410a8168 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
% \iffalse meta-comment
%<*internal>
\begingroup
\input docstrip.tex
\keepsilent


\preamble
  ______________________________________________________
  The PM-ISOmath bundle 
  Copyright (C) 2017-2020 Claudio Beccari 
  All rights reserved

  License information appended

\endpreamble
\postamble


Distributable under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt

This work is "maintained"

This work consists of this file pm-isomath.dtx, a README.txt file
 and the derived files: 
    pm-isomath.sty, pm-isomath.pdf.
 
\endpostamble

\askforoverwritefalse

\generate{\file{pm-isomath.sty}{\from{pm-isomath.dtx}{style}}
          \file{README.txt}{\from{pm-isomath.dtx}{txt}}
         }

\def\tmpa{plain}
\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
\endgroup
%</internal>
%
% Copyright 2017-2020 Claudio Beccari
%
% This file is part of the PM-ISOmath bundle
% -------------------------------------------
%
%
% \fi
%
% \iffalse
%^^A The following trick uses the same date for every file header.
%<style>\NeedsTeXFormat{LaTeX2e}[2017/01/01]
%<*driver>
\ProvidesFile{pm-isomath.dtx}[%
%</driver>
%<style>\ProvidesPackage{pm-isomath}[%
%<txt>\ProvidesFile{README.txt}[%
%<*driver,style>
2020/04/18 v.1.0.05 
%<txt>Readme file for pm-isomath.sty]
%<style>Poor man package for typesetting ISO compliant math when using pdfLaTeX]
%</driver,style>
%<*driver>
]
%</driver>
%<*driver>
\documentclass{ltxdoc}
\GetFileInfo{pm-isomath.dtx}
\title{\texttt{PM-ISOmath}\\The Poor Man ISO math bundle}
\date{\fileversion\space--- \filedate}
\author{Claudio Beccari\thanks{E-mail: \texttt{claudio dot beccari at gmail dot com}}}
 
\usepackage{metalogo,multicol,enumitem,url,booktabs}
\usepackage[utf8]{inputenc}
\usepackage[LGR,T1]{fontenc}
\usepackage{lmodern}
\usepackage{pm-isomath}
\let\originalmeta\meta
\renewcommand\meta[1]{{\normalfont\originalmeta{#1}}}
\def\prog#1{\textsf{#1}}
\def\pack#1{\textsf{\slshape#1}}
\def\env#1{\textit{#1}}\let\amb\env
\def\file#1{\texttt{#1}}
\def\marg#1{{\normalfont\texttt{\{}\meta{#1}\texttt{\}}}}
\def\Marg#1{{\texttt{\{#1\}}}}
\def\opz#1{{normalfont\textsl{#1}}}
\def\oarg#1{{\normalfont\texttt{[\meta{#1}]}}}
\def\Oarg#1{{\normalfont\texttt{[#1]}}}
\def\parg#1{{\normalfont\texttt{(\meta{#1})}}}
\def\Parg#1{{\normalfont\texttt{(#1)}}}
\providecommand\pdfLaTeX{pdf\/\LaTeX}
\providecommand\pdfTeX{pdf\/\TeX}
\newenvironment{ttsintassi}{\flushleft\ttfamily\obeylines}{\endflushleft}
\begin{document}\errorcontextlines=9
\maketitle
\begin{multicols}{2}
\tableofcontents
\end{multicols}
 \setlength\hfuzz{20pt}
 \DocInput{pm-isomath.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{436}%
% \begin{abstract}
% The ISO regulations for typesetting math in the field of physics
% and technology are pretty stringent and imply legal questions
% that we do not treat here; it suffices to say that in certain
% countries an ``Expertise'' for a Legal Court that does not
% fulfil such regulations may be rejected by the Court,
% independently from its expert contents.
%
% Authors may not like them, but in the filed of \emph{applied
% sciences}, or better, of \emph{experimental sciences} that
% use measured quantities and units of measure, they are compulsory.
%
% With \LuaLaTeX\ and \XeLaTeX, while using OpenType math fonts
% there should not be any difficulty in fulfilling the regulations,
% but with \pdfLaTeX; things are not so simple. There exist some
% facilities, but sometimes they do not work.
%
% This package provides some robust work-arounds to bypass the
% difficulties experienced by some \pdfLaTeX\ users.
% \end{abstract}

% \section{Introduction}
% The ISO regulations (formerly ISO\,31/XI, now ISO\,80000) are
% stringent rules to typeset mathematics in the domains of physics
% and applied sciences; their title explicitly mentions “physics
% and technology”, but their careful reading lets understand that
% they apply to all sciences that use the “mathematics of
% quantities”. Such entities form a special group or space,
% where the elements are couples of two ordered entities $(x, y)$,
% where $y$ represents the unit of measure and $x$ represents the
% ratio of the quantity to the unit of measure. Such paired
% entities may not be separated, therefore some special
% mathematical rules are established in order to operate on
% quantities.
%
% Add to these special mathematical bases the fact that the
% measure component of the quantity is pretty fuzzy and it
% is always accompanied by a certain degree of uncertainty;
% metrologists are the masters in measuring quantities
% and handling their measures and uncertainties, but although
% for simplicity measures are handled by lay people as rational
% numbers (after all aren't they the ratio of something to be
% measured and the unit of measure?) we are facing the domain
% of fuzzy sets.
%
% Furthermore quantities are so many that any work in applied
% sciences should contain a nomenclature list in order to
% explain which symbol is used for which quantity. This is
% where the ISO regulations set some order and establish
% a long list of named quantities with their preferred symbols
% and their “normal” units according to the prescriptions
% of the Comité International des Pois et Mésures, that
% established the International System of measures 
% (Systhème International, SI).
% 
% This ISO nomenclature is used uniformly by most, if not all,
% people involved in applied sciences; therefore among the few
% letters of the Latin and Greek alphabets almost none is free
% to be used for other purposes.
%
% This means that the usual math italic alphabet can be used for
% very few symbols if confusion is to be avoided. Other series
% and shapes must be judiciously used and the ISO regulations
% say how.
%
% There are no problems when typesetting applied science
% documents with \LuaLaTeX\ or \XeLaTeX, at least if the
% proper OpenType math fonts are used; such fonts have
% available so many slots (code points) that may contain
% any variation of any glyph; it suffices to specify the
% option |math style = ISO| to the math handling package
% |unicode-math| and to select an OpenType math font. The
% only problem, if any, is to know which font series and
% shapes should be used according to the ISO regulations.
%
% These regulations can be purchased from the ISO site in
% Switzerland; they are quite expensive and the cost is
% affordable by associated professional studios or large
% academic and/or research institutions.
%
% For private users I'd suggest to download the PDF document
% \url{https://www.nist.gov/pml/special-publication-811-extended-
%contents}. This document has been produced by the National
% Institute for Science and Technology, the Institution that
% several years ago was appointed to replace the United States
% National Bureau of Standards. Their staff is made essentially
% by metrologists and this guide is written to give precise
% instructions for handling the applied science mathematics
% according to the ISO regulations; it establishes also several
% rules for writing text about mathematics and metrology. It
% is extremely valuable for anglophones, but, with the due
% differences concerning the mother languages, it is extremely
% useful also for people using languages different from English.
%
% \section{The \pdfLaTeX\ handicaps}
% Users of \pdfLaTeX, on the opposite are in trouble. In facts
% this typesetting program suffers from an inherited limitation:
% math fonts are encoded with the old 128 glyph encodings; this
% is not a limitation set forth by the underlying interpreter
% \pdfTeX. Matter of fact there exists the quite recent
% LibertinusT1math fonts for \pdfLaTeX, created by Michael Sharpe,
% that, to my best knowledge, are the only math fonts with 256 glyph
% encodings. Package |libertinust1math| accepts the |ISO| option
% that allows to fulfil the ISO regulations; it accepts other
% options; depending on which options are specified the number
% of math groups, beyond the essential first four ones, increases
% by three to six units, reaching a maximum of ten; there remains
% enough free math groups to satisfy most user requirements.
%
% But even while using such LibertinusT1math fonts, \pdfTeX\ 
% suffers from another handicap derived from the knuthian
% original \TeX-the-program and by the NFSS (New Font Selection
% Scheme, which is not new any more, because it dates back to
% 1994, when \LaTeX\,209 became obsolete and was substituted
% by \LaTeXe.). I am not complaining about these \pdfTeX\ and
% \LaTeX\ limitations; for decades people have been happily
% typesetting math with results that are much superior to any
% other typesetting program at least when the latter does not
% use some \TeX\ software.
%
% The handicap I am talking about is the way math alphabets, at
% the moment, are handled by \pdfTeX\ and \LaTeX; such alphabets
% are loaded in the form of math groups, the number of which
% cannot exceed 16 (numbered from 0 to 15); each group loads
% three sizes for normal math style, for script style and for
% script-script style. Taking into account the bold version, the
% number of math groups would risk to exceed its capabilities;
% in order to avoid exceeding the number limit on the math
% groups usable in any math environment, only the
% medium \emph{or} the bold series is loaded and the math version
% (bold or unbold) must be chosen before entering the math
% environment. Packages that allow mixed series math formulas
% load both versions and become very critical for using other
% math alphabets.
%
% By default four groups are always loaded; group~0 for
% operators; group~1 for letters; group~2 for symbols;
% group~3 for large operators and delimiters; users very
% often load also the two symbol-fonts provided by the
% American Mathematical Society, and this means two more
% math groups. Apparently there are ten more groups for
% other math groups. It seems that this number is abundantly
% sufficient to handle any situation, but it is not so. The
% author of this extension already reached the limit of~16
% without doing anything special -- at least he thought so,
% but he was evidently wrong. Users who use packages such
% as the Fourier or the KPfonts have to pay special attention
% to the package documentation because they might specify
% options that imply loading up to 14 math groups.
%
% Several authors provided packages to help users produce
% perfect documents that fulfil the ISO regulations; I would
% like to cite the excellent Package |ISOmath| by Günter Milde,
% entitled “Mathematical style for science and  technology”.
% It should be the perfect package to use in order to fulfil
% the ISO regulations; sometimes it succeeds with excellent
% results, but more often than not the results are just partial,
% because of the limitations of the math fonts available to
% \pdfLaTeX\ that are in contrast with the requirements of
% the ISO regulations.
%
% Therefore, dear reader, before using the poor man solutions
% of this package, try |ISOmath|, if your font set passes all
% the requirements described in that package documentation,
% you don't need the poor man patches offered by this package.
%
% \section{ISO rules summary}
% This summary does not replace the original ISO document nor
% what is written in the instructions published by NIST. It
% simply recalls those rules that this package tries to implement.
% In what follows, the word ``quantity'' is used to represent
% any physical entity that may be measured according to the
% metrological practice; the word ``variable'' is used to
% represent a mathematical entity that represents variable data.
%\begin{enumerate}[noitemsep]
% \item 
%   All quantity and variable symbols are represented by one
%   letter (with as many appositions are needed); but no acronyms
%   are allowed; in computer science programming many strings 
%   are called variables, in the sense that they may represent 
%   variable data; but computer programs are not mathematics, 
%   rather they are a special language that tells the computer 
%   what to do, even mathematics, but the language is not the 
%   one that represents math. Unfortunately some acronyms have 
%   gained strong popularity and wide usage, but they are 
%   forbidden by the ISO rules; example: \emph{CMRR} is often 
%   used to mean ``common mode rejection ratio'', but this is 
%   an improper usage of mathematics. Obviously this rule 
%   must be applied by the user, because \LaTeX\ is a 
%   typesetting language and does not understand the real 
%   meaning of what it typesets.
% \item
%   All quantity symbols must be set in italics, slanted type
%   is allowed, but serifed italics should be preferred unless 
%   the ISO rules prescribe a sans serif font. This implies that
%   the differential symbol be in upright font to avoid confusion
%   with the physical quantity $d$; the Napier number ‘e’ must be
%   set in upright font to avoid confusion with the elementary
%   electric charge $e$; the imaginary unit j in electrical
%   engineering, (i in other applied sciences) must be set  in 
%   upright font in order to avoid confusion with the electric
%   current density $j$ or the electric current $i$; more
%   difficult: the transcendental number $\ISOpi=3.14159\dots$
%   should be distinguished from the plane angle $\pi$; and similar
%   other numerical constants represented by Latin or Greek letters.
% \item
%   All symbols that do not represent quantities should be 
%   typeset in an upright font, preferably a serifed font, 
%   except when the ISO rules require a sans serif font.
%   This rule includes numbers and their digits, symbols that 
%   represent constant numeric values, all appositions both 
%   in subscript and superscript position. Appositions are not 
%   quantities or variables: for example in $V_i$, the 
%   subscript $i$ is a variable because it represents the $i$-th 
%   element in a sequence, such as $V_0, V_1, V_2, \dots$; on 
%   the opposite $V_{\mathrm{i}}$ the subscript is an apposition
%   because `i' means, say, ‘input’.
% \item
%   Upright bold roman or black board bold symbols represent sets.
% \item
%   Italic bold symbols represent matrices; one column matrices
%   may represent vectors in an algebraic way and should be 
%   treated as any other matrix; in general multirow and multicolumn 
%   matrices are typeset with uppercase letters, while lowercase 
%   ones are reserved for vectors; but in some sciences also vectors 
%   may have uppercase letters. Geometrical vectors that might be 
%   typeset with a medium series upper o lowercase italic letter 
%   with an arrow on top of it are not treated by the ISO 
%   regulations that speak of vectors irrespective if they are 
%   considered as one column matrices or oriented segments; 
%   apparently oriented segments should be treated the same as 
%   one column matrices.
% \item
%   Labels to geometrical entities, such as points, segments,
%   angles (not their measures) should be set in upright 
%   medium series sans serif fonts; the same rule applies 
%   to labels used in sketches and drawings representing 
%   machinery, electric circuitry, and the like when the label 
%   refers to an object and not to its measure: ``the lens 
%   $\mathsf{L}_1$'', ``the switch $\mathsf{S}_2$'', ``the 
%   planetary gear $\mathsf{G}_3$'', and so on.
% \item
%   Tensors should be set in slanted bold sans serif font.
% \item 
%   The above rules apply to both Latin and Greek 
%   letters.\label{enum:latin-greek}
%\end{enumerate}
%
% Such font rules  for families, series and shapes are difficult
% to implement with \pdfLaTeX\ for many reasons that do not imply
% only the limited number of math groups, but also the categories
% of symbols; Greek letters in particular are troublesome for a
% couple of reasons connected with rule~\ref{enum:latin-greek}:
%\begin{itemize}[noitemsep]
%\item
%   Uppercase greek letters are taken from the ``operators'' 
%   alphabet and are letter symbols; they are upright; 
%   but if they represent quantities they must be in italics, 
%   or at least slanted;
%\item
%   Lowercase Greek letters are taken from the ``letters'' math alphabet
%   and are ordinary symbols; they are oblique, and this is fine, 
%   but as ordinary math symbols they cannot be modified by commands 
%   such as |\mathrm|; furthermore upright lowercase Greek letters
%   are not available, at least not directly.
%\end{itemize}
%
% \section{Some existing solutions}
% Several packages to be used with \pdfLaTeX\ allow for upright
% Greek letters, especially those packages for French typography,
% where the national rules (in contrast with the ISO regulations)
% require that all math entities typeset with Greek letters be
% upright. Among such packages therenare |fourier| and  |kpfonts|. Other
% packages such as |newpxmath| and |newtxmath| are intended for
% general use, but with suitable options and extra math groups
% let the user employ upright lowercase Greek letters as well as
% oblique uppercase ones.
%
% Package |libertinust1math| allows the use of the 256~glyph
% encoded fonts and are less sensitive to the limit of 16~math
% groups. Its many options allow to use the various font styles
% without requiring the |\boldmath| declaration; this implies
% that medium and bold series are both preloaded without
% actually using extra math alphabets beyond the small number
% it uses for its full functionality. An option |ISO| is
% already available to fulfil the ISO regulations. Maybe
% the only drawback of the fonts used is that they are intended to 
% match  the Libertinus text fonts that are blacker than the
% standard Computer or Latin Modern ones. The auxiliary font
% selection commands used in the |ISOmath| package are already
% implemented with this |libertinust1math| one.
%
% Of course the |ISOmath| package might solve all problems if the
% user math environment has the necessary functionalities, in
% particular all the math alphabets needed for the task and if
% there are no difficulties with the number of math groups.
%
% \section{The poor man solution}
% The poor man solution is  very simple in theory; it handles
% text fonts in math expressions through the |\text| command
% provided by the |amsmath| package; of course there are functionalities
% to chose families series and shapes in a comfortable way
% by means of the powerful command definition commands provided
% by the |xparse| package; for Greek letters it uses the
% functionalities of the |alphabeta| package, that allows to use
% in text mode the same control sequences that are used
% in math mode. The default families for Latin and Greek letters
% are the Latin Modern ones that allow a piecewise continuous
% scaling of any available particular font of the collection.
%
% It goes without saying that this poor man solution has advantages and
% disadvantages over the other indicated solutions.
%
% The main advantage is that no math groups are involved,
% therefore the user may couple any font family with any
% series and shape that family allows; the default
% family for Greek fonts are the Latin Modern compliant
% LGR encoded collection of CBfonts; they are always
% available with any up to date and complete \TeX\ system
% installation.
%
% This is also a disadvantage, in the sense that Latin Modern
% fonts might not be the best ones to use with any specific
% text font; for example they have an x-height smaller than
% the Palatino ones, and a larger `em' unit compared to the
% Times ones; they have also a slightly lighter `color'
% than most other fonts.
%
% Nevertheless they work very well with the ISO regulations
% and in spite of the disadvantages listed above, they are
% usable without problems. This very documentation is typeset
% with Latin Modern fonts. The examples shown in a following
% section show the ease with which the ISO regulations may be
% fulfilled.
%
% There are other Greek fonts that may be used in place of
% those of the CBfonts collection, especially those distributed
% by the Greek Font Society (GFS) that are already part of the
% \TeX\ system distribution; they are LGR encoded and have their
% specific |.fd| files. They are not so rich in series and shapes
% (some of them may lack the bold extended series and sometimes
% lack also the bold series); I would say the the GFS Bodoni
% family is sufficiently rich of series and shapes, and may be used
% also for the Latin fonts. 
%
% There are also the Greek fonts that are ``companions'' to the
% Times fonts. So the user is not limited to the Latin Modern
% fonts, but admittedly there is not a great choice and, if it
% is necessary, the disadvantage of an unmatching Greek font is
% the price to pay if the user has to use \pdfLaTeX.
%
% \section{Usage}
% The usage of the package is very simple; in your preamble 
% add the line
%\begin{ttsintassi}
%\cs{usepackage}\Oarg{engineer}\Marg{pm-isomath}
%\end{ttsintassi}
% The |engineer| option is used to set the imaginary unit the
% way electrical engineers usually do.
%
% The main macros that support the whole package, and that may
% be used also by the end user, are:
%\begin{ttsintassi}
%\cs{MathLatin}\marg{letter}\marg{family}\oarg{series}\parg{shape}
%\end{ttsintassi}
%and
%\begin{ttsintassi}
%\cs{MathGreek}\marg{letter}\marg{family}\oarg{series}\parg{shape}
%\end{ttsintassi}
% where \cs{MathLatin} sets the text encoding to |T1|, while
% \cs{MathGreek} sets it to |LGR|. In both commands the arguments
% specified with \marg{family}\oarg{series}\parg{shape} are all
% optional, including the first one in spite of being surrounded
% by curly braces. In both cases the default values for each
% argument are respectively |lmr|, |m|, and |n| (normal, upright).
%
% Such default values, after loading |pm-isomath|, may be globally
% redefined by using in the preamble:
%\begin{ttsintassi}
%\cs{renewcommand}\Marg{ISOfam}\marg{family}
%\cs{renewcommand}\Marg{ISOser}\marg{series}
%\cs{renewcommand}\Marg{ISOsha}\marg{shape}
%\end{ttsintassi}
% We discourage this global redefinitions unless the user really
% knows what s/he is doing; in practice it must be checked  that
% T1 encoded families and LGR encoded ones have the same family
% names. If the encoding+family|.fd| files are not available
% either they have to be created, or  such default values should
% not be redefined.
% 
% For Latin letters to use in the |\MathLatin| command mandatory
% argument there are no problems.
%
% For Greek letters you might use |\MathGreek| and the math letter
% commands |\alpha|, |\beta|,\dots, |\Omega| commands, but it is
% much simpler to avoid|\MathGreek| and
% use the package commands |\ISOalpha|, |\ISObeta|,\dots,
% |\ISOOmega|. All these commands follow the syntax:
%\begin{ttsintassi}
%\cs{ISO}\meta{lettername}\marg{family}\oarg{series}\parg{shape}
%\end{ttsintassi}
% where all the arguments are optional, including the first in
% spite of being surrounded by curly braces. Such optional
% arguments must follow that order but all possible combinations
% are usable, for example:
%\begin{ttsintassi}
%\cs{ISOalpha}
%\cs{ISOalpha}\marg{family}
%\cs{ISOalpha}\oarg{series}
%\cs{ISOalpha}\parg{shape}
%\cs{ISOalpha}\marg{family}\oarg{series}
%\cs{ISOalpha}\marg{family}\parg{shape}
%\cs{ISOalpha}\oarg{series}\parg{shape}
%\cs{ISOalpha}\marg{family}\oarg{series}\parg{shape}
%\end{ttsintassi}
% This offers the maximum flexibility in using the necessary
% commands.
%
% The package defines other macros for fulfilling the rules
% relative to the differential symbol and the numerical constants
% represented with letters; furthermore it defines the commands
% for the |\ohm| unit of measure and the |\micro| SI prefix;
% this latter macro uses a special shape of the CBfonts where
% an upright shape with serifed lowercase Greek letters is
% available; if another family lacking this shape is being used,
% then the normal upright shape is used. In typesetting this
% documentation, evidently there are no problems, but with other
% font selections, especially with Greek fonts, there might be
% some mismatching shapes.
% 
% Commands similar to those defined by the |ISOmath| package
% are also defined so as to simplify the font selection for
% vectors, matrices and tensors.
%
% \section{Examples}
% \subparagraph{ISO Greek letters}
% In example  represented in table~\ref{tab:isoletters} we typeset
% an array in math mode, where we show all the Greek letters that
% can be typeset with the \cs{ISO}\meta{lettername} macros; the
% array is typeset in normal math style, but the ISO letters are
% in bold style so that there is no confusion with a normal
% bold math setting; some letters, equal to the Latin ones, are
% also defined because some users have experienced difficulties
% in remembering the correct signs especially while labelling
% diagrams. The array in table~\ref{tab:isoletters} may be a
% useful reference.
%\begin{table}[!tb]
%\def\T#1{\cs{ISO#1} & \csuse{ISO#1}[bx]}
%\[\begin{array}{lclclclc}
%\T{alpha}   & \T{beta}     &
%\T{gamma}   & \T{delta}    \\ 
%\T{epsilon} & \T{zeta}    &
%\T{eta}     & \T{theta}    \\ 
%\T{iota}    & \T{kappa}    & 
%\T{lambda}  & \T{mu}      \\ 
%\T{nu}      & \T{xi}      &
%\T{omicron} & \T{pi}      \\ 
%\T{rho}     & \T{sigma}    & 
%\T{tau}     & \T{upsilon}    \\ 
%\T{phi}     & \T{chi}      &
%\T{psi}     & \T{omega}      \\ 
%\T{Gamma}   & \T{Delta}    & 
%\T{Eta}     & \T{Theta}     \\ 
%\T{Lambda}  & \T{Xi}      & 
%\T{Pi}      & \T{Rho}      \\ 
%\T{Sigma}   & \T{Upsilon} & 
%\T{Phi}     & \T{Chi}      \\
%&&\T{Psi}   & \T{Omega}
%\end{array}\]
%\caption{The \cs{ISO}\meta{letter} macros and their rendering in bold  style}
%\label{tab:isoletters}
%\end{table}
% \subparagraph{A small matrix equation}
%\[ \vectorsymbol{b} = \matrixsymbol{M}\vectorsymbol{a} \] is
% typeset with the following code
%\begin{verbatim}
%\[ \vectorsymbol{b} = \matrixsymbol{M}\vectorsymbol{a} \]
%\end{verbatim}
% \subparagraph{A resistivity value}
% The resistivity of copper is $1.68\,\micro\ohm\,\mathrm{cm}$ (in text mode: 1.68\unit{\micro\ohm\,cm})
% is typeset with the following code
%\begin{verbatim}
%$i.68\,\micro\ohm\,\mathrm{cm}$ (in text mode: 1.68\unit{\micro\ohm\,cm})
%\end{verbatim}
%\subparagraph{A tensor}
%\[ \vectorsymbol{D} =\epsilon_0\tensorsymbol{\epsilon}\ped{r}\vectorsymbol{E}\]
%is typeset with the following code
%\begin{verbatim}
%\[ 
%\vectorsymbol{D} = \epsilon_0\tensorsymbol{\epsilon}\ped{r}\vectorsymbol{E}
%\]
%\end{verbatim}
%\subparagraph{Solid angle}
% An energy flux of light form a isomorphic source that irradiates
% the power $P$ through the solid angle $\Omega$ generates
% a flux \[\Phi = \frac{P}{\Omega}\] is typeset with the following
% code
%\begin{verbatim}
%\[\Phi = \frac{P}{\Omega}\]
%\end{verbatim}
% where, as you see the uppercase Greek letters are slanted,
% as the ISO rules require, instead of upright, as \LaTeX\ sets
% them by default.
% \subparagraph{A bold formula}
% This is the very important inverse Laplace transform\footnote{Some
% packages may have a control sequence to insert a Cauchy principal
% value integral sign into a math expression; here we fake it by
% means of the superposition of a normal integral sign to a minus sign.}
%{\boldmath\[
%f(t) = \frac{1}{2\ISOpi\iu} -\mkern-19mu\int_{\sigma-\iu\infty}^{\sigma+\iu\infty}\eu^{pt}\diff p \qquad \text{for } \sigma > \sigma\ped{c}
%\]}
% typeset with the following code
%\begin{verbatim}
%{\boldmath\[
%f(t) = \frac{1}{2\ISOpi\iu} -\mkern-19mu
%   \int_{\sigma-\iu\infty}^{\sigma+\iu\infty}\eu^{pt}\diff p 
%     \qquad \text{for } \sigma > \sigma\ped{c}
%\]}
%\end{verbatim}
% Notice the the use of |\boldmath| does not imply the use
% of new math groups; but the bold upright $\ISOpi$ is rendered
% without any problem.
% \subparagraph{Various styles of Greek fonts} Here are some
% examples of Greek fonts in various styles;  within the same
% table bold and medium series fonts stay side by side, as well
% as glyphs coming from different families.\medskip
%
%\bgroup\begin{lrbox}{0}
%\begin{tabular}{@{}ll@{}}
%\cs{ISOgamma}, \cs{ISOzeta}, \cs{ISOeta}, \cs{ISOOmega}&
%$\ISOgamma, \ISOzeta, \ISOeta, \ISOOmega$\\
%\cs{ISOgamma}[bx], \cs{ISOzeta}[bx], \cs{ISOeta}[bx], \cs{ISOOmega}[bx]&
%$\ISOgamma[bx], \ISOzeta[bx], \ISOeta[bx], \ISOOmega[bx]$\\
%\cs{ISOgamma}\{lmss\}, \cs{ISOzeta}\{lmss\}, \cs{ISOeta}\{lmss\}, \cs{ISOOmega}\{lmss\}&
%$\ISOgamma{lmss}, \ISOzeta{lmss}, \ISOeta{lmss}, \ISOOmega{lmss}$\\
%\cs{ISOgamma}\{artemisia\}, \cs{ISOzeta}\{artemisia\}, \cs{ISOeta}\{artemisia\}, \cs{ISOOmega}\{artemisia\}&
%$\ISOgamma{artemisia}, \ISOzeta{artemisia}, \ISOeta{artemisia}, \ISOOmega{artemisia}$\\
%\cs{ISOgamma}(rs), \cs{ISOzeta}(rs), \cs{ISOeta}(rs), \cs{ISOOmega}(rs)&
%$\ISOgamma(rs), \ISOzeta(rs), \ISOeta(rs), \ISOOmega(rs)$\\
%\end{tabular}\end{lrbox}
%\noindent\resizebox{\textwidth}{!}{\usebox{0}}\egroup
%
%\section{Final remarks}
% This package |pm-isomath| is far from perfect, and its results are
% questionable; of course poor man solutions are just patches;
% incomplete solutions; but the results are not so bad. It has
% the indubitable advantage that is does not use any math groups,
% therefore there is no risk to exceed the limit of 16~math groups.
%
% \StopEventually{}
%
% \section{The code}
% This package was loosely inspired by the |ISOmath| package
% by Günter Milde, but tackles the problem of insufficient maximum
% number of math font groups so as to avoid any problem with such
% group limitation, and therefore all the caveats in Milde's package.
% That package is much more comfortable to use than this one; but
% it is subject to a number of conditions that, depending on the
% user environment, may even result in a complete failure. This
% package avoids problems with math font groups because it does
% not use any, but it is not so comfortable to use because often
% the user has to specify optional settings.
%
% The preliminary lines have been already defined; therefore we
% start with real code.
%
% The trick of this package is that all fonts different from the
% four or six ones (including the AMS symbol fonts) are textual fonts
% used in math typesetting through the intermediate action of
% the |\text| command defined by the |amsmath| package.
% Therefore we start by verifying if packages |amsmath|,
% |alphabeta| and |xparse| have already been loaded in the document
% preamble; this implies a weak loading order, that is this
% package must be loaded after all the above packages are loaded;
% in facts if such packages are not loaded, they get loaded by this
% one, but without any option. The package
% loading mechanism assures avoiding conflicts if packages are
% loaded without options; this is why if one of the three packages
% is loaded after this one but with some option specified, an
% “Option clash” error flag is raised; this is where the
% “weak” loading error becomes a very “strong” one.
 
%\iffalse
%<*style>
%\fi
%    \begin{macrocode}
% Then we verify if the document is being typeset with \pdfLaTeX;
% if it is not, an error flag is raised and reading of this
% package is immediately interrupted. For this purpose we need
% an engine-detecting package, and we generally use the |iftex| one.
\@ifpackageloaded{iftex}{}{\RequirePackage{iftex}}
\unless\ifPDFTeX
    \PackageError{pm-isomath}{%
       ******************************************\MessageBreak
       This package should be used only when     \MessageBreak
       typesetting with pdfLaTeX.                \MessageBreak
       Skipping loading the package              \MessageBreak
       ******************************************\MessageBreak
    }{%
       ******************************************\MessageBreak
       Press the X key and restart typesetting   \MessageBreak
       while using pdfLaTeX\MessageBreak
       ******************************************\MessageBreak
    }
\expandafeter\@firstoftwo
\else
    \PackageInfo{pm-isomath}{%
       ******************************************\MessageBreak
       Typesetting this document with pdfLaTeX!  \MessageBreak
       ******************************************\MessageBreak
    }
\expandafter\@secondoftwo
\fi
{\endinput}{\relax}
%    \end{macrocode}
% Actually this package accepts an option: |engineer|. This
% option is for deciding if the imaginary unit should be
% defined as ‘i’ or ‘j’. As we have remarked in the previous
% documentation, engineers, especially those who deal with
% electricity and electrical quantities, but also electronics, control
% and telecommunications engineers, use ‘j’; all these
% varieties of engineers could not do anything in their profession
% if they don't use complex numbers and quantities (the latter
% called phasors). Possibly they are the applied scientists
% who use complex numbers more than any other scientist.
% Note: this option has \emph{not} been used to prepare this
% very document.
%    \begin{macrocode}
\newif\ifengineer \engineerfalse
\DeclareOption{engineer}{\engineertrue}
\ProcessOptions*\relax
%    \end{macrocode}
% Are the necessary packages already loaded?
%    \begin{macrocode}
\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
\@ifpackageloaded{xparse}{}{\RequirePackage{xparse}}
%    \end{macrocode}
% Now we have almost all software instruments available. We
% define a macro to switch the definitions of certain math
% Greek symbols; some of these are defined in the \LaTeX\ 
% kernel: the lowercase Greek variant letters; some others
% are defined in the |amsmath| package: the uppercase slanted
% greek letters. All these variant letters have a name identical
% to the regular ones but prefixed with the string |var|;
% example |\epsilon| and |\varepsilon|, |\Omega| and |\varOmega|.
% We switch the control sequence definitions between the |var|-less
% ones and the |var|-prefixed ones. The first  group of lowercase
% letters is switched because the glyphs give a better match with
% those produced with the textual Greek glyphs obtained when
% the ISO macros are used.
%    \begin{macrocode}
\newcommand\switchvarsymbols[1]{%
\letcs{\tempA}{#1}\csletcs{#1}{var#1}\cslet{var#1}{\tempA}}
%%%% 
\switchvarsymbols{epsilon}
\switchvarsymbols{theta}
\switchvarsymbols{rho}
\switchvarsymbols{phi}
%%%%%
\switchvarsymbols{Gamma}
\switchvarsymbols{Delta}
\switchvarsymbols{Theta}
\switchvarsymbols{Lambda}
\switchvarsymbols{Xi}
\switchvarsymbols{Pi}
\switchvarsymbols{Sigma}
\switchvarsymbols{Upsilon}
\switchvarsymbols{Phi}
\switchvarsymbols{Psi}
\switchvarsymbols{Omega}
%    \end{macrocode}
% Eventually we load the |alphabeta| package; this package
% allows using the same macros used in math mode while
% typesetting in text mode. We find it very useful in this
% package.
%    \begin{macrocode}
\@ifpackageloaded{alphabeta}{}{\RequirePackage{alphabeta}}
%    \end{macrocode}
% The next line defines the default family, series and shape
% to be used in the macros that follow; as it can be seen
% the default family is the Latin Modern regular (or roman);
% the series is medium and the shape is normal (or upright).
% The codes used are the same used in the font description
% files with extension |.fd|. Their name is obtained by merging
% the encoding name with the family name; Therefore the default
% font description file for Latin characters is |t1lmr.fd|,
% while the one for Greek characters is |lgrlmr.fd|; these
% files define the series they contain and that are identified
% with codes such as |m| (medium); |bx| (bold extended);
% |b| (bold). Other fonts, with different series may have
% also other codes. For each series the |.fd| defines the
% codes for shapes, and for every valid combination of
% series, shape and size it defines the specific font file
% to use. 

% We should not care for the font names, but in order to use
% different font families, series, and shapes the user should
% know their codes. this is generally a difficult task, but
% not impossible; it “suffices” to open the packages that
% allow to use the desired fonts, read the code and find out
% the names of the |.fd| files; then search these files on the
% trees of the \TeX\ system, and eventually find out the
% codes for the available series and shapes.
% 
% For the Latin and Greek |.fd| files we have the series and
% shapes shown in table~\ref{tab:lmr-series-shapes}.
%
%\begin{table}[!tb]\centering
%\begin{tabular}{llllll}
%\toprule
%       &      & \multicolumn2c{Latin (T1)} 
%                      & \multicolumn2c{Greek (LGR)} \\
%\cmidrule(r){3-4} \cmidrule(l){5-6}
%Series & Code & Shape   & Code & Shape     & Code \\
%\midrule
%medium &  m   & normal          &  n   & normal        & n    \\
%       &      & italics         & it   & italics       & it   \\
%       &      & slanted         & sl   & slanted       & sl   \\
%       &      &                 &      & lipsian       & li   \\
%       &      &                 &      & serif         & rs   \\
%       &      &                 &      & serif oblique & ro   \\
%       &      & upright italics &  ui  & upright italics& ui  \\
%       &      & small caps      & sc   & small caps    & sc   \\
%\midrule
% bold  &   b  &                 &      & lipsian       & li   \\
%       &      & normal          & n    &               &      \\
%       &      & slanted         & sl   &               &      \\
%\midrule
% bold extended& bx & normal     & n    & normal        & n    \\
%       &      & italics         & it   & italics       & it   \\
%       &      & slanted         & sl   & slanted       & sl   \\
%       &      &                 &      & lipsian       & li   \\
%       &      &                 &      & serif         & rs   \\
%       &      &                 &      & serif oblique & rs   \\
%       &      &                 &      & upright italics & ui \\
%       &      &                 &      & small caps    & sc   \\
%\bottomrule
%\end{tabular}
%\caption{Seres and shapes available with the Latin Modern regular family with Latin and Greek fonts}
%\label{tab:lmr-series-shapes}
%\end{table}
%
%    \begin{macrocode}
\def\ISOfam{lmr}\def\ISOser{m}\def\ISOsha{n}
%    \end{macrocode}
%
% As explained in the initial documentation all font changing
% commands are constructed in such a way as to have a default
% family, series and shape common to both Latin and Greek fonts;
% therefore with three optional arguments that the user can
% specify with different delimiters but respecting their order,
% the user can get eight different choice combinations that
% allow the selection of a large number of different looks.
%
% We now define the main and service macros that allow
% such font selection; we have to create similar macros that
% mostly differ in the encoding choice for Latin or Greek letters.
%
% The user macros are defined by means of the defining commands
% provided by the |xparse| package, while the service macros use
% normal \LaTeX\ commands. The user commands follow this special
% syntax:
%\begin{ttsintassi}
%\cs{MathLatin}\marg{Latin letter}\marg{family}\oarg{series}\parg{shape}
%\cs{MathGreek}\marg{Greek letter}\marg{family}\oarg{series}\parg{shape}
%\end{ttsintassi}
% where in both cases the last three arguments are differently
% delimited optional values, even the first one of the three, in
% spite of being delimited by curly braces. In both cases the only
% mandatory argument is the Latin or Greek letter; the latter
% one may be specified by the macros |\alpha|, |\beta|,\dots,
% |\Omega|, the same ones that are normally used in math (although
% they are going to be used in textmode).
%    \begin{macrocode}
\NewDocumentCommand\MathLatin{m gO{m}D(){it}}{\bgroup
\edef\y{\IfNoValueTF{#2}{\ISOfam}{#2}}%
\edef\x{\noexpand\egroup\noexpand\MLatin{\noexpand#1}{\y}}\x{#3}{#4}}

\providecommand\MLatin[4]{\text{%
\def\ISOfam{#2}\def\ISOser{#3}\def\ISOsha{#4}%
\ifcsstring{math@version}{bold}{\def\ISOser{bx}}{}%
\usefont{T1}{\ISOfam}{\ISOser}{\ISOsha}#1}}

\NewDocumentCommand\MathGreek{ m g O{m} d()}{%
\edef\y{\IfNoValueTF{#2}{\ISOfam}{#2}}%
\edef\x{\IfNoValueTF{#4}{\ISOsha}{#4}}%
\MGreek{#1}{\y}{#3}{\x}}

\newcommand{\MGreek}[4]{\text{%
\def\ISOfam{#2}\def\ISOser{#3}\def\ISOsha{#4}%
\ifcsstring{math@version}{bold}{\def\ISOser{bx}}{}%
{\usefont{LGR}{\ISOfam}{\ISOser}{\ISOsha}#1}}}

%    \end{macrocode}
% We now define the macros for all lowercase Greek letters
% and several uppercase ones (even some that are identical
% to some Latin letters) that should save several keystrokes
% when entering such letters in the source file. The shorter
% the code to type in, the smaller the the number of potential typos.
%    \begin{macrocode}
\newcommand\ISOalpha{\MathGreek{\alpha}}
\newcommand\ISObeta{\MathGreek{\beta}}
\newcommand\ISOgamma{\MathGreek{\gamma}}
\newcommand\ISOdelta{\MathGreek{\delta}}
\newcommand\ISOepsilon{\MathGreek{\epsilon}}
\newcommand\ISOzeta{\MathGreek{\zeta}}
\newcommand\ISOeta{\MathGreek{\eta}}
\newcommand\ISOtheta{\MathGreek{\theta}}
\newcommand\ISOiota{\MathGreek{\iota}}
\newcommand\ISOkappa{\MathGreek{\kappa}}
\newcommand\ISOlambda{\MathGreek{\lambda}}
\newcommand\ISOmu{\MathGreek{\mu}}
\newcommand\ISOnu{\MathGreek{\nu}}
\newcommand\ISOxi{\MathGreek{\xi}}
\newcommand\ISOomicron{\MathGreek{\omicron}}
\newcommand\ISOpi{\MathGreek{\pi}}
\newcommand\ISOrho{\MathGreek{\rho}}
\newcommand\ISOsigma{\MathGreek{\sigma}}
\newcommand\ISOtau{\MathGreek{\tau}}
\newcommand\ISOupsilon{\MathGreek{\upsilon}}
\newcommand\ISOphi{\MathGreek{\phi}}
\newcommand\ISOchi{\MathGreek{\chi}}
\newcommand\ISOpsi{\MathGreek{\psi}}
\newcommand\ISOomega{\MathGreek{\omega}}
\newcommand\ISOGamma{\MathGreek{\Gamma}}
\newcommand\ISODelta{\MathGreek{\Delta}}
\newcommand\ISOEta{\MathGreek{\Eta}}
\newcommand\ISOTheta{\MathGreek{\Theta}}
\newcommand\ISOLambda{\MathGreek{\Lambda}}
\newcommand\ISOXi{\MathGreek{\Xi}}
\newcommand\ISOPi{\MathGreek{\Pi}}
\newcommand\ISORho{\MathGreek{\Rho}}
\newcommand\ISOSigma{\MathGreek{\Sigma}}
\newcommand\ISOUpsilon{\MathGreek{\Upsilon}}
\newcommand\ISOPhi{\MathGreek{\Phi}}
\newcommand\ISOChi{\MathGreek{\Chi}}
\newcommand\ISOPsi{\MathGreek{\Psi}}
\newcommand\ISOOmega{\MathGreek{\Omega}}
%    \end{macrocode}
% We redefine also the |\mathrm| and |\mathit| so that if they
% have to contain Greek letters the default shape is set equal
% to that of the enclosing command. Such macros are just those
% defined in the \LaTeX\ kernel where the |\ISOsha| redefinition
% is added.
%    \begin{macrocode}
\DeclareRobustCommand{\mathrm}%
{\relax\ifmmode\else\expandafter\non@alpherr
\csname mathrm \endcsname\fi
\def\ISOsha{n}\expandafter\use@mathgroup
\csname M@OT1\endcsname\symoperators}

\DeclareRobustCommand{\mathit}%
{\relax\ifmmode\expandafter\non@alpherr
\csname mathit \endcsname\fi
\def\ISOsha{it}\expandafter\use@mathgroup
\csname M@OT1\endcsname{9}}
%    \end{macrocode}
% Imitating the |ISOmath| package we define also the macros
% for selecting the bold italics (produces results similar
% to those obtained with package |bm|, but it does not require
% any math group), and sans serif in  both normal and bold
% slanted shape.
%    \begin{macrocode}
\AtBeginDocument{%
\providecommand\mathbfit[1]{\MathLatin{#1}{lmr}[bx](it)}
\providecommand\mathsfit[1]{\MathLatin{#1}{lmss}[m](sl)}
\providecommand\mathsfbfit[1]{\MathLatin{#1}{lmss}[bx](sl)}}
%    \end{macrocode}
% Package |ISOmath| defines macros for typesetting vectors,
% matrices and tensors; we do the same, but avoid the
% abbreviation |sym| in place of |symbol|.
%    \begin{macrocode}
\AtBeginDocument{%
\let\vectorsymbol\mathbfit
\let\matrixsymbol\mathbfit
\let\tensorsymbol\mathsfbfit}
%    \end{macrocode}
%
% We now define some macros for setting some elements in the
% proper fonts; the idea is the same as that for vectors,
% matrices and tensors, except that these macros produce
% directly the desired symbol without using arguments, if
% possible.
%
% The imaginary unit is subject to the state of the |engineer|
% switch, set with the proper option on calling the package.
% If such option has been specified in calling this package,
% the |\iu| command is let to |\junit|, otherwise it's let
% to |\iunit|. In spite of this option driven aliases, both
% commands |\iunit| and |\junit| are still available to the
% user.
%
% The Napier number ‘e’ is defined in roman type, but as an
% operator; this number is not an operator in the mathematical
% sense, but it is most often used as the base of an exponential;
% therefore such math “atom” must be treated as an
% operator as well as when the official operator macro |\exp|
% is used.
%
% The transcendental number $\ISOpi$, different from the plane
% angle $\pi$, is defined so as to be typeset in upright
% style; similar definitions may be used for other numerical
% constants; we define just |\uppi| because we think it is the
% most used symbol in any kind of mathematics. The
% $\ISOpi{lmss}(n)$ Greek letter in upright sans serif font
% may indicate the subatomic particle ``pion'' so that a
% similar macro, say, |\sspi| or, more expressively, |\pion|
% may be given a suitable definition.
%
% The differential symbol is not an operator, but it requires
% a special treatment; a macro |\diff| for the differential
% symbol uses an empty `operator' and a negative shift to typeset
% an upright letter `d'  with an operator spacing on its left,
% so that proper spacing is used in math typesetting; notice
% that the given definition does not perform as the direct
% use of a thin math space before the upright `d', because
% spacing between math atoms depends on their category, while
% the thin space |\,| is absolute and does not change depending
% on the preceding math atom.
%
% The command |\unit| for appending the units of measure to
% the numerical value of the measure is added if no packages
% have already defined it; package |siunitx| is a particularly
% recommended one. Similar considerations hold true for the
% |\ap| and |\ped| (apex and pedex, respectively; i.e\ 
% superscript and subscript); therefore such command definitions
% are deferred to the start of the document so as to be sure
% to avoid damaging other package settings. All these commands
% may be used in both text and math modes; therefore a robust
% macro |\textormath| is (re)defined even if often such command
% is already available; the |\DeclareRobustCommand| unconditionally
% declares and redeclares robust commands even if they are
% already defined; possibly an information line is written in
% the |.log| file in case a redefinition takes palace. These
% commands typeset their arguments in upright math fonts, but
% with the current font in text mode.
%
% The |\ohm| and |\micro| macros produce their symbols in
% upright style while in math mode, and with the current
% font and shape in text mode.
%
%    \begin{macrocode}
\newcommand\iunit{\MathLatin{i}(n)}
\newcommand\junit{\MathLatin{j}(n)}
\ifengineer
   \let\iu\junit
\else
   \let\iu\iunit
\fi
% i
\let\eu\undefined
\DeclareMathOperator\eu{\MathLatin{e}(n)}
\providecommand\uppi{}
\renewcommand\uppi{\ISOpi(n)}
% 
\providecommand*\diff{}
\renewcommand*\diff{\ensuremath{\mathop{}\!\MathLatin{d}(n)}}
% 
\providecommand*\micro{}
\renewcommand*\micro{%
\textormath{\ifcsdef{textmicro}{\textmicro}{\ISOmu(rs)}}{\ISOmu(rs)}}
% 
\providecommand*\ohm{}
\AtBeginDocument{\@ifpackageloaded{textcomp}{%
\renewcommand*\ohm{\textormath{{\textohm}}{\ISOOmega(n)}}}%
{\renewcommand*\ohm{\textormath{\ISOOmega(\f@shape)}{\ISOOmega(n)}}}}
% 
\global\csletcs{bbl@it@ped}{undefined}
\global\csletcs{bbl@it@ap}{undefined}
%
\DeclareRobustCommand\textormath{%
\unless\ifmmode\expandafter\@firstoftwo
\else\expandafter\@secondoftwo\fi}
%
\AfterEndPreamble{\let\ped\undefined\let\ap\undefined
\DeclareRobustCommand*\ped[1]{%
\textormath{\textsubscript{#1}}{_{\mathrm{#1}}}}%
%
\providecommand\ap{}
\DeclareRobustCommand\ap[1]{%
\textormath{\textsuperscript{#1}}{^{\mathrm{#1}}}}%
%
\unless\ifcsname unit\endcsname
\DeclareRobustCommand{\unit}[1]{\,\textormath{#1}{\mathrm{#1}}}
\fi}

\endinput
%    \end{macrocode}
%This is the end
%\begin{center}
%\LARGE HAPPY \TeX{}ing\,!
%\end{center}
%\iffalse
%</style>
%\fi
%\iffalse
%<*txt>
%\fi
%    \begin{macrocode}

 This bundle has the LPPL maintenance status "author-maintained".

 The list of all files belonging to the PM-ISOmath bundle is
  pm-isomath.dtx, a README.txt file
 with the derived files: pm-isomath.sty, pm-isomath.pdf.
 
 The set of derived (unpacked) files belonging to the distribution
 and covered by LPPL is created by the self unpacking file
 pm-isomath.dtx which is the principal part of the distribution.
 
 In the TDS composed of various branches they should be in the 
 following folders:
 .../tex/latex/pm-isomath/     contains pm-isomath.sty
 .../doc/latex/pm-isomath/     contains pm-isomath.pdf and README.txt
 .../source/latex/pm-isomath   contians pm-isomath.dtx
%    \end{macrocode}
%\iffalse
%</txt>
%\fi

%\Finale
% \endinput