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
|
% \iffalse meta-comment
%<*internal>
\begingroup
\input docstrip.tex
\keepsilent
\preamble
______________________________________________________
The PM-ISOmath bundle
Copyright (C) 2017-2021 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-2021 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}[2019/01/01]
%<*driver>
\ProvidesFile{pm-isomath.dtx}[%
%</driver>
%<style>\ProvidesPackage{pm-isomath}[%
%<txt>\ProvidesFile{README.txt}[%
%<*driver,style,txt>
2021/08/24 v.1.2.00
%<txt> README file for pm-isomath.sty]
%<style>Poor man package for typesetting ISO compliant math when using pdfLaTeX]
%</driver,style,txt>
%<*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,textcomp}
%\usepackage{libertinus,libertinust1math}
\usepackage{pm-isomath}
\usepackage{siunitx}
\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{511}
% \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 field 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 experimental sciences; their title explicitly mentions “physics
% and physical sciences”, but their careful reading lets us 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 laypeople handle measures as if hey were 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 Poids et Mesures, that
% established the International System of measures
% (Systè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 available
% 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 and 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 8-bit encoded fonts
% with 256 glyphs. Package |libertinust1math| accepts the |ISO| option
% that allows to fulfil the ISO regulations; it accepts other
% options; depending on which ones 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, that dates back to 1994, when \LaTeXe\ started its life.).
% 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.
%
% By now, the handicap I am talking about is the way math alphabets
% 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 evidently he was 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 \emph{quantity} is used to represent
% any physical entity that may be measured according to the
% metrological practice; the word \emph{variable} is used to
% represent a mathematical entity that may assume several values.
%\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 is being typeset.
% \item
% All quantity symbols must be set in italics; slanted roman 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. Subscripts require
% special attention: 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’ may mean, 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 be represented by uppercase letters. Geometrical vectors that
% might be typeset with a medium series upper or 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 there are |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 such fonts 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 described in this document 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.^^A VERIFICARE! -- PUÒ DARSI CHE NON FUNZIONI CON FAMIGLIE DIVERSE
%
% 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”
% compared to 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. Some problems, though, still remain, and require the
% user intervention.
%
% 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).
% Notice the codes: |lmr|, |m|, and |n| are the codes that appear in
% the |.fd| file to declare the possible family, series, and shape
% combinations available for a given family. Further
% information is given below in table~\ref{tab:lmr-series-shapes} on
% page~\pageref{tab:lmr-series-shapes}, and how to discover these codes.
%
% 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 one
% 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}\oarg{series}\parg{shape}
%\cs{ISOalpha}\marg{family}\oarg{series}
%\cs{ISOalpha}\marg{family}\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 the examples 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})^^A VERIFICARE PERCHÉ IL DUE MI SONO DIVERSI -- perché \ISOfam per il greco non funziona
% is typeset with the following code
%\begin{verbatim}
%$1.68\,\micro\ohm\,\mathrm{cm}$ (in text mode: 1.68\unit{\micro\ohm\,cm})
%\end{verbatim}
% If the |siunitx| package has been loaded (as it is for typesetting
% this documentation) its unit |ohm| is redefined so as to always be
% an upright capital omega.
%
%\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 an 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
%
% \subparagraph{ISO upright partial differential}
% Among the fonts used to typeset math when using \prog{pdflatex},
% only the LibertinusT1math fonts contain the upright partial
% differential symbol that conforms the ISO regulations. All other
% fonts at the moment available to typeset mathematics do not
% contain an upright symbol, but they contain the original slanted
% symbol as used with the CM fonts. With a poor-man trick it is
% possible to have available an upright symbol so as to describe
% the Electrical field as the opposite of the electric potential
% gradient. Compare the following formulas, where the second one
% is ISO compliant:
%\begin{align}
%\vectorsymbol{E} &=-\nabla V = -\left(
%\frac{\partial V}{\partial x}\vectorsymbol{e}_x +
%\frac{\partial V}{\partial y}\vectorsymbol{e}_y +
%\frac{\partial V}{\partial z}\vectorsymbol{e}_z
%\right)\\[\baselineskip]
%\vectorsymbol{E} &=-\nabla V = -\left(
%\frac{\uppartial V}{\uppartial x}\vectorsymbol{e}_x +
%\frac{\uppartial V}{\uppartial y}\vectorsymbol{e}_y +
%\frac{\uppartial V}{\uppartial z}\vectorsymbol{e}_z
%\right)
%\end{align}
%
%\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; nevertheless the results are not so bad. It has
% the indubitable advantage that is does not use any other math groups,
% therefore there is no risk to exceed the limit of 16~groups.
%
% As patches are not perfect, the above display of examples shows
% what can be done without human intervention. Attentive users
% have shown that the commands for vectors, matrices, and command
% do not perform well in certain circumstances. Such cases require
% some spacing corrections, but we were not capable to create
% sufficiently intelligent commands that could avoid human
% intervention. See below where, when and why human intervention
% is required.
%
%\section{Acknowledgements}
% I want to thank very much Laurent Van Deik, who remarked several
% typos and bugs; in particular he convinced me that the partial
% differential symbol, that in my previous version of this package
% was obtained by rotating and scaling the slanted one, had a
% different style from the other math glyphs; therefore I recreated
% the macro by applying an affine shearing transformation; I believe
% that this new solution, thanks to Laurent Van Deik's suggestion,
% is better suited to typeset ISO compliant math in a better way.
% He also helped a lot with the vector, matrix, and tensor macro
% testing. Thanks to him, this new version of |pm-isomath| is
% supposed to work as expected when using the
% Libertinus+LibertinusTimath fonts and other fonts where the
% textual fonts can handle also the LGR encoding; in previous
% versions there was a remarkable mismatch in certain math styles
%
% \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 to avoid 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 sometimes
% optional settings and spacing commands have to be specified.
%
% 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, 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 order error becomes a very “strong” one.
%\iffalse
%<*style>
%\fi
% 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 use the |iftex| one.
% \begin{macrocode}
\@ifpackageloaded{iftex}{}{\RequirePackage{iftex}}
\unless\ifPDFTeX
\PackageError{pm-isomath}{%
******************************************\MessageBreak
This package should be used only when \MessageBreak
typesetting with pdfLaTeX. \MessageBreak
Loading this package is skipped \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 as ‘j’. As we have remarked in the previous
% documentation, engineers, especially those who deal with
% electricity and electrical quantities, but also electronics,
% automatic control systems, 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 often than any other scientist.
%
% Notice: 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? Notice that in previous
% versions we just loaded |xparse| unless it was already loaded;
% since 2020 the main functionalities of this package are already
% contained into the \LaTeX\ kernel, but we are going to use one
% of those “deprecated” functionalities that did not make their way
% to the \LaTeX\ kernel.
% \begin{macrocode}
\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
\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
% 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. Especially the Greek lowercase letter group is
% not appreciated by certain users, because they need to correct
% any previously typeset document that uses the standard \LaTeX\
% symbols. They may easily revert to the previous settings by
% applying again the global switching macros
% \cs{switchvarlowercasegreekletters} and or
% \cs{switchvaruppercasegreekletters}. We discourage such reset,
% but users are free to chose what they need.
% \begin{macrocode}
\newcommand\switchvarsymbols[1]{%
\letcs{\tempA}{#1}\csletcs{#1}{var#1}\cslet{var#1}{\tempA}}
%%%%
\newcommand\switchvarlowercasegreekletters{%
\switchvarsymbols{epsilon}
\switchvarsymbols{theta}
\switchvarsymbols{rho}
\switchvarsymbols{phi}}
%%%%
\newcommand\switchvaruppercasegreekletters{%
\switchvarsymbols{Gamma}
\switchvarsymbols{Delta}
\switchvarsymbols{Theta}
\switchvarsymbols{Lambda}
\switchvarsymbols{Xi}
\switchvarsymbols{Pi}
\switchvarsymbols{Sigma}
\switchvarsymbols{Upsilon}
\switchvarsymbols{Phi}
\switchvarsymbols{Psi}
\switchvarsymbols{Omega}}
%%%%%
\switchvarlowercasegreekletters
\switchvaruppercasegreekletters
% \end{macrocode}
%
% Eventually we load the |alphabeta| package; it
% 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 roman;
% the series is medium one and the shape is normal (or upright) one.
% The codes used are the same used in the font description
% files with extension |.fd|. The name of these |.fd| files
% 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| file defines the
% codes for shapes, and for every valid combination of
% series, shape and size it defines the specific font file
% to use.
%
% If the document preamble specifies a different textual font
% from the default Latin Modern the family name default should
% be changed; this is delayed at the execution of the
% |\begin{document}| command. But this might have strange effects
% on the corresponding Greek fonts, because they might be missing.
% Example: the GFS Bodoni fonts are chosen, they are good for both
% Latin and Greek text and no problems show up. The Libertinus
% fonts contain the Latin glyphs In various encodings), and the
% LGR encoded Greek ones, the Cyrillic fonts in various encodings.
% Apparently the Libertinus fonts are the most flexible available
% fonts for use with \pdfLaTeX. Only the typewriter type text font
% may be replaced with better results with other fonts; it is not
% important for mathematics, but I preferred to write this
% documentation with Latin Roman, because it contains several
% stretches of typewriter type texts.
% 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 Modern 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{Series and shapes available with the Latin Modern regular family with Latin and Greek fonts}
%\label{tab:lmr-series-shapes}
%\end{table}
%
% \begin{macrocode}
\def\Def@Fam{lmr}\edef\ISOfam{\Def@Fam}
\def\ISOser{m}
\def\ISOsha{n}
\AtBeginDocument{%
\unless\ifx\f@family\Def@Fam\edef\ISOfam{\f@family}\fi
}
% \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 functionalities, 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 text mode).
% \begin{macrocode}
\NewDocumentCommand\MathLatin{m g O{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\ISOsha{#4}%
\ifcsstring{math@version}{bold}{\def\ISOser{bx}}{\def\ISOser{#3}}%
\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\ISOsha{#4}%
\ifcsstring{math@version}{bold}{\def\ISOser{bx}}{\def\ISOser{#3}}%
{\usefont{LGR}{\ISOfam}{\ISOser}{\ISOsha}#1}}}
% \end{macrocode}
% It is convenient to notice that for Greek letters the default
% encoding is LGR, the only encoding that \pdfLaTeX\ understands
% without the necessity of other packages. If the default text
% font family does not handle the Greek encoding, errors show
% up in different forms that difficult to handle. Therefore it
% is better to use the above commands with an explicit font
% family code, for example |lmr|, and accept the consequent
% font mismatch. After examining the result the author may
% accept the mismatch, but s/he might prefer to select a
% different textual Greek font the glyphs of which have a
% less noticeable mismatch; even better, s/he might prefer
% to use a couple of matching Latin and Greek fonts, so that
% it is possible to get e perfect match. This is why we suggest
% to typeset the document either with Latin Modern, or Libertinus
% (that is usable also with slavic languages typeset in Cyrillic);
% among the fonts provided by the Greek Font Society (GFS), the
% Bodoni collection is available with matching Latin and Greek
% families. These are just examples; the user can explore its
% own \TeX\ system installation where PFB fonts are stored and
% discover the multitude of available fonts.
%
% 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 math fonts (with results similar
% to those obtained with package |bm|,without requiring
% any math group), and sans serif in both normal and bold
% slanted shape.
% \begin{macrocode}
\AtBeginDocument{%
\providecommand\mathrmbf[1]{\MathLatin{#1}{lmr}[bx](n)}
\providecommand\mathbfit[1]{\MathLatin{#1}{lmr}[bx](it)}
\providecommand\mathsfit[1]{\MathLatin{#1}{lmss}[m](sl)}
\providecommand\mathsfbfit[1]{\MathLatin{#1}{lmss}[bx](sl)}
\providecommand\mathsfbf[1]{\MathLatin{#1}{lmss}[bx](n)}
}
% \end{macrocode}
% Package |ISOmath| defines macros for typesetting vectors,
% matrices and tensors; we do the same, but avoid the
% abbreviation |sym| and replace it with |symbol|.
% The strange test with the digit ‘9’ is a dirty trick (described in
% the \TeX\-book) in order to discover if the symbol is a digit or a
% letter; with digits the vector and tensor symbols should be upright,
% while with letters they should be italic or slanted. The italic
% correction |\/| contained by the font selection command is useful
% in situations where the “text” produced by such command is followed
% by a tall or raised object
% \begin{macrocode}
\AtBeginDocument{%
\unless\ifdefined\vectorsymbol
\NewDocumentCommand\vectorsymbol{s m}{%
\ifnum 9<1#2\relax
\mathrmbf{#2}%
\else
\IfBooleanTF{#1}{\!}{}\mathbfit{#2\/}%
\fi}%
\fi
\unless\ifdefined\matrixsymbol\let\matrixsymbol\vectorsymbol\fi
\unless\ifdefined\tensorsymbol
\NewDocumentCommand\tensorsymbol{s m}{%
\ifnum 9<1#2\relax
\mathsfbf{#2}%
\else
\IfBooleanT{#1}{\!}\mathsfbfit{#2\/}%
\fi}%
\fi
}
% \end{macrocode}
%
% As shown in the previous various examples, such macros work pretty
% well, but in some circumstances they require human help; when the
% symbol is parenthesised, for example when it is the argument of a
% function, or when it is at the beginning of a math sub\,expression,
% either it is not centred between the parentheses, or it has
% extra blank space at its left; this happens only if the vector or
% tensor symbol is a letter, while if it is a digit such extra space
% does not appear; such considerations hold true also for the
% |\matrixsymbol| command.
% Therefore a negative math kerning is required at the left of the
% literal symbol. For this purpose such commands have the variant with
% asterisk, therefore their syntax have these two similar forms:
%\begin{flushleft}\obeylines
%|\vectorsymbol|\marg{symbol}
%|\vectorsymbol*|\marg{symbol}
%|\tensorsymbol|\marg{symbol}
%|\tensorsymbol*|\marg{symbol}
%\end{flushleft}
% where the asterisk can be used by the author in order to eliminate
% spurious left blanc spaces; if the symbol is numeric, the asterisk
% presence is ignored: see the following examples:
%\begin{quote}
%Vector $\vectorsymbol{T}$ is null: $\vectorsymbol{T}=\vectorsymbol{0}$\\
%Vector $\vectorsymbol*{T}$ is null: $\vectorsymbol*{T}=\vectorsymbol*{0}$\\
%Tensor $\tensorsymbol{T}$ is null: $\tensorsymbol{T}=\tensorsymbol{0}$\\
%Tensor $\tensorsymbol*{T}$ is null: $\tensorsymbol*{T}=\tensorsymbol{0}$
%\end{quote}
%They are typeset with the following code:
%\begin{verbatim}
%Vector $\vectorsymbol{T}$ is null: $\vectorsymbol{T}=\vectorsymbol{0}$\\
%Vector $\vectorsymbol*{T}$ is null: $\vectorsymbol*{T}=\vectorsymbol*{0}$\\
%Tensor $\tensorsymbol{T}$ is null: $\tensorsymbol{T}=\tensorsymbol{0}$\\
%Tensor $\tensorsymbol*{T}$ is null: $\tensorsymbol*{T}=\tensorsymbol{0}$
%\end{verbatim}
%
%
% We now define the macros required to set some elements with 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, |\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 ISO regulations require that any letter-like symbol that
% does not refer to a measurable quantity be set in upright shape;
% we already applied the regulation to the regular differential
% symbol, that may appear in both the derivative fractions and
% in the differential integrators. With partial derivatives the
% default symbol is slanted since the very beginning of \TeX, when the
% OMS Computer Modern Symbol font was defined; according to the
% ISO regulations such symbol should be upright. For use with
% \pdfLaTeX the only font distributed with any \TeX system that
% contains such an upright symbol is the LibertinusT1math one;
% all other OMS encoded fonts available today do not contain it.
% The defined command |\uppartial| name is identical to the one used
% by the LibertinusT1math font; therefore it is easy to check if
% this symbol has already been defined.
%
% On \texttt{tex.stachexchange.com} some questions were asked on
% how to produce a suitable upright partial differential symbol,
% when fonts did not have one available. The solutions we found
% in that site were of different kinds: some were based on rotating and
% scaling the available slanted sign, while others used a shearing
% affine transformation of the available partial differential
% symbol. We follow a similar approach, but we avoid to redefine
% this symbol if it is already available. The used commands
% \cs{pdfsave}, \cs{pdfrestore}, and \cs{pdfsetmatrix} are little
% known internal commands of the |pdftex| interpreter\footnote{See
% the documentation with \texttt{texdoc pdftex-a} at §8.20}; they are
% sort of intermediate between \TeX\ and the PDF internals; they
% are used to form something similar to a group, within which some
% PDF settings are locally modified; in this case an affine
% shearing transformation is defined by means of a matrix (apparently
% made up of one row and four columns, but in reality it represents
% the alignment of the rows of a $2\times2$ matrix) that can do
% many things in a way that is more comfortable for the programmer
% compared to writing the actual PDF language~code.
%
% The default \meta{shearing coefficient} is fixed to 0.25, but it may
% be changed by means of an optional argument; see below. Of course this
% solution is a patch; we tested it at several sizes but only
% with the Latin Modern Type~1 fonts. May be with other fonts
% the results might need some adjustments. We also fixed some
% kerning adjustments so that the normal math spacings take place.
% The whole syntax is the following
%\begin{flushleft}
%\cs{uppartial}\oarg{shearing coefficient}
%\end{flushleft}
%
% 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, but its units and prefixes expressed by means
% of Greek letters must be used only within its |\si| and |\SI|
% commands. 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)}}
%
\newbox{\PMpartialbox}
\AtBeginDocument{%
\unless\ifdefined\uppartial%
\NewDocumentCommand\uppartial{O{0.25}}{\bgroup%
\setbox\PMpartialbox\hbox{%
$\mkern1mu\partial$}\hspace{1.3\wd\PMpartialbox}%
\pdfsave\pdfsetmatrix{1 0 -#1 1}\llap{\box\PMpartialbox}\pdfrestore
\mkern-1.5mu\egroup}
\fi}
%
\providecommand*\micro{}
\AtBeginDocument{\@ifpackageloaded{textcomp}%
{\renewcommand*\micro{\textormath{\textmu}{\ISOmu(rs)}}}%
{\renewcommand*\micro{\ISOmu(rs)}}%
}
%
\providecommand*\ohm{}\def\ISOohm{\ISOOmega(n)}
\AtBeginDocument{%
\@ifpackageloaded{siunitx}{\let\ohm\ISOohm}{\let\ohm\ISOohm}%
}%
%
\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}}}}%
%
\DeclareRobustCommand\ap[1]{%
\textormath{\textsuperscript{#1}}{^{\mathrm{#1}}}}%
%
\unless\ifcsname unit\endcsname
\DeclareRobustCommand{\unit}[1]{\,\textormath{#1}{\mathrm{#1}}}
\fi}
\endinput
% \end{macrocode}
%^^A This is the end
%\begin{center}
%\LARGE HAPPY \TeX{}ing\,!
%\end{center}
%\iffalse
%</style>
%\fi
%\iffalse
%<*txt>
%\fi
^^A% \begin{macrocode}
^^A
^^A This bundle has the LPPL maintenance status "author-maintained".
^^A
^^A The list of all files belonging to the PM-ISOmath bundle is
^^A pm-isomath.dtx, a README.txt file
^^A with the derived files: pm-isomath.sty, pm-isomath.pdf.
^^A
^^A The set of derived (unpacked) files belonging to the distribution
^^A and covered by LPPL is created by the self unpacking file
^^A pm-isomath.dtx which is the principal part of the distribution.
^^A
^^A In the TDS composed of various branches they should be in the
^^A following folders:
^^A .../tex/latex/pm-isomath/ contains pm-isomath.sty
^^A .../doc/latex/pm-isomath/ contains pm-isomath.pdf and README.txt
^^A .../source/latex/pm-isomath contians pm-isomath.dtx
^^A% \end{macrocode}
%\iffalse
%</txt>
%\fi
%\Finale
% \endinput
|