From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.io/gmane.comp.tex.context/116233 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Gavin via ntg-context Newsgroups: gmane.comp.tex.context Subject: Re: Spacing in \unit - SOLVED Date: Wed, 12 Oct 2022 18:11:32 -0600 Message-ID: References: <2606f89be66bdc33f9db2e6d9ba773521535f3f5.camel@telus.net> <5B9BE319-5660-48E4-A195-CE4705587F66@comcast.net> <6ff808a4d15d6c098525938ba785d7ad9c0d1d3c.camel@telus.net> Reply-To: mailing list for ConTeXt users Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.1\)) Content-Type: multipart/mixed; boundary="Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="35369"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Gavin , mailing list for ConTeXt users To: Max Chernoff Original-X-From: ntg-context-bounces@ntg.nl Thu Oct 13 02:12:18 2022 Return-path: Envelope-to: gctc-ntg-context-518@m.gmane-mx.org Original-Received: from zapf.boekplan.nl ([5.39.185.232] helo=zapf.ntg.nl) by ciao.gmane.io with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oilph-00091F-Hk for gctc-ntg-context-518@m.gmane-mx.org; Thu, 13 Oct 2022 02:12:17 +0200 Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id E71382A4519; Thu, 13 Oct 2022 02:11:57 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id mltEV8L3pyno; Thu, 13 Oct 2022 02:11:56 +0200 (CEST) Original-Received: from zapf.ntg.nl (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id D254F2A4512; Thu, 13 Oct 2022 02:11:56 +0200 (CEST) Original-Received: from localhost (localhost [127.0.0.1]) by zapf.ntg.nl (Postfix) with ESMTP id CD65A2A4511 for ; Thu, 13 Oct 2022 02:11:54 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at zapf.boekplan.nl Original-Received: from zapf.ntg.nl ([127.0.0.1]) by localhost (zapf.ntg.nl [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ZDqT8hymxUHs for ; Thu, 13 Oct 2022 02:11:53 +0200 (CEST) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=96.102.19.36; helo=resqmta-c1p-023463.sys.comcast.net; envelope-from=gavinpublic@comcast.net; receiver= Original-Received: from resqmta-c1p-023463.sys.comcast.net (resqmta-c1p-023463.sys.comcast.net [96.102.19.36]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by zapf.ntg.nl (Postfix) with ESMTPS id 20B992A418D for ; Thu, 13 Oct 2022 02:11:52 +0200 (CEST) Original-Received: from resomta-c1p-022590.sys.comcast.net ([96.102.18.239]) by resqmta-c1p-023463.sys.comcast.net with ESMTP id iknuoixHtjS9RilpEonROY; Thu, 13 Oct 2022 00:11:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=comcast.net; s=20190202a; t=1665619908; bh=WJmnRkJV4fziVIcpor9NX0XbvIM6inoBD23yiQZV+RE=; h=Received:Received:From:Message-Id:Content-Type:Mime-Version: Subject:Date:To; b=kerQ5fBqV1iBSs4fIbxScTq45PendLIhBP7XG9F04jMFAdIR7lFzmVgjM47agqnWs HpaFGSCjO0HQFBhT/pPc8YXLZw8agdJ8Me5i69sQFEXwcF5byhRCxfEo6p7ePvVLUr d9EMeax8QXKyarL1uSJ+0qM10zae2mQZd3pg4t+/IS5pDWYRoiDnlzyYz+kQ8C8Pwj lEtQkBAagFSce2HT65OjJACejqcOEz+Pp+9SmbfR5oqQ3c+eEnW09G+p1BQM5Ph31O S7bhp/adc+PpjM2KFBfuEHVIde3BRm/yIRC7kVU9AdKTeOG19a3BKZsjOWhlZhSmJ5 mKtDG5qPoU9nw== Original-Received: from smtpclient.apple ([IPv6:2605:b40:14d0:ab00:c1f6:a51f:d15f:93bb]) by resomta-c1p-022590.sys.comcast.net with ESMTPSA id iloyoWw9mYuTgilp3otqC2; Thu, 13 Oct 2022 00:11:46 +0000 X-Xfinity-VMeta: sc=-100.00;st=legit In-Reply-To: <6ff808a4d15d6c098525938ba785d7ad9c0d1d3c.camel@telus.net> X-Mailer: Apple Mail (2.3696.120.41.1.1) X-BeenThere: ntg-context@ntg.nl X-Mailman-Version: 2.1.26 Precedence: list List-Id: mailing list for ConTeXt users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ntg-context-bounces@ntg.nl Original-Sender: "ntg-context" Xref: news.gmane.io gmane.comp.tex.context:116233 Archived-At: --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Max and Rik > On Oct 12, 2022, at 4:49 PM, Max Chernoff wrote: >=20 > This new output looks *much* better than the old one, thanks!=20 Thank you! > My only comment is that the spacing around the multiplication sign = looks > a little too tight to me. The original spacing was probably too large, > but I think that a little more space than you currently have would be > better. I haven=E2=80=99t adjusted the space directly. I just changed the \times = and \cdot from class binom to class ord. I=E2=80=99m not going to tweak = the space. I don=E2=80=99t even use this font. With proportional numbers = in Libertinus, I think the \times looks great. --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Disposition: inline; filename=PastedGraphic-5.pdf Content-Type: application/pdf; x-unix-mode=0666; name="PastedGraphic-5.pdf" Content-Transfer-Encoding: base64 JVBERi0xLjMKJcTl8uXrp/Og0MTGCjMgMCBvYmoKPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgL0xl bmd0aCAxMzk5ID4+CnN0cmVhbQp4AbVZy47bRhC88yvmB3Yy3fMGAh0c5JKbAQE5BDlk1/bBgANs /v+Q6uGQHD5EkVoZBm2SEtTTj6qubr+rz+pdGfwhY6x2nJX1SVs8qP++qj/Vv/jYa7blO+XmhSgb HdULO446R1JvP9Sna0dGZ59y/bH+nnLUyZBT3nodsnXq+kP98hspUtdv6ldjDF3U9bv6/VrOccdQ VwzhpGtDLuvsnA3KZaeJc1obgjG+d126w4fpvb5zmISjBtetnBbH713PDkyIOuZkV4FBro3D5cVg dywTO85How3bHJWrBnvvuUk5jEkmZoY/XgJkUGs2ogS2PP2rVFuA2Ygr1Svj339wvV66F/amfOdN 3l1Q3vX5C54Rm1g+/IqHL82H3ySRF5XKhxEf9F97xWtJsNjzuOfm9/Ge4Doh5oTf/Vtd/zjo/A7Q 2AUNa3bhvG2i/px6Ys/apHQjygXR8JlHY91B+lABVGKTL/Qx3HMg7Qi2IunkeIkjCqOZoyy1iVdG wRjKfgzeyhBqhtKTjMWkiWhprMnUFLyPeQXySV6iNwNiw70PeDRkRjrGcM8pa0/G3UyTe1LkMqMK /JJZJofQlwRqxxtKpbHBkdYpIFSHYJCmG7X3JKemxuWdDpb9rPYKa5EwFC4Cq5jCTsIqDQkJmwmT CVPhWCOjHMbeVkdFQrX1zMrNDtbwuJCbkNyMy/F8BpU7LZ180AAlKK0eYNa5ej5f0G93k36noBzF 1A09k7XDeRZnasA7NjUJRA2QvIvnpUXSMUTqlddwz9ZqGxLhAHgFAdaXS3OAB0C9lX60cPy+A3vM 0t8YGnqnpP/1HOi6T1c1eCSgG+45MKSmB+iqd33KG6NFpBxslzu1xcHrmOxU3CtDgjM0+ioHDyNp 8GTmVbTaQ5EOTq1SdsapHeXFMeqAklmkrOFHOzp0FAWb/XLiLIf+HELa4CyJHy6S6hCUCncJPbfi acFborg6URALVN8WVWdQvVMNOaNRZkbZUcIIhAgWwd6U3U9GNQHVMVFWjll7G/KqRJ6EaohOTR4q a/B0ZegnoJqA6oC5bPRuFd4zANjJIwXpGBhIB+9Whp6IaooOonEvZ2e82oE1Qcd59iiOWp2znPV9 8KuoAfTqih6Z58p8Wf4CovoO9ABcNvkMRZpJlEGt1lWYz1TrTj6Zs+aUQGhbuOy1kfBL7UAvHJPw B4Hm5F6iIVNW4ROZwobpTyZAmdUISJfv4H7UTPeJcefAIzHa7LVNA5FUBu4PLBOklKGIOj+NhTQj PZy2sKWctH5Z5o9xJi3vmucZk0pALt0Jj2rxGQQbC5q3fc63CT2azYqiUKYl8k9doIAKtfG+Tn4T IUtdj0UuqZUXc7k1tO7DCd0qdSyTZKomZdHDKUD4LTqDjBwFXaW1fnx7QiZry1i33fL8rNTCZm6U V60oIcLuLtHk2YxVhEfOyPg9+iokIYZu5LLAt7Sd0+qk28oZ2QCJDG23n7MTxnYQTw5CEqaqb8vy KL5NMlK9d3dWnDWQm35h8xKti6Nfy4yVWnxS05mYTBZL5Kk3tsNkIzkdYbIz27ZCZ08naCu7BGiS djVbCJpBJdJBqGwD5Qlsh40m3oKuz7Pq1nAFoZ4ooLHZeoxlKk+txXfAl6xsTLB/nxuaRoJ+gD+B hWpsa2WSQZGRPZAOBKZs5zUDSmFpxsLUZ5b+vcHtaRwrChcwWQ3ezbIpHPaAENnyjAiuMWTz4NnS kCxyDze+PTohcFeUfjOrz6nxNZvVw41tqwIhXLGFFJKcGZoKg+Yrz8MD8Gb4LKSFwSZnCN+MTMbC OBHCnZIX+vfe4f+xbmHrgQ3hZgixIWEsjed2mgg+YGczeg7rg5DDbvSoWUd+/h8MSqrFCmVuZHN0 cmVhbQplbmRvYmoKMSAwIG9iago8PCAvVHlwZSAvUGFnZSAvUGFyZW50IDIgMCBSIC9SZXNvdXJj ZXMgNCAwIFIgL0NvbnRlbnRzIDMgMCBSIC9NZWRpYUJveCBbMCAwIDQwNS43MjMyIDY4LjUwODY3 XQo+PgplbmRvYmoKNCAwIG9iago8PCAvUHJvY1NldCBbIC9QREYgL1RleHQgXSAvRm9udCA8PCAv QzEgNSAwIFIgL0MyIDYgMCBSIC9DMyA3IDAgUiA+PiA+PgplbmRvYmoKMiAwIG9iago8PCAvVHlw ZSAvUGFnZXMgL01lZGlhQm94IFswIDAgNDA1LjcyMzIgNjguNTA4NjddIC9Db3VudCAxIC9LaWRz IFsgMSAwIFIgXQo+PgplbmRvYmoKOCAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAw IFIgPj4KZW5kb2JqCjUgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1YnR5cGUgL1R5cGUwIC9FbmNv ZGluZyAvSWRlbnRpdHktSCAvRGVzY2VuZGFudEZvbnRzIFs5IDAgUl0KL0Jhc2VGb250IC9BQUFB QUIrTGliZXJ0aW51c1NlcmlmLVJlZ3VsYXIgL1RvVW5pY29kZSAxMCAwIFIgPj4KZW5kb2JqCjEw IDAgb2JqCjw8IC9MZW5ndGggNDM1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AV2T wWrjMBCG734KHbuH4IzkSC0EQ2kp5LDtsmkfwJbGwbCRjeIc8vYr/6NNYQ35IJ8149GPVL8cXg9x XFT9K03+yIsaxhgSX6Zr8qx6Po2xIq3C6JfyD86fu7mqc/Hxdln4fIjDpPb7Sqn6dy65LOmmHp7D 1POP1X2kwGmMJ/Xw9XKEOV7n+Q+fOS5qW7WtCjzkdj+7+b07s6pRujmE/H5cbptc9b3i8zazyhPl CpKR/BT4MneeUxdPXO23+Wn3b/lpK47hv9emkap++F5O7VoEGmrRQUOBZivKQIG7RlQDBdpHUTso 0O5EWSjQGlEOCrSDqEco0AZRT1CgLXN1UKBlWdVDgbbM5aFA+ySrAhToyiqGAl2ZfoACnWybcpY5 G9Bp9CIkJXSyR0JSQid7JCQl1DIqISlCOKb0QiwEmtILsZCE08sXEQtJOE4UYiFQS4SEWISNbJsQ i9B6KUQsBDaSBCEWoSuFiIXAphQiFgKtTK8Ri9B0aK8RjpaTY0UhCQ0a+aJGEiu1zqmt5/TfgVyP 7Hq97tfBX1PKNwF3EJdkPfxj5Ps1nad5bYDfX7Z09U4KZW5kc3RyZWFtCmVuZG9iago5IDAgb2Jq Cjw8IC9UeXBlIC9Gb250IC9TdWJ0eXBlIC9DSURGb250VHlwZTAgL0Jhc2VGb250IC9BQUFBQUIr TGliZXJ0aW51c1NlcmlmLVJlZ3VsYXIKL0NJRFN5c3RlbUluZm8gPDwgL1JlZ2lzdHJ5IChBZG9i ZSkgL09yZGVyaW5nIChJZGVudGl0eSkgL1N1cHBsZW1lbnQgMCA+PgovVyAxMSAwIFIgL0RXIDEw MDAgL0ZvbnREZXNjcmlwdG9yIDEyIDAgUiA+PgplbmRvYmoKMTEgMCBvYmoKWyAxIFsgMzYwIDQ5 MSA1OTcgNTM4IDQ0NyA0MjggNTA0IDc5MCA0NTcgNTQyIDUwNiAyNzEgMzE2IDQ5MCA1MTkgMzcy IDUzMQozOTAgMjIwIDQ3OCA0NjUgNDU0IDUxMiA1MDAgMzIzIDI5NyAyNjQgNzAxIDUxNSA1Mjgg NDkzIDIzNiA0NzMgNDM4IDQ4NCA1NTAKXSBdCmVuZG9iagoxMiAwIG9iago8PCAvVHlwZSAvRm9u dERlc2NyaXB0b3IgL0ZvbnROYW1lIC9BQUFBQUIrTGliZXJ0aW51c1NlcmlmLVJlZ3VsYXIgL0Zs YWdzCjQgL0ZvbnRCQm94IFstMTM1NiAtMjg3IDEzMDAgOTU5XSAvSXRhbGljQW5nbGUgMCAvQXNj ZW50IDkyOCAvRGVzY2VudCAtMjU2Ci9DYXBIZWlnaHQgODI0IC9TdGVtViAwIC9YSGVpZ2h0IDYx OCAvTWF4V2lkdGggMjY1NiAvRm9udEZpbGUzIDEzIDAgUiA+PgplbmRvYmoKMTMgMCBvYmoKPDwg L1N1YnR5cGUgL0NJREZvbnRUeXBlMEMgL0xlbmd0aCA0MzA2IC9GaWx0ZXIgL0ZsYXRlRGVjb2Rl ID4+CnN0cmVhbQp4AYVYCXxTVdZ/IU1zgRogIQ4qJoCiMCAioBRRkR0By1oKLUv3Eijd9z1p9vOy tUnTQmm6t2nTtE2LdAcqKAp+gLjUsoPrjIrjWG/04W++2zbgzOhol5e898t979zzX845YVFeXhSL xRKvD1y7PXD9nI2S0IiEJElMcuK2iARJ5DNbI6KSo0MShj8S7Ba7p4GPqMVnhnsq2/34GLfIa+rP lxnzVK+hnxdxwIcFPmNm+7DbfLx0Pt6icZQYYPTowwUf9DhFsdZPIkfqpwnkKJzi8+TwpRU+M3vJ 6+TP+RSXxUJT5i9+aVXoC/MWLyE/vwYzbSSa/z6f5onO87I8PDY04rXwiJgkSVL6n+yHhMGixlBs yoviUN4Ul0LUWGocNZ7yoR6ieNQEaiI1ieJTAmoyJaQepv5CTaEeoR6lHqOmUo9TIkpMTaOmUzOo J6gn2eRG5GcmNXMMeedHNbMELNeYuDE32AvYCi8dZxFnyLudO49bhdLG+o59Z1za+Anj547v9Fnt 8+ZDh3l2Xv+EJyZkTPhuonnSxEn2Sdf56/gOwTyB31zodX/VxyLHJ3vZve67QvwKU8CQf459L3mP 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 oBZrg/I25QcUqS3aIhpVXHEUNA5bAJv0XNO73I+RL5jsH7Ox3W0QMu3MNm7ftfex18WvyJTKtAt9 cYc3sTuXrhBpdAeBIwelQqXa+AqDGN/5zBP6LFOcnegj+Flv2BMBwZ7OkExQdCe4oFXb6JF/oCFF A13oi4vcksNlVovKlCfm7cUpvSx3GE4RFpdUWgpVZqn43mPeuTlpWfmmfLOYB5PdXwhzre7lxUet eLLFWWy3eDOyIu5/XkLk0ljROHbRv3zGDn/h6eOe7vOU58vJ/wcrt26TCmVuZHN0cmVhbQplbmRv YmoKNiAwIG9iago8PCAvVHlwZSAvRm9udCAvU3VidHlwZSAvVHlwZTAgL0VuY29kaW5nIC9JZGVu dGl0eS1IIC9EZXNjZW5kYW50Rm9udHMgWzE0IDAgUl0KL0Jhc2VGb250IC9BQUFBQUMrTGliZXJ0 aW51c01vbm8tUmVndWxhciAvVG9Vbmljb2RlIDE1IDAgUiA+PgplbmRvYmoKMTUgMCBvYmoKPDwg L0xlbmd0aCAyNjIgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4Kc3RyZWFtCngBXZHPasMwDMbvfgod u0NJk7Upg2AYHYMc9odle4DEVoJhsY3jHPL2k+WthRn8gX/yJ0tycWmfWmsiFO/BqQ4jjMbqgItb g0IYcDJWlBVoo+LviZmaey8KMnfbEnFu7eigaQRA8UGWJYYNdo/aDXiX2FvQGIydYPd16Zh0q/ff OKONcBBSgsaR0r30/rWfEQq27ltNcRO3PbluNz43j0AVkaPMJSmncfG9wtDbCUVzoCWbZ1pSoNX/ wnU2DePtdimTh/WkJCeoGLGeTxndM2KtMaMjI9b6IaMTI9bzMaOaEWtFiEr6ezxVlyZ57VytIVDT PG6eR+rTWLz+iHc+JeD9A0MXhRwKZW5kc3RyZWFtCmVuZG9iagoxNCAwIG9iago8PCAvVHlwZSAv Rm9udCAvU3VidHlwZSAvQ0lERm9udFR5cGUwIC9CYXNlRm9udCAvQUFBQUFDK0xpYmVydGludXNN b25vLVJlZ3VsYXIKL0NJRFN5c3RlbUluZm8gPDwgL1JlZ2lzdHJ5IChBZG9iZSkgL09yZGVyaW5n IChJZGVudGl0eSkgL1N1cHBsZW1lbnQgMCA+PgovVyAxNiAwIFIgL0RXIDEwMDAgL0ZvbnREZXNj cmlwdG9yIDE3IDAgUiA+PgplbmRvYmoKMTYgMCBvYmoKWyAxIDYgNjQwIF0KZW5kb2JqCjE3IDAg b2JqCjw8IC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgL0FBQUFBQytMaWJlcnRpbnVz TW9uby1SZWd1bGFyIC9GbGFncyA0Ci9Gb250QkJveCBbLTEyMDYgLTMxOSAxMTczIDk3N10gL0l0 YWxpY0FuZ2xlIDAgL0FzY2VudCA5NDYgL0Rlc2NlbnQgLTI4OCAvQ2FwSGVpZ2h0Cjg0MCAvU3Rl bVYgMCAvWEhlaWdodCA2MzAgL0F2Z1dpZHRoIDY0MCAvTWF4V2lkdGggMjM3OSAvRm9udEZpbGUz IDE4IDAgUiA+PgplbmRvYmoKMTggMCBvYmoKPDwgL1N1YnR5cGUgL0NJREZvbnRUeXBlMEMgL0xl bmd0aCAxMTE1IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+CnN0cmVhbQp4AX1UXUwUVxid2d1hbs0E W9ZNa6Kz2KBJq6VPSm2tTW1La5SiJdoVraBxFVRYXFm6ILizPzM7s98ssz8sC8SCAoVCW0AQpSr1 p5WqtfGhPyGmTQxia6yp7YO5QweTzooJaR/6Jffc79x7c3LOffhIwmQiSJJk8/I327bkLV1futPu rCwtdx3Mc5Q7XnjPvse1f4cz9aJYtaqZwLAx5ll1gVFdaFBZ0wKtVDuxwFT1dy4FDAmM4TnGOMSY wkwaO4ewAswgQwODFhIEOecpHYkHc3U03WGyUkcGZnFfil7KIGiSRE9nL395TdGK7JyVes16yUyZ +Q/NfOzt8fb6LsdO+9pd9vLK0srq/w+jeyAJA2EkTARFpBl1ohdN0Aa9yye2k/PJGwanYdLYo2bB qHpvlNQxa9Q4qv5lwau1uKYvqme73uN4ilNaJj7/iMF0jNK26URLXd0Bavqlh6xFFac2TItp6fj5 qX2WPFCXPbx2Bah07+lAl/rMQAY2TeDAhHkEg9cyCD+1Xv8yosTCEICiRidAXKyX42Fkdh/76GzL 5Vg0Ci18dF3E0wpnEfbTPco4sPVivcAKocpQLewDu7xb5nlwRvljoTYx4UtyyoewB2lVNLhDvloO mUc2Fue7nYDKtjRPWnH1vzRqHmkUzmpInbpGI6e4oQRpfjq3/50/2HRpQF3cfeBcBkaPrI/jEnW+ RQzyXmiGy2KnkJAiUr0fHNxuX65P4sOHwvwFoVGAjUgTaFjpFd/iZyyekAflkzAI7aHhkB6tk4/a Ij4FfkG4gIajDcl4g273+MBXw5ehDVrrml1Jd70DypC2NSUTfF8Q9KQRflhul4fgBAyEToYiuowQ XatwkZSMjYaLwdEDn7iPljeVAHoF1u19922UCmD9DJsxnYG7sCl7wvwn7ppiLWVdZV29Xb0d3Qc/ LWMr9lc4rOY7D6abLNhHw/XmI9ABsUAsABw4+ArhA/8Kf5Eo+uVDiv93qV9q4FDCEz4MB5BWQ8O2 oLuO4/wa8hRKM1mHZbxMHoFhwIt0mzNp0abwkiQXR7UJsRXOoHTvGL5/isQbJoyT6npLXdDjt1bT ghxSWGzSEmma6bvdt9gxuN7784iU4I945U2VBa5iQDZbG55jxXZcTCealQZrJ62IYYHVKibTrilD wEZTLABV3KFATcApgRc89cWgGVF6oE+99XnGvX7vDfzkqdu/vXncPI7H1IWWzR22fvgaLl44/62M 2rWbFvO1Mdel/ZADq7btWB5C+DX1rqUgFmxZo6DIr1QtVEtcEAVzKPN4pvjiOsiC7B+23twbk6Ji TEI1WidlvrcqYTtZdfOw4pE4QVkdOdhU+A30Vn8fRPxSKgntckMERW5TX8inEn1tV/sGr8BVuPvG 6Vd7D0fcUVccNWM/Zb7xY93Hm1sLmqAllIiJZ/huzzmUPjVv3n2LJ6lWJvDcpiv6P/ka6VmKNE/8 idQEY9RFzJLH0+Yf++RE+gplbmRzdHJlYW0KZW5kb2JqCjcgMCBvYmoKPDwgL1R5cGUgL0ZvbnQg L1N1YnR5cGUgL1R5cGUwIC9FbmNvZGluZyAvSWRlbnRpdHktSCAvRGVzY2VuZGFudEZvbnRzIFsx OSAwIFJdCi9CYXNlRm9udCAvQUFBQUFEK0xpYmVydGludXNNYXRoLVJlZ3VsYXIgL1RvVW5pY29k ZSAyMCAwIFIgPj4KZW5kb2JqCjIwIDAgb2JqCjw8IC9MZW5ndGggMzk0IC9GaWx0ZXIgL0ZsYXRl RGVjb2RlID4+CnN0cmVhbQp4AV2Sz2rDMAyH73kKH7tDSW23aQshMDoGPewP6/YAia10gdUJbnro 20/+KWthgX7Qz5KsKMp3+6d96EaVv8feHWhUbRd8pHN/iY5UQ8cuZNoo37lx+gfnTvWQ5Zx8uJ5H Ou1D26uyzJTKPzjlPMarmj36vqGH5N6ip9iFo5p97Q4wh8sw/NCJwqgWWVUpTy2Xe6mH1/pEKkfq fO/5vBuvc866R3xeB1LcEWdoacn1ns5D7SjW4UhZueCnKp/5qTIK/t/xlNS07ruOKVhvqtJv7Ep5 Z2tkTGfGSv2mvRfWVSoP+nWFuwwU0xi3EmWhQKtFLaFAQ6JWUEWiNaLWUKBdiOLu+EbQTuW3UGDR SFQNBRZTXw0UWHiJclCgaUV5KHBtRREUaKbyLRRoN4jSPGIeBGgLURiLBu1SFIajwaW8tsZYhFb6 0hiL0G4lEcPRoJUX0piU0DiJwqQ0uORvlzrCWBLNgi9JC/D3/dIupL297Zm7xMgrhuXG9qWt6gLd 9n/oh1QAv19P8dZKCmVuZHN0cmVhbQplbmRvYmoKMTkgMCBvYmoKPDwgL1R5cGUgL0ZvbnQgL1N1 YnR5cGUgL0NJREZvbnRUeXBlMCAvQmFzZUZvbnQgL0FBQUFBRCtMaWJlcnRpbnVzTWF0aC1SZWd1 bGFyCi9DSURTeXN0ZW1JbmZvIDw8IC9SZWdpc3RyeSAoQWRvYmUpIC9PcmRlcmluZyAoSWRlbnRp dHkpIC9TdXBwbGVtZW50IDAgPj4KL1cgMjEgMCBSIC9EVyAxMDAwIC9Gb250RGVzY3JpcHRvciAy MiAwIFIgPj4KZW5kb2JqCjIxIDAgb2JqClsgMSBbIDU1MCAyNTAgNDY1IDIyMCA0NjUgNDY1IDQ2 NSA0NjUgNTEyIDUwMCA3OTAgMzIzIDM5MCA1NTAgNDY1IDQ2NSA0NjUKNjk5IDU1MCA0NjUgNDY1 IDIyMCA0MDIgNjAwIDU0OCBdIF0KZW5kb2JqCjIyIDAgb2JqCjw8IC9UeXBlIC9Gb250RGVzY3Jp cHRvciAvRm9udE5hbWUgL0FBQUFBRCtMaWJlcnRpbnVzTWF0aC1SZWd1bGFyIC9GbGFncyA0Ci9G b250QkJveCBbLTE2MDYgLTE2NzMgMjYzMSAzODQ0XSAvSXRhbGljQW5nbGUgMCAvQXNjZW50IDM4 MTMgL0Rlc2NlbnQgLTE2NDIKL0NhcEhlaWdodCAzMzg5IC9TdGVtViAwIC9YSGVpZ2h0IDI1NDIg L01heFdpZHRoIDQyMzcgL0ZvbnRGaWxlMyAyMyAwIFIgPj4KZW5kb2JqCjIzIDAgb2JqCjw8IC9T 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 H4FL6Exuz1aZhDxEXum/vysowLm3hPhd3svBzXr7maoH2qeaE80pkAZrLOvGtL9urNdDNBpZISav J2RvlxVCqVu7W+fRePIAle5UKdNO7GqS90OHsy90qPv0ccBPIMmwugubuvAH3QLvXT7PL+Rfuj+D IzFA4sikRJJjUJpUtMDkie9IGP4tYBY+DQ2f1tQYnVYXasaIdYTqHfuq7Bab1WJH9laTlc0yq2hi 1I0smy3IZNLnsmZ9ldEGyGdiA6Y66uFgAINZj3aSZ9iUHauKE4DMgKX4YcDh4LV6bY2deBGOxBPw o4DlEIpxzkV+BwsHrL3VV+Igt5+Mp7K2YM1Rwe+whuNnijwer5tmVCEfmSkqLy0or6zSuOQSeIQq Vu7mF3ga3PiR2pDHXysiGpf4v6cQnRovCxe6/hkxfvQ2KYKfHjFj7IbmX596ceMKZW5kc3RyZWFt CmVuZG9iagoyNCAwIG9iago8PCAvUHJvZHVjZXIgKG1hY09TIFZlcnNpb24gMTIuNiBcKEJ1aWxk IDIxRzExNVwpIFF1YXJ0eiBQREZDb250ZXh0KSAvQ3JlYXRpb25EYXRlCihEOjIwMjIxMDEyMjM1 MTQ0WjAwJzAwJykgL01vZERhdGUgKEQ6MjAyMjEwMTIyMzUxNDRaMDAnMDAnKSA+PgplbmRvYmoK eHJlZgowIDI1CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMTQ5NCAwMDAwMCBuIAowMDAwMDAx Njk1IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMTYwOCAwMDAwMCBuIAowMDAw MDAxODM3IDAwMDAwIG4gCjAwMDAwMDc1MjcgMDAwMDAgbiAKMDAwMDAwOTcyNCAwMDAwMCBuIAow MDAwMDAxNzg4IDAwMDAwIG4gCjAwMDAwMDI1MDEgMDAwMDAgbiAKMDAwMDAwMTk5MyAwMDAwMCBu IAowMDAwMDAyNzE1IDAwMDAwIG4gCjAwMDAwMDI4ODUgMDAwMDAgbiAKMDAwMDAwMzEyMyAwMDAw MCBuIAowMDAwMDA4MDE4IDAwMDAwIG4gCjAwMDAwMDc2ODMgMDAwMDAgbiAKMDAwMDAwODIzMiAw MDAwMCBuIAowMDAwMDA4MjYwIDAwMDAwIG4gCjAwMDAwMDg1MTEgMDAwMDAgbiAKMDAwMDAxMDM0 NyAwMDAwMCBuIAowMDAwMDA5ODgwIDAwMDAwIG4gCjAwMDAwMTA1NjEgMDAwMDAgbiAKMDAwMDAx MDY4NyAwMDAwMCBuIAowMDAwMDEwOTMwIDAwMDAwIG4gCjAwMDAwMTQwMzAgMDAwMDAgbiAKdHJh aWxlcgo8PCAvU2l6ZSAyNSAvUm9vdCA4IDAgUiAvSW5mbyAyNCAwIFIgL0lEIFsgPDliNDAyYzg2 M2IwMDU2NzQ3NWQ4ODFiZGQzNmU0N2MyPgo8OWI0MDJjODYzYjAwNTY3NDc1ZDg4MWJkZDM2ZTQ3 YzI+IF0gPj4Kc3RhcnR4cmVmCjE0MTkzCiUlRU9GCg== --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 With tabular numbers, the \times looks a bit off center due to the extra = space around the following 1. >> If anyone wants my changes, either for their own use or to improve = the >> distributed phys-dim.mkxl, I=E2=80=99m happy to share. >=20 > Yes, can you please share that to the list? See below for comments, and the full modified phys-dim.mkxl is attached > Hi Rik, >=20 >> It does look like you have introduced additional space before the=20 >> solidus. Was that intentional? >=20 > I believe that that is intentional. =46rom the earlier email: >=20 >> removed an overzealous backspace before division symbols. >=20 > This new spacing looks much more even to me, especially around the > exponents. It was intentional. I didn=E2=80=99t add space. I removed a backspace in = the \unit code. Below I list all of my changes to the phys-dim.mkxl code, with some = commentary. I have added comments in the code everywhere I made a = change, and I signed the changes with -GP, so they are easy to find. Thanks for your encouragement, because my high school physics students = certainly do not give a s#!t. I hope some people find this useful! Gavin This used to add space around the \times in text. Now, instead, it = removes the space around the \times in math by making the \times an ord. = (ll. 170-172) \permanent\protected\def\digitstextbinop#1% assumes preceding {\ifmmode\mathord#1\else\nobreak#1\fi} % Removed space around binop = (\times or \cdot) in \units -GP %{\ifmmode#1\else\fourperemspace\nobreak#1\fourperemspace\fi} % This = is the old line with spaces -GP These lines produce the \cdot between units, one is for the default = \cdot, the other when the separator=3Dcdot option is used. I=E2=80=99m = not entirely sure why they are separate. Now, in math mode, the \cdot is = changed to an ord. (ll. 392-393 \protected\def\phys_units_separator = {\ifcsname\??unitseparator\unitparameter\c!separator\endcsname\lastnamedcs= \else\ifmmode\mathord\cdot\else\cdot\fi\fi} % Made \cdot an "ord" in = math mode -GP \installunitsseparator\v!normal{\ifmmode\mathord\cdot\else\cdot\fi} % = Made \cdot an "ord" in math mode -GP To get the thin space between the number and the units (ll.412-418) \protected\def\phys_units_space {\ifmmode \thinspace % let the atoms do the work. Right now atoms aren't = doing the work, so I put in a \thinspace -GP \else \unskip % weird, why is unskip needed = \ifcsname\??unitspace\unitparameter\c!space\endcsname\lastnamedcs\else\uni= tsmediumspace\fi \fi} This had a hardcoded backspace before the solidus. I think it looks = better without. Even if this space should be tighter, it probably should = be dealt with for every solidus, not just the solidus in \unit the unit = command. (ll.412-418) \permanent\protected\def\unitsSOLIDUS {%\ifnum\c_phys_units_state=3D\plusone % suffix % Removed three lines = to eliminate backspace before / -GP % \unitsbackspace %\fi {/}% }%\unitsbackspace} Finally, until the space around the dimension class is fixed, I=E2=80=99m = just removing the code that sets units to this class. (ll. 618-623) \def\phys_units_start {\ifmmode \dostarttagged\t!maction\t!unit % \mathatom % I removed this because the correct spaces after dim = haven't been set (e.g. dimbin, dimrel) -GP % \s!leftclass \mathdimensioncode % \s!rightclass \mathdimensioncode \bgroup \else \dostarttagged\t!unit\empty \fi \let\phys_units_finish\phys_units_stop \let\phys_units_start\relax} --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Disposition: attachment; filename=phys-dim.mkxl Content-Type: application/octet-stream; x-unix-mode=0644; name="phys-dim.mkxl" Content-Transfer-Encoding: quoted-printable %D=20\module=0A%D=20=20=20[=20=20=20=20=20=20=20file=3Dphys-dim,=0A%D=20=20= =20=20=20=20=20=20version=3D2011-06-13,=20%=20was=20digits=20and=20units=20= 1997.03.19,=0A%D=20=20=20=20=20=20=20=20=20=20title=3D\CONTEXT\=20= Physics,=0A%D=20=20=20=20=20=20=20subtitle=3DDigits=20and=20Units,=0A%D=20= =20=20=20=20=20=20=20=20author=3D{Hans=20Hagen},=0A%D=20=20=20=20=20=20=20= =20=20=20=20date=3D\currentdate,=0A%D=20=20=20=20=20=20copyright=3D{PRAGMA= =20ADE=20\&=20\CONTEXT\=20Development=20Team}]=0A%C=0A%C=20This=20module=20= is=20part=20of=20the=20\CONTEXT\=20macro||package=20and=20is=0A%C=20= therefore=20copyrighted=20by=20\PRAGMA.=20See=20mreadme.pdf=20for=0A%C=20= details.=0A=0A\registerctxluafile{phys-dim}{}=0A=0A%=20TAGGING=20NEEDS=20= CHECKING=20...=20WILL=20DO=20WHEN=20PARSER=20IS=20OK=0A=0A\unprotect=0A=0A= %D=20\macros=0A%D=20=20=20{digits,=20setdigitmode,=20setdigitsign}=0A%D=0A= %D=20This=20is=20an=20update=20of=20the=20\MKII\=20digits=20mechanism.=20= Beware,=20space=20delimited=20mode=20is=0A%D=20now=20resticted!=0A%D=0A= %D=20Depending=20on=20the=20digit=20mode=20the=20command=20\type=20= {\digits}=20normalizes=20number=0A%D=20patterns=20depending=20on=20the=20= language=20set.=0A%D=0A%D=20\starttyping=0A%D=20This=20will=20never=20be=20= a=20\digits{1.000.000}=20seller.=0A%D=20\stoptyping=0A%D=0A%D=20We=20= still=20support=20the=20space=20delimited=20case=20but=20this=20is=20= only=20for=20special=20purposes.=0A%D=20When=20used=20in=20the=20text,=20= you'd=20better=20use=20the=20argument=20variant.=0A%D=0A%D=20= \startbuffer=0A%D=201=20\setdigitmode=20{1}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=202=20\setdigitmode=20{2}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=203=20\setdigitmode=20{3}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=204=20\setdigitmode=20{4}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=205=20\setdigitmode=20{5}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=206=20\setdigitmode=20{6}=20\setdigitorder{0}=20= \digits=20{12.345,90}=0A%D=201=20\setdigitmode=20{1}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=202=20\setdigitmode=20{2}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=203=20\setdigitmode=20{3}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=204=20\setdigitmode=20{4}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=205=20\setdigitmode=20{5}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=206=20\setdigitmode=20{6}=20\setdigitorder{1}=20= \digits=20{12.345,90}=0A%D=20\stopbuffer=0A%D=0A%D=20\typebuffer=0A%D=0A= %D=20This=20is=20typeset=20as:=0A%D=0A%D=20\startlines=20\getbuffer=20= \stoplines=0A%D=0A%D=20The=20sign=20can=20be=20typeset=20as=20is=20or=20= within=20the=20space=20of=20a=20digit.=0A%D=0A%D=20\startbuffer=0A%D=20= \setdigitsign=200=20\digits=20{+12.345,90}=0A%D=20\setdigitsign=201=20= \digits=20{+12.345,90}=0A%D=20\stopbuffer=0A%D=0A%D=20\typebuffer=0A%D=0A= %D=20This=20is=20typset=20as:=0A%D=0A%D=20\startlines=0A%D=20\getbuffer=0A= %D=20\stoplines=0A%D=0A%D=20The=20digit=20modes=20are:=0A%D=0A%D=20= \startitemize[n,packed]=0A%D=20\item=20periods/comma=0A%D=20\item=20= commas/period=0A%D=20\item=20thinmuskips/comma=0A%D=20\item=20= thinmuskips/period=0A%D=20\item=20thickmuskips/comma=0A%D=20\item=20= thickmuskips/period=0A%D=20\stopitemize=0A%D=0A%D=20The=20digit=20parser=20= handles=20a=20bunch=20of=20special=20characters=20as=20well=20as=20= different=0A%D=20formats.=20We=20strongly=20suggest=20you=20to=20use=20= the=20grouped=20call.=0A%D=0A%D=20\starttabulate[|l|l|l|]=0A%D=20\NC=20= \type{.}=20=20\NC=20,=20.=20=20=20=20=20=20=20=20=20=20=20\NC=20comma=20= or=20period=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{,}=20=20\NC=20,=20= .=20=20=20=20=20=20=20=20=20=20=20\NC=20comma=20or=20period=20=20=20=20=20= \NC=20\NR=0A%D=20\NC=20\type{:}=20=20\NC=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20\NC=20invisible=20period=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \type{;}=20=20\NC=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20= invisible=20comma=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{_}=20=20\NC=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20invisible=20space=20=20=20= =20=20\NC=20\NR=0A%D=20\NC=20\type{/}=20=20\NC=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20\NC=20invisible=20sign=20=20=20=20=20=20\NC=20\NR=0A%D=20= \NC=20\type{-}=20=20\NC=20$-$=20=20=20=20=20=20=20=20=20=20=20\NC=20= minus=20sign=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \type{+}=20=20\NC=20$+$=20=20=20=20=20=20=20=20=20=20=20\NC=20plus=20= sign=20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{//}=20= \NC=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20invisible=20high=20= sign=20\NC=20\NR=0A%D=20\NC=20\type{--}=20\NC=20$\negative$=20=20=20\NC=20= high=20minus=20sign=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{++}=20\NC=20= $\positive$=20=20=20\NC=20high=20plus=20sign=20=20=20=20=20=20\NC=20\NR=0A= %D=20\NC=20\type{=3D}=20=20\NC=20$\zeroamount$=20\NC=20zero=20padding=20=20= =20=20=20=20=20=20\NC=20\NR=0A%D=20\stoptabulate=0A%D=0A%D=20These=20= triggers=20are=20used=20in=20the=20following=20examples.=0A%D=0A%D=20= \starttabulate[|l|r|]=0A%D=20\NC=20\type{1}=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20\NC=20\ruledhbox{\strut\digits{1}}=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A= %D=20\NC=20\type{12}=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20\NC=20\ruledhbox{\strut\digits{12}}=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{12.34}=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{12.34}}=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{123,456}=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20\NC=20\ruledhbox{\strut\digits{123,456}}=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \type{123,456.78}=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{123,456.78}}=20=20=20=20=20=20=20=20=20=20=20=20= =20\NC=20\NR=0A%D=20\NC=20\type{12,34}=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20\NC=20\ruledhbox{\strut\digits{12,34}}=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{.1234}=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{.1234}}=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20\NC=20\NR=0A%D=20\NC=20\type{1234}=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20\NC=20\ruledhbox{\strut\digits{1234}}=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \type{123,456.78^9}=20=20=20=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{123,456.78^9}}=20=20=20=20=20=20=20=20=20=20=20= \NC=20\NR=0A%D=20\NC=20\type{123,456.78e9}=20=20=20=20=20=20=20=20=20=20=20= \NC=20\ruledhbox{\strut\digits{123,456.78e9}}=20=20=20=20=20=20=20=20=20=20= =20\NC=20\NR=0A%D=20\NC=20\type{/123,456.78e-9}=20=20=20=20=20=20=20=20=20= \NC=20\ruledhbox{\strut\digits{/123,456.78e-9}}=20=20=20=20=20=20=20=20=20= \NC=20\NR=0A%D=20\NC=20\type{-123,456.78e-9}=20=20=20=20=20=20=20=20=20= \NC=20\ruledhbox{\strut\digits{-123,456.78e-9}}=20=20=20=20=20=20=20=20=20= \NC=20\NR=0A%D=20\NC=20\type{+123,456.78e-9}=20=20=20=20=20=20=20=20=20= \NC=20\ruledhbox{\strut\digits{+123,456.78e-9}}=20=20=20=20=20=20=20=20=20= \NC=20\NR=0A%D=20\NC=20\type{//123,456.78e-9}=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{//123,456.78e-9}}=20=20=20=20=20=20=20=20\NC=20= \NR=0A%D=20\NC=20\type{--123,456.78e-9}=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{--123,456.78e-9}}=20=20=20=20=20=20=20=20\NC=20= \NR=0A%D=20\NC=20\type{++123,456.78e-9}=20=20=20=20=20=20=20=20\NC=20= \ruledhbox{\strut\digits{++123,456.78e-9}}=20=20=20=20=20=20=20=20\NC=20= \NR=0A%D=20\NC=20\type{___,___,123,456,789.00}=20\NC=20= \ruledhbox{\strut\digits{___,___,123,456,789.00}}=20\NC=20\NR=0A%D=20\NC=20= \type{___,___,_12,345,678.=3D=3D}=20\NC=20= \ruledhbox{\strut\digits{___,___,_12,345,678.=3D=3D}}=20\NC=20\NR=0A%D=20= \stoptabulate=0A=0A\newconstant\c_phys_digits_order=0A= \newconstant\c_phys_digits_method=0A\newconstant\c_phys_digits_sign=20=20= %=20we=20has=20sized=20(text=20script=20scriptscript)=0A=0A= \permanent\protected\def\setdigitmethod#1{\c_phys_digits_method=20= #1\relax}=0A\permanent\protected\def\setdigitsign=20=20= #1{\c_phys_digits_sign=20=20=20#1\relax}=0A= \permanent\protected\def\setdigitorder=20#1{\c_phys_digits_order=20=20= #1\relax}=0A=0A\aliased\let\setdigitmode\setdigitmethod=20%=20= compatibility=0A=0A\def\phys_digits_normalized=20%=20we=20could=20= calculate=20once=20and=20remember=0A=20=20{\ifcase\c_phys_digits_sign=0A=20= =20=20=20=20\expandafter\secondoftwoarguments=0A=20=20=20\orelse\ifmmode=0A= =20=20=20=20=20\expandafter\phys_digits_normalized_math=0A=20=20=20\else=0A= =20=20=20=20=20\expandafter\phys_digits_normalized_text=0A=20=20=20\fi}=0A= =0A\def\phys_digits_normalized_math#1#2%=0A=20=20= {\setbox\scratchbox\hbox{\normalstartimath\Ustack{#1}\normalstopimath}%=0A= =20=20=20\hbox=20to=20= \wd\scratchbox{\hss{\normalstartimath\Ustack{#2}\normalstopimath}\hss}}=0A= =0A\def\phys_digits_normalized_text#1#2%=0A=20=20= {\setbox\scratchbox\hbox{#1}%=0A=20=20=20\hbox=20to=20= \wd\scratchbox{\hss#2\hss}}=0A=0A\def\phys_digits_raised=0A=20=20= {\ifmmode=0A=20=20=20=20=20\expandafter\normalsuperscript=0A=20=20=20= \else=0A=20=20=20=20=20\expandafter\unitshigh=0A=20=20=20\fi}=0A=0A%=20= we=20could=20use=20a=20symbolset=20but=20how=20many=20symbols=20are=20= there=20?=0A=0A%=20\definesymbol[units][times][\times]=0A%=20= \definesymbol[units][times][\cdots]=0A=0A%=20= \def\digitstimessymbol{\symbol[units][times]}=0A=0A%=20= \definesymbol[units][times][\times]=0A%=20= \definesymbol[units][times][\cdots]=0A%=20= \definesymbol[units][times][\invisibletimes]=0A%=20= \definesymbol[units][times][\ifmmode\cdot\else\kern.2\emwidth\cdot\kern.2\= emwidth\fi]=0A=0A\permanent\protected\def\digitstextbinop#1%=20assumes=20= preceding=0A=20=20{\ifmmode\mathord#1\else\nobreak#1\fi}=20%=20Removed=20= space=20around=20binop=20(\times=20or=20\cdot)=20in=20\units=20-GP=0A=20=20= %{\ifmmode#1\else\fourperemspace\nobreak#1\fourperemspace\fi}=20%=20This=20= is=20the=20old=20line=20with=20spaces=20-GP=0A=0A= \frozen\def\digitstimessymbol{\digitstextbinop\times}=0A=0A= \frozen\protected\def\digitszeropadding=20=20=20{\hphantom{0}}=0A= \frozen\protected\def\digitsnegative=20=20=20=20=20=20= {\phys_digits_normalized{0}{\mathematics{\negative}}}=0A= \frozen\protected\def\digitspositive=20=20=20=20=20=20= {\phys_digits_normalized{0}{\mathematics{\positive}}}=0A= \frozen\protected\def\digitsminus=20=20=20=20=20=20=20=20=20= {\phys_digits_normalized{0}{\mathminus}}=0A= \frozen\protected\def\digitsplus=20=20=20=20=20=20=20=20=20=20= {\phys_digits_normalized{0}{\mathplus}}=0A= \frozen\protected\def\digitsplusminus=20=20=20=20=20= {\phys_digits_normalized{0}{\mathplusminus}}=0A= \frozen\protected\def\digitsspace=20=20=20=20=20=20=20=20=20= {\hphantom{0}}=0A=20=20=20=20=20=20=20= \protected\def\digitsseparatorspace{\hphantom{.}}=0A= \frozen\protected\def\digitssignspace=20=20=20=20=20= {\hphantom{\digitsminus}}=0A\frozen\protected\def\digitshighspace=20=20=20= =20=20{\hphantom{\digitspositive}}=0A\frozen\protected\def\digitspower=20= =20=20=20=20=20=20#1{\digitstimessymbol10\phys_digits_raised{#1}}=0A= \frozen\protected\def\digitspowerplus=20=20=20= #1{\digitstimessymbol10\phys_digits_raised{\digitsplus#1}}=0A= \frozen\protected\def\digitspowerminus=20=20= #1{\digitstimessymbol10\phys_digits_raised{\digitsminus#1}}=0A= \frozen\protected\def\digitsdigit=20=20=20=20=20=20=20#1{#1}=0A=0A= \frozen\protected\def\normaldigitscommasymbol=20{,}=0A= \frozen\protected\def\normaldigitsperiodsymbol{.}=0A=0A= \frozen\let\normaldigitsseparatorspace\digitsseparatorspace=0A=0A= \installcorenamespace{digitscomma}=0A\installcorenamespace{digitsperiod}=0A= \installcorenamespace{digitsspace}=0A=0A\letcsname\??digitscomma=20= 0\endcsname\normaldigitscommasymbol=0A= \letcsname\??digitsperiod0\endcsname\normaldigitsperiodsymbol=0A= \letcsname\??digitsspace=200\endcsname\normaldigitsseparatorspace=0A=0A= \letcsname\??digitscomma=201\endcsname\normaldigitsperiodsymbol=0A= \letcsname\??digitsperiod1\endcsname\normaldigitscommasymbol=0A= \letcsname\??digitsspace=201\endcsname\normaldigitsseparatorspace=0A=0A= \letcsname\??digitscomma=202\endcsname\normaldigitscommasymbol=0A= \letcsname\??digitsperiod2\endcsname\normaldigitsperiodsymbol=0A= \letcsname\??digitsspace=202\endcsname\normaldigitsseparatorspace=0A=0A= \letcsname\??digitscomma=203\endcsname\thinspace=0A= \letcsname\??digitsperiod3\endcsname\normaldigitscommasymbol=0A= \letcsname\??digitsspace=203\endcsname\thinspace=0A=0A= \letcsname\??digitscomma=204\endcsname\thinspace=0A= \letcsname\??digitsperiod4\endcsname\normaldigitsperiodsymbol=0A= \letcsname\??digitsspace=204\endcsname\thinspace=0A=0A= \letcsname\??digitscomma=205\endcsname\thickspace=0A= \letcsname\??digitsperiod5\endcsname\normaldigitscommasymbol=0A= \letcsname\??digitsspace=205\endcsname\thickspace=0A=0A= \letcsname\??digitscomma=206\endcsname\thickspace=0A= \letcsname\??digitsperiod6\endcsname\normaldigitsperiodsymbol=0A= \letcsname\??digitsspace=206\endcsname\thickspace=0A=0A= \frozen\protected\def\digitscommasymbol=20=20=20=20=20=20=20= {\csname\??digitscomma=20\number\c_phys_digits_method\endcsname}=0A= \frozen\protected\def\digitsperiodsymbol=20=20=20=20=20=20= {\csname\??digitsperiod\number\c_phys_digits_method\endcsname}=0A= \frozen\protected\def\digitsseparatorspace=20=20=20=20= {\csname\??digitsspace=20\number\c_phys_digits_method\endcsname}=0A=0A= \frozen\protected\def\digitsfinalcomma=20=20=20=20=20=20=20=20= {\digitsperiodsymbol}=20%=20more=20for=20tracing=0A= \frozen\protected\def\digitsfinalperiod=20=20=20=20=20=20=20= {\digitsperiodsymbol}=20%=20more=20for=20tracing=0A= \frozen\protected\def\digitsintermediatecomma=20{\digitscommasymbol=20}=20= %=20more=20for=20tracing=0A= \frozen\protected\def\digitsintermediateperiod{\digitscommasymbol=20}=20= %=20more=20for=20tracing=0A=0A%D=20The=20user=20macro:=0A=0A= \protected\def\phys_digits_indeed#1%=0A=20=20{\dontleavehmode=0A=20=20=20= \begingroup=0A=20=20=20= \ifcase\c_phys_digits_order\expandafter\clf_digits_normal\else\expandafter= \clf_digits_reverse\fi{\detokenize{#1}}%=0A=20=20=20\endgroup=0A=20=20=20= \settrue\c_phys_units_dospace}=0A=0A\permanent\protected\def\digits=0A=20= =20{\doifelsenextbgroup\phys_digits_argument\phys_digits_spaced}=0A=0A= \def\phys_digits_argument#1%=0A=20=20{\phys_digits_indeed{#1}}=0A=0A= \def\phys_digits_spaced#1=20%=20space=20delimited=0A=20=20= {\phys_digits_indeed{#1}}=0A=0A%D=20\macros=0A%D=20=20=20{unit}=0A%D=0A= %D=20We=20have=20been=20using=20the=20units=20module=20(and=20its=20= predecessor)=20for=20over=20a=20decade=20now=0A%D=20but=20when=20we=20= moved=20on=20to=20\LUATEX\=20a=20variant=20was=20prototyped=20that=20= permits=20a=20less=0A%D=20texie=20coding.=20I=20finally=20picked=20up=20= that=20thread=20and=20cleaned=20up=20the=20code=20a=20bit=20so=0A%D=20= users=20can=20now=20play=20with=20it.=20(The=20main=20reason=20was=20= that=20I=20wanted=20to=20test=0A%D=20exporting.)=0A%D=0A%D=20= \startbuffer=0A%D=2001:=20$10\unit{km/h}$=0A%D=2002:=20$\unit{10=20=20=20= =20=20=20km/h}$=0A%D=2003:=20\unit{km/h}=0A%D=2004:=20\unit{10=20km/h}=0A= %D=2005:=20\unit{10=20km/h}=0A%D=2006:=20\unit{~1=20km/h}=0A%D=2007:=20= 10\unit{km/h}=0A%D=2008:=2010=20\unit{km/h}=0A%D=2009:=20$10=20= \unit{km/h}$=0A%D=2010:=2010=20\unit{KiloMeter/Hour}=0A%D=2011:=2010=20= \unit{kilometer/hour}=0A%D=2012:=2010=20\unit{km/h}=0A%D=2013:=2010=20= \unit{kilometer=20per=20hour}=0A%D=2014:=2010=20\unit{km=20/=20h}=0A%D=20= 15:=2010=20\unit{=20km=20/=20h=20}=0A%D=2016:=2010=20\unit{km/ms2}=0A%D=20= 17:=2010=20\unit{meter=20per=20second}=0A%D=2018:=2010=20\unit{cubic=20= meter}=0A%D=2019:=2010=20\unit{cubic=20meter=20per=20second}=0A%D=2021:=20= 10=20\unit{cubic=20meter=20/=20second}=0A%D=2022:=20$10=20\unit{cubic=20= meter=20/=20second}$=0A%D=2023:=2030=20\unit{kilo=20pascal=20}=0A%D=20= 24:=2030=20\unit{kilo=20pascal=20square=20meter=20/=20second}=0A%D=2025:=20= 30=20\unit{kilo=20pascal=20square=20meter=20/=20kelvin=20second}=0A%D=20= 26:=20\unit{30=20kilo=20pascal=20square=20meter=20/=20kelvin=20second}=0A= %D=2027:=20$30=20\unit{kilo=20pascal=20square=20meter=20/=20kelvin=20= second=20}$=0A%D=2028:=2030=20\unit{crap}=0A%D=2029:=2030=20\unit{AC}=0A= %D=2030:=20$\frac{10=20\unit{m/s}}{20=20\unit{m/s}}=20$=0A%D=2031:=20= {\ss=2030=20\unit{kilo=20pascal=20square=20meter=20/=20second=20kelvin}}=0A= %D=2032:=20\unit{123.22^-3=20km/s}=0A%D=2033:=20\unit{123.22e-3=20km/s}=0A= %D=20\stopbuffer=0A%D=0A%D=20\typebuffer=0A%D=0A%D=20Result:=20= \startlines=20\getbuffer=20\stoplines=0A%D=0A%D=20Depending=20on=20needs=20= we=20can=20add=20more=20tweaks=20(also=20depends=20on=20to=20what=20= extent=20we=20need=0A%D=20to=20be=20compatible=20with=20\MKII.=0A%D=0A%D=20= Formatting=20is=20supported=20too:=0A%D=0A%D=20\startbuffer=0A%D=20= \starttabulate[|l|l|l|]=0A%D=20\HL=0A%D=20\NC=20\unit{10=20kilo=20gram}=20= =20=20=20=20=20=20\NC=20\digits{10}=20=20=20=20=20=20=20=20\NC=20= \unit{10}=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20\unit{1=20= kilogram}=20=20=20=20=20=20=20=20=20\NC=20\digits{1}=20=20=20=20=20=20=20= =20=20\NC=20\unit{1}=20=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \unit{0.1=20kilogram}=20=20=20=20=20=20=20\NC=20\digits{0.1}=20=20=20=20=20= =20=20\NC=20\unit{0.1}=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \unit{1.1=20kilogram}=20=20=20=20=20=20=20\NC=20\digits{1.1}=20=20=20=20=20= =20=20\NC=20\unit{1.1}=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\NC=20= \unit{11=20kilogram}=20=20=20=20=20=20=20=20\NC=20\digits{11}=20=20=20=20= =20=20=20=20\NC=20\unit{11}=20=20=20=20=20=20=20=20\NC=20\NR=0A%D=20\HL=0A= %D=20\NC=20\unit{00,000.10=20kilogram}=20\NC=20\digits{00,000.10}=20\NC=20= \unit{00,000.10}=20\NC=20\NR=0A%D=20\NC=20\unit{@@,@@0.10=20kilogram}=20= \NC=20\digits{@@,@@0.10}=20\NC=20\unit{@@,@@0.10}=20\NC=20\NR=0A%D=20\NC=20= \unit{__,___.10=20kilogram}=20\NC=20\digits{__,___.10}=20\NC=20= \unit{__,___.10}=20\NC=20\NR=0A%D=20\NC=20\unit{__,__0:10=20kilogram}=20= \NC=20\digits{__,__0:10}=20\NC=20\unit{__,__0:10}=20\NC=20\NR=0A%D=20\NC=20= \unit{__,___:10=20kilogram}=20\NC=20\digits{__,___:10}=20\NC=20= \unit{__,___:10}=20\NC=20\NR=0A%D=20\HL=0A%D=20\stoptabulate=0A%D=20= \stopbuffer=0A%D=0A%D=20\typebuffer=20\getbuffer=0A%D=0A%D=20Punctuation=20= can=20be=20configures=20usiing=20\type=20{method}:=0A%D=0A%D=20= \startbuffer=0A%D=20\starttabulate[|l|l|l|]=0A%D=20\HL=0A%D=20\NC=20=20=20= \NC=20\setupunits[method=3D0]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D0]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=201=20\NC=20\setupunits[method=3D1]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D1]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=202=20\NC=20\setupunits[method=3D2]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D2]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=203=20\NC=20\setupunits[method=3D3]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D3]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=204=20\NC=20\setupunits[method=3D4]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D4]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=205=20\NC=20\setupunits[method=3D5]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D5]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \NC=206=20\NC=20\setupunits[method=3D6]\unit{00,000.10=20kilogram}=20\NC=20= \setupunits[method=3D6]\unit{@@,@@0.10=20kilogram}=20\NC=20\NR=0A%D=20= \HL=0A%D=20\stoptabulate=0A%D=20\stopbuffer=0A%D=0A%D=20\typebuffer=20= \getbuffer=0A=0A%=20only=20a=20space=20when=20a=20number=20is=20part=20= of=20the=20unit=0A=0A\installcorenamespace=20{unit}=0A= \installcorenamespace=20{unitseparator}=0A\installcorenamespace=20= {unitspace}=0A=0A\installcommandhandler=20\??unit=20{unit}=20\??unit=0A=0A= \setupunit=0A=20=20[\c!alternative=3D,=20=20=20=20=20=20=20=20=20=20=20=20= =20=20%=20done:=20text=0A=20=20=20\c!separator=3D\v!normal,=20=20=20=20=20= =20=20%=20done:=20cdot|big|medium|space=0A=20=20=20= \s!language=3D\currentlanguage,=20%=20done:=20(no=20interface=20yet)=0A=20= =20=20\c!order=3D\v!normal,=20=20=20=20=20=20=20=20=20=20=20%=20,.=20= (reverse:=20.,)=0A=20=20=20\c!method=3D0,=0A=20=20%\c!grid=3D\v!yes,=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20%=20(maybe)=0A=20=20= %\c!style=3D...,=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20%=20= done=0A=20=20%\c!color=3D...,=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20%=20done=0A=20=20%\c!space=3D...,=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20%=20(maybe)=20small=20medium=20big=0A=20=20]=0A=0A= \definehigh[unitshigh][\c!style=3D\txx]=0A\definelow=20[unitslow]=20= [\c!style=3D\txx]=0A=0A\aliased\let\setupunits\setupunit=0A=0A= \newconstant=20=20=20\c_phys_units_mode=20=20=20%=200=3Dtext=201=3Dmath=20= 2=3Dtextinmath=203=3Dmathintext=0A\newconstant=20=20=20= \c_phys_units_state=20=20%=200=3Dstart=201=3Dsuffix=202=3Doperator=20= 3=3Dunit=204=3Dprefix=205=3Dnumber=0A= \newconditional\c_phys_units_quantity=0A= \newconditional\c_phys_units_number=0A= \newconditional\c_phys_units_dospace=0A=0A%=20[\unit=20=20=20{micro=20= ohm}]\par=20%=20=20no=20space=20before=20unit=0A%=20[10\unit=20{micro=20= ohm}]\par=20%=20=20no=20space=20before=20unit=0A%=20[10=20\unit{micro=20= ohm}]\par=20%=20=20=20=20=20space=20before=20unit=0A%=20[=20\unit=20=20= {micro=20ohm}]\par=20%=20=20=20=20=20space=20before=20unit=0A%=20= [\unit{10=20micro=20ohm}]\par=20%=20=20=20=20=20space=20before=20unit=0A=0A= \frozen\protected\def\unitssmallspace=20{\thinspace}=0A= \frozen\protected\def\unitsmediumspace{\medspace}=0A= \frozen\protected\def\unitsbigspace=20=20=20{\thickspace}=0A= \frozen\protected\def\unitsbackspace=20=20{\negthinspace}=0A= \frozen\protected\def\unitsmathspace=20=20= {\ifmmode\mathatomskip\mathdimensioncode\mathdimensioncode\mathstyle\fi}=0A= =0A\permanent\protected\def\installunitsseparator#1#2%=0A=20=20= {\defcsname\??unitseparator#1\endcsname{#2}}=0A=0A= \protected\def\phys_units_separator=0A=20=20= {\ifcsname\??unitseparator\unitparameter\c!separator\endcsname\lastnamedcs= \else\ifmmode\mathord\cdot\else\cdot\fi\fi}=20%=20Made=20\cdot=20an=20= "ord"=20in=20math=20mode=20-GP=0A=0A= \installunitsseparator\v!normal{\ifmmode\mathord\cdot\else\cdot\fi}=20=20= %=20Made=20\cdot=20an=20"ord"=20in=20math=20mode=20-GP=0A= \installunitsseparator\v!big=20=20=20{\unitsbigspace}=0A= \installunitsseparator\v!medium{\unitsmediumspace}=0A= \installunitsseparator\v!small=20{\unitssmallspace}=0A= \installunitsseparator\v!none=20=20{}=0A\installunitsseparator\v!math=20=20= {\unitsmathspace}=0A=0A\permanent\protected\def\installunitsspace#1#2%=0A= =20=20{\defcsname\??unitspace#1\endcsname{#2}}=0A=0A%=20= \protected\def\phys_units_space=0A%=20=20=20{\unskip=20%=20weird,=20why=20= is=20unskip=20needed=0A%=20=20=20=20= \ifcsname\??unitspace\unitparameter\c!space\endcsname\lastnamedcs\else\uni= tsmediumspace\fi}=0A=0A%=20\im{1=20\unit{hour}=2020=20\unit{minute}=2056=20= \unit{second}}=0A%=20\im{\unit{1=20hour}=20\unit{20=20minute}=2056=20= \unit{second}}=0A=0A\protected\def\phys_units_space=0A=20=20{\ifmmode=0A=20= =20=20=20=20\thinspace=20%=20let=20the=20atoms=20do=20the=20work.=20= Right=20now=20atoms=20aren't=20doing=20the=20work,=20so=20I=20put=20in=20= a=20\thinspace=20-GP=0A=20=20=20\else=0A=20=20=20=20=20\unskip=20%=20= weird,=20why=20is=20unskip=20needed=0A=20=20=20=20=20= \ifcsname\??unitspace\unitparameter\c!space\endcsname\lastnamedcs\else\uni= tsmediumspace\fi=0A=20=20=20\fi}=0A=0A= \installunitsspace\v!normal{\unitsmediumspace}=0A= \installunitsspace\v!big=20=20=20{\unitsbigspace}=0A= \installunitsspace\v!medium{\unitsmediumspace}=0A= \installunitsspace\v!small=20{\unitssmallspace}=0A= \installunitsspace\v!none=20=20{}=0A\installunitsspace\v!math=20=20= {\unitsmathspace}=0A=0A\newtoks=20\everyunits=20%=20we=20keep=20the=20= old=20\units=20command=20so=20we=20need=20a=20longer=20one=0A=0A= \appendtoks=0A=20=20=20=20\disablemathpunctuation=0A=20=20=20=20= \nocharacteralign=0A\to=20\everyunits=0A=0A\appendtoks=0A=20=20=20=20= \frozen\instance\setuevalue\currentunit{\phys_units_direct{\currentunit}}=0A= \to=20\everydefineunit=0A=0A\protected\def\phys_units_direct#1%=0A=20=20= {\begingroup=0A=20=20=20\the\everyunits=0A=20=20=20= \ifdim\lastskip>\zeropoint=0A=20=20=20=20=20= \settrue\c_phys_units_dospace=0A=20=20=20=20=20\removelastskip=0A=20=20=20= \fi=0A=20=20=20\c_phys_digits_method\unitparameter\c!method\relax=0A=20=20= =20\ifmmode\else\dontleavehmode\fi=0A=20=20=20\edef\currentunit{#1}%=0A=20= =20=20\enforced\edef\unitlanguage{\unitparameter\s!language}%=0A=20=20=20= \enforced\let\prefixlanguage\unitlanguage=0A=20=20=20= \enforced\let\operatorlanguage\unitlanguage=0A%=20=20=20=20= \the\everyunits=0A=20=20%\removeunwantedspaces=20%=20not=20ok=20yet=0A=20= =20=20\useunitstyleandcolor\c!style\c!color=0A=20=20=20\ifmmode=0A=20=20=20= =20=20\ifcstok{\unitparameter\c!alternative}\v!text=0A=20=20=20=20=20=20=20= \expandafter\expandafter\expandafter\phys_units_direct_text_in_math=0A=20= =20=20=20=20\else=0A=20=20=20=20=20=20=20= \expandafter\expandafter\expandafter\phys_units_direct_math=0A=20=20=20=20= =20\fi=0A=20=20=20\else=0A=20=20=20=20=20= \ifcstok{\unitparameter\c!alternative}\v!mathematics=0A=20=20=20=20=20=20= =20\expandafter\expandafter\expandafter\phys_units_direct_math_in_text=0A= =20=20=20=20=20\else=0A=20=20=20=20=20=20=20= \expandafter\expandafter\expandafter\phys_units_direct_text=0A=20=20=20=20= =20\fi=0A=20=20=20\fi}=0A=0A= \protected\def\phys_units_direct_text_in_math#1%=0A=20=20{\mathtext{%=0A=20= =20=20=20=20\c_phys_units_mode\plustwo=0A=20=20=20=20=20= \phys_units_indeed{#1}%=0A=20=20=20=20=20\phys_units_finish=0A=20=20=20= }%=0A=20=20=20\endgroup}=0A=0A\protected\def\phys_units_direct_math#1%=0A= =20=20{\c_phys_units_mode\plusone=0A=20=20=20\rm\tf=20%=20slow=0A=20=20=20= \mathtf=0A=20=20=20\phys_units_indeed{#1}%=0A=20=20=20\phys_units_finish=0A= =20=20=20\endgroup}=0A=0A\protected\def\phys_units_direct_text#1%=0A=20=20= {\phys_units_indeed{#1}%=0A=20=20=20\phys_units_finish=0A=20=20=20= \endgroup}=0A=0A\protected\def\phys_units_direct_math_in_text#1%=0A=20=20= {\removeunwantedspaces=20%=20brr=0A=20=20=20\startimath=0A=20=20=20= \c_phys_units_mode\plusthree=0A=20=20=20\rm\tf=0A=20=20=20\mathtf=0A=20=20= =20\phys_units_indeed{#1}%=0A=20=20=20\phys_units_finish=0A=20=20=20= \stopimath=0A=20=20=20\endgroup}=0A=0A= \protected\def\phys_units_direct_nested#1#2%=0A=20=20= {\phys_units_indeed{#2}}=0A=0A\appendtoks=0A=20=20=20=20= \let\phys_units_direct\phys_units_direct_nested=0A\to=20\everyunits=0A=0A= \protected\def\phys_units_indeed#1%=0A=20=20= {\edef\p_order{\unitparameter\c!order}%=0A=20=20=20= \ifx\p_order\v!reverse\expandafter\clf_unit_reverse\else\expandafter\clf_u= nit_normal\fi{\detokenize{#1}}}=0A=0A= \permanent\protected\def\digitstextbinnop#1%=0A=20=20= {\ifmmode#1\else#1\fourperemspace\fi}=0A=0A= \permanent\protected\def\unitsPUS#1#2#3{\phys_units_next\prefixtext{#1}\un= ittext{#2}\unitsraise{\suffixtext{#3}}\c_phys_units_state\plusone}=20%=20= suffix=0A\permanent\protected\def\unitsPU=20=20=20= #1#2{\phys_units_next\prefixtext{#1}\unittext{#2}\c_phys_units_state\plust= hree}=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20%=20unit=0A\permanent\protected\def\unitsPS=20=20=20= #1#2{\phys_units_next\prefixtext{#1}\unitsraise{\suffixtext{#2}}\c_phys_un= its_state\plusone}=20=20=20=20=20=20=20=20=20=20=20=20=20=20%=20suffix=0A= \permanent\protected\def\unitsUS=20=20=20= #1#2{\phys_units_next\unittext{#1}\unitsraise{\suffixtext{#2}}\c_phys_unit= s_state\plusone}=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20%=20= suffix=0A\permanent\protected\def\unitsP=20=20=20=20=20=20= #1{\phys_units_next\prefixtext{#1}1\c_phys_units_state\plusfour}=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20%=20prefix=0A= \permanent\protected\def\unitsU=20=20=20=20=20=20= #1{\phys_units_next\unittext{#1}\c_phys_units_state\plusthree}=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20%=20unit=0A= \permanent\protected\def\unitsS=20=20=20=20=20=20= #1{\phys_units_start{}\unitsraise{\suffixtext{#1}}\c_phys_units_state\plus= one}=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20%=20suffix=0A\permanent\protected\def\unitsO=20=20=20=20=20=20= #1{\phys_units_start\operatortext{#1}\c_phys_units_state\plustwo}=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20%=20operator=0A= %permanent\protected\def\unitsN=20=20=20=20=20=20= #1{\phys_units_start#1\c_phys_units_state\plusfive}=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20%=20number=0A= \permanent\protected\def\unitsC=20=20=20=20=20=20= #1{\removeunwantedspaces\unittext{#1}\c_phys_units_state\plussix}=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20%=20connected=0A= \permanent\protected\def\unitsQ=20=20=20=20=20=20= #1{\removeunwantedspaces\unitslower{#1}\c_phys_units_state\zerocount}=0A= \permanent\protected\def\unitsR=20=20=20=20#1#2{%=20todo:=20tagging=0A=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20\ifmmode=0A=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20#2%=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20\orelse\ifnum#1=3D\plusone=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20\digitstextbinop{#2}%=20before=20and=20after=0A=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20\else=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20\digitstextbinnop{#2}%=20after=0A=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20\fi=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= \c_phys_units_state\zerocount=0A=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20\setfalse\c_phys_units_dospace=0A=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20\setfalse\c_phys_units_number=0A=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20\setfalse\c_phys_units_quantity}=0A= \permanent\protected\def\unitsRPM=20=20=20=20=20=20{\unitsR\plusone=20=20= {=C2=B1}}=20%=20todo:=20symbols=0A\permanent\protected\def\unitsRTO=20=20= =20=20=20=20{\unitsR\plusone=20=20{=E2=80=93}}=20%=20todo:=20symbols=0A= \permanent\protected\def\unitsRabout=20=20=20{\unitsR\zerocount{=C2=B1}}=20= %=20todo:=20symbols=0A\permanent\protected\def\unitsPopen=20=20=20=20{(}=0A= \permanent\protected\def\unitsPclose=20=20=20{)}=0A= \permanent\protected\def\unitrange=20=20=20#1{}=0A=0A%=20Fonts=20can=20= have=20a=20celsius=20and=20lack=20a=20fahrenheit=20symbol=20and=20as=20= we=20want=20to=20be=0A%=20consistent=20so=20we=20check=20for=20the=20= counterparts=20as=20well.=20It's=20slow=20but=20ok.=20Of=20course=0A%=20= we=20could=20go=20virtual=20instead.=0A=0A= \permanent\protected\def\phys_units_text_prime=20=20=20=20=20=20= {\textacute}=0A= \permanent\protected\def\phys_units_text_doubleprime{\textacute\kern-.25em= \textacute}=0A\permanent\protected\def\phys_units_text_celsius=20=20=20=20= {=C2=B0C}=0A\permanent\protected\def\phys_units_text_fahrenheit=20{=C2=B0F= }=0A=0A\permanent\protected\def\checkedtextprime=0A=20=20= {\iffontchar\font"2032\relax\iffontchar\font"2033\relax=0A=20=20=20=20=20= =E2=80=B2\else\phys_units_text_prime\fi\else\phys_units_text_prime=0A=20=20= =20\fi}=0A=0A\permanent\protected\def\checkedtextdoubleprime=0A=20=20= {\iffontchar\font"2033\relax\iffontchar\font"2032\relax=0A=20=20=20=20=20= =E2=80=B3\else\phys_units_text_doubleprime\fi\else\phys_units_text_doublep= rime=0A=20=20=20\fi}=0A=0A%=20= \permanent\protected\def\checkedtextcelsius=0A%=20=20=20{\ifmmode=0A%=20=20= =20=20=20=20\phys_units_text_celsius=0A%=20=20=20=20= \orelse\iffontchar\font"2103\relax=0A%=20=20=20=20=20=20= =E2=84=83\else\phys_units_text_celsius=0A%=20=20=20=20\fi}=0A%=0A%=20= \permanent\protected\def\checkedtextfahrenheit=0A%=20=20=20{\ifmmode=0A%=20= =20=20=20=20=20\phys_units_text_fahrenheit=0A%=20=20=20=20= \orelse\iffontchar\font"2109\relax=0A%=20=20=20=20=20=20= =E2=84=89\else\phys_units_text_fahrenheit=0A%=20=20=20=20\fi}=0A%=0A%=20= %=20but,=20as=20users=20don't=20like=20this=20...=0A=0A= \aliased\let\checkedtextcelsius=20=20=20\phys_units_text_celsius=0A= \aliased\let\checkedtextfahrenheit\phys_units_text_fahrenheit=0A=0A= \setelementnature[unit]=20=20=20=20[mixed]=0A= \setelementnature[quantity][mixed]=0A=0A\let\phys_units_finish\relax=0A=0A= \permanent\protected\def\unitsNstartindeed=0A=20=20{\ifmmode=20\else=0A=20= =20=20=20=20\settrue\c_phys_units_quantity=0A=20=20=20=20=20= \dostarttagged\t!quantity\empty=0A=20=20=20=20=20= \settrue\c_phys_units_number=0A=20=20=20=20=20= \dostarttagged\t!number\empty=0A=20=20=20\fi}=0A=0A= \permanent\protected\def\unitsNstop=0A=20=20= {\ifconditional\c_phys_units_number=0A=20=20=20=20=20= \setfalse\c_phys_units_number=0A=20=20=20=20=20\dostoptagged=0A=20=20=20= \fi=0A=20=20=20\c_phys_units_state\plusfive}=0A=0A%=20This=20is=20a=20= hack:=20for=20some=20reason=20\unit=20{micro=20meter}=20like=20patterns=20= give=0A%=20\unitsNstart=20\unitsNstop=20so=20there=20is=20a=20buglet=20= in=20the=20parser=0A=0A%=20\aliased\let\unitsNstartindeed\unitsNstart=0A=0A= \permanent\protected\def\unitsNstart=0A=20=20= {\doifelsenextchar\unitsNstop\gobbleoneargument\unitsNstartindeed}=0A=0A= %=20End=20of=20hack.=0A=0A\permanent\protected\def\unitsNspace=0A=20=20= {\space}=0A=0A\permanent\protected\def\unitsN#1%=0A=20=20= {\unitsNstart#1\unitsNstop}=0A=0A\def\phys_units_start=0A=20=20{\ifmmode=0A= =20=20=20=20=20\dostarttagged\t!maction\t!unit=0A%=20=20=20=20=20= \mathatom=20%=20I=20removed=20this=20because=20the=20correct=20spaces=20= after=20dim=20haven't=20been=20set=20(e.g.=20dimbin,=20dimrel)=20-GP=0A%=20= =20=20=20=20=20=20=20\s!leftclass=20=20\mathdimensioncode=0A%=20=20=20=20= =20=20=20=20\s!rightclass=20\mathdimensioncode=0A=20=20=20=20=20\bgroup=0A= =20=20=20\else=0A=20=20=20=20=20\dostarttagged\t!unit\empty=0A=20=20=20= \fi=0A=20=20=20\let\phys_units_finish\phys_units_stop=0A=20=20=20= \let\phys_units_start\relax}=0A=0A\def\phys_units_stop=0A=20=20= {\ifconditional\c_phys_units_number=0A=20=20=20=20=20= \setfalse\c_phys_units_number=0A=20=20=20=20=20\dostoptagged=0A=20=20=20= \fi=0A=20=20=20\ifconditional\c_phys_units_quantity=0A=20=20=20=20=20= \setfalse\c_phys_units_quantity=0A=20=20=20=20=20\dostoptagged=0A=20=20=20= \fi=0A=20=20=20\dostoptagged=0A=20=20=20\ifmmode=0A=20=20=20=20=20= \egroup=0A=20=20=20\fi}=0A=0A\permanent\def\unitsraise=0A=20=20= {\ifcase\c_phys_units_mode=0A=20=20=20=20=20\expandafter\unitshigh=0A=20=20= =20\or=0A=20=20=20=20=20\expandafter\normalsuperscript=0A=20=20=20\or=0A=20= =20=20=20=20\expandafter\unitshigh=0A=20=20=20\or=0A=20=20=20=20=20= \expandafter\normalsuperscript=0A=20=20=20\fi}=0A=0A= \permanent\def\unitslower=0A=20=20{\ifcase\c_phys_units_mode=0A=20=20=20=20= =20\expandafter\unitslow=0A=20=20=20\or=0A=20=20=20=20=20= \expandafter\normalsubscript=0A=20=20=20\or=0A=20=20=20=20=20= \expandafter\unitslow=0A=20=20=20\or=0A=20=20=20=20=20= \expandafter\normalsubscript=0A=20=20=20\fi}=0A=0A= \protected\def\phys_units_next=0A=20=20{\ifcase\c_phys_units_state=20%=20= start=0A=20=20=20=20=20\ifconditional\c_phys_units_dospace=0A=20=20=20=20= =20=20%=20\ifdim\lastskip=3D\zeropoint=0A=20=20=20=20=20=20=20=20=20= \phys_units_space=0A=20=20=20=20=20=20%=20\else=0A=20=20=20=20=20=20%=20=20= =20%=20too=20tricky=20...=20we=20could=20remove=20and=20add=0A=20=20=20=20= =20=20%=20\fi=0A=20=20=20=20=20\fi=0A=20=20=20\or=20%=201:=20suffix=0A=20= =20=20=20=20{\phys_units_separator}%=0A=20=20=20\or=20%=202:=20operator=0A= =20=20=20\or=20%=203:=20unit=0A=20=20=20=20=20{\phys_units_separator}%=0A= =20=20=20\or=20%=204:=20prefix=0A=20=20=20\or=20%=205:=20number=0A=20=20=20= =20=20\phys_units_space=0A=20=20=20\or=20%=206:=20symbol=20(connected)=0A= =20=20=20\fi=0A=20=20=20\setfalse\c_phys_units_dospace=0A=20=20=20= \phys_units_start}=0A=0A\permanent\protected\def\unitsTIMES=20%=20Does=20= this=20do=20anything?=20-GP=0A=20=20{\ifnum\c_phys_units_state=3D\plusone=20= %=20suffix=0A=20=20=20\else=0A=20=20=20=20=20\unitssmallspace=0A=20=20=20= \fi=0A=20=20=20\cdot}=20%=20or=20\times=0A=0A= \permanent\protected\def\unitsOUTOF=0A=20=20= {\ifnum\c_phys_units_state=3D\plusone=20%=20suffix=0A=20=20=20\else=0A=20= =20=20=20=20\unitssmallspace=0A=20=20=20\fi=0A=20=20=20:}=0A=0A= \permanent\protected\def\unitsSOLIDUS=0A=20=20= {%\ifnum\c_phys_units_state=3D\plusone=20%=20suffix=20=20%=20Removed=20= three=20lines=20to=20eliminate=20backspace=20before=20/=20-GP=0A=20=20=20= %=20=20\unitsbackspace=0A=20=20=20%\fi=0A=20=20=20{/}%=0A=20=20=20= }%\unitsbackspace}=0A=0A\definelabelclass=20[unit]=20=20=20=20=20[2]=0A= \definelabelclass=20[operator]=20[2]=0A\definelabelclass=20[prefix]=20=20= =20[2]=0A\definelabelclass=20[suffix]=20=20=20[2]=20%=20This=20is=20only=20= a=20label=20because=20we=20want=20to=20show=20them=20in=20a=20table.=0A=0A= \clf_definelabels{prefix}{prefixes}\s!false\relax=0A= \clf_definelabels{unit}{units}\s!false\relax=0A= \clf_definelabels{operator}{operators}\s!false\relax=0A= \clf_definelabels{suffix}{suffixes}\s!false\relax=0A=0A%D=20You=20can=20= define=20additional=20units:=0A%D=0A%D=20\starttyping=0A%D=20= \registerunit=0A%D=20=20=20[unit]=0A%D=20=20=20[point=3Dpoint,=0A%D=20=20= =20=20basepoint=3Dbasepoint,=0A%D=20=20=20=20scaledpoint=3Dscaledpoint,=0A= %D=20=20=20=20didot=3Ddidot,=0A%D=20=20=20=20cicero=3Dcicero]=0A%D=20= \stoptyping=0A%D=0A%D=20Possible=20categories=20are:=20\type=20{prefix},=20= \type=20{unit},=20\type=20{operator},=20\type=0A%D=20{suffix},=20\type=20= {symbol},\type=20{packaged}.=20You=20also=20need=20to=20define=20labels:=0A= %D=0A%D=20\starttyping=0A%D=20\setupunittext=0A%D=20=20=20[point=3Dpt,=0A= %D=20=20=20=20basepoint=3Dbp,=0A%D=20=20=20=20scaledpoint=3Dsp,=0A%D=20=20= =20=20didot=3Ddd,=0A%D=20=20=20=20cicero=3Dcc]=0A%D=20\stoptyping=0A=0A= \permanent\tolerant\protected\def\registerunit[#1]#*[#2]%=20todo:=20= public=20implementer=0A=20=20{\clf_registerunit{#1}{#2}}=0A=0A%D=20You=20= can=20generate=20a=20list=20as=20follows:=0A%D=0A%D=20\starttyping=0A%D=20= \usemodule[phy-01]=0A%D=0A%D=20\ShowUnitsTable=20%=20[prefixes]=0A%D=20= \stoptyping=0A=0A%D=20Now=20we=20define=20the=20standard=20units=20= command:=0A=0A\defineunit=0A=20=20[unit]=0A=0A%D=20Example:=0A%D=0A%D=20= \startbuffer[definitions]=0A%D=20\startluacode=0A%D=20=20=20=20=20= languages.data.labels.prefixes.whatever=20=3D=20{=0A%D=20=20=20=20=20=20=20= =20=20Kilo=20=3D=20"olik"=0A%D=20=20=20=20=20}=0A%D=0A%D=20=20=20=20=20= languages.data.labels.units.whatever=20=3D=20{=0A%D=20=20=20=20=20=20=20=20= =20Meter=20=20=3D=20"retem",=0A%D=20=20=20=20=20=20=20=20=20Second=20=3D=20= "dnoces",=0A%D=20=20=20=20=20}=0A%D=0A%D=20=20=20=20=20= languages.data.labels.operators.whatever=20=3D=20{=0A%D=20=20=20=20=20=20= =20=20=20Solidus=20=3D=20"=20rep=20"=0A%D=20=20=20=20=20}=0A%D=20= \stopluacode=0A%D=20\stopbuffer=0A%D=0A%D=20\startbuffer[sample]=0A%D=20= \startlines=0A%D=20\lunit{10=20km/s}=0A%D=20\lunit{10=20Kilo=20Meter/s}=0A= %D=20\lunit{10=20kilo=20Meter/s}=0A%D=20\lunit{10=20Kilo=20m/s}=0A%D=20= \lunit{10=20k=20Meter/s}=0A%D=20\stoplines=0A%D=20\stopbuffer=0A%D=0A%D=20= \typebuffer[definitions]=20\getbuffer[definitions]=0A%D=0A%D=20= \startbuffer=0A%D=20\typebuffer[sample]=0A%D=0A%D=20\defineunits[lunit]=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20\getbuffer[sample]=0A%D=20= \defineunits[lunit][label=3Dtest]=20=20=20=20=20\getbuffer[sample]=0A%D=20= \defineunits[lunit][label=3Dwhatever]=20\getbuffer[sample]=0A%D=20= \stopbuffer=0A%D=0A%D=20\typebuffer=20\getbuffer=0A%D=0A%D=20Another=20= example:=0A%D=0A%D=20\starttyping=0A%D=20\startluacode=0A%D=20=20=20=20=20= languages.data.labels.units.foo=20=3D=20{=0A%D=20=20=20=20=20=20=20=20=20= Liter=20=3D=20"l"=0A%D=20=20=20=20=20}=0A%D=20=20=20=20=20= languages.data.labels.units.bar=20=3D=20{=0A%D=20=20=20=20=20=20=20=20=20= Liter=20=3D=20"L"=0A%D=20=20=20=20=20}=0A%D=20\stopluacode=0A%D=0A%D=20= \defineunits[lunit]=20=20=20=20=20=20=20=20=20=20=20=20\lunit{10=20= l/s}\par=0A%D=20\defineunits[funit][label=3Dfoo]=20\funit{10=20l/s}\par=0A= %D=20\defineunits[bunit][label=3Dbar]=20\bunit{10=20l/s}\par=0A%D=20= \stoptyping=0A=0A%D=20Bonus:=0A%D=0A%D=20\starttyping=0A%D=20=20=20=20= \pi\=20=3D=20= \hyphenateddigits[\unknown]{3.14159265358979323846264338327950288419716939= 9375105}=20=20\blank=0A%D=20=20=20=20\pi\=20=3D=20= \hyphenateddigits{3.141592653589793238462643383279502884197169399375105}=20= =20=20=20=20=20=20=20=20=20=20=20\blank=0A%D=20x=20$\pi=20=20=3D=20= \hyphenateddigits[\unknown]{3.14159265358979323846264338327950288419716939= 9375105}$=20\blank=0A%D=20x=20$\pi=20=20=3D=20= \hyphenateddigits{3.141592653589793238462643383279502884197169399375105}$=20= =20=20=20=20=20=20=20=20=20=20\blank=0A%D=20\stoptyping=0A=0A= \mutable\protected\def\digitsbreak{\hskip\zeropoint\s!plus\onepoint\relax\= ifmmode\allowbreak\fi}=0A=0A\protect=20\endinput=0A= --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSWYgeW91ciBxdWVzdGlvbiBpcyBvZiBpbnRlcmVz dCB0byBvdGhlcnMgYXMgd2VsbCwgcGxlYXNlIGFkZCBhbiBlbnRyeSB0byB0aGUgV2lraSEKCm1h aWxsaXN0IDogbnRnLWNvbnRleHRAbnRnLm5sIC8gaHR0cHM6Ly93d3cubnRnLm5sL21haWxtYW4v bGlzdGluZm8vbnRnLWNvbnRleHQKd2VicGFnZSAgOiBodHRwczovL3d3dy5wcmFnbWEtYWRlLm5s IC8gaHR0cDovL2NvbnRleHQuYWFuaGV0Lm5ldAphcmNoaXZlICA6IGh0dHBzOi8vYml0YnVja2V0 Lm9yZy9waGcvY29udGV4dC1taXJyb3IvY29tbWl0cy8Kd2lraSAgICAgOiBodHRwczovL2NvbnRl eHRnYXJkZW4ubmV0Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCg== --Apple-Mail=_2AF78AF8-16EA-481C-A785-B0707EF27619--