这是我在 2003 年开发的旧软件包。其想法是涵盖国际系统单位 (SI) 和其他类型的单位,大致遵循该文件中的指导方针。
单位应该使用某种直线字体(罗马字体与斜体或倾斜字体),它们不是缩写,也不应该使用句号,并且应该用空格与数量分开(如果印刷上可能的话,可以用一个小空格),也应该与后面的标点符号分开。
因此我定义了一个宏\unit
,它将对以下参数进行排版,\mathrm
处理前面的空格以\,
将其与数量分开,并在后面添加一个额外的空格(如果后面跟着标点符号)。它还采用了一个可选参数来排版指数。
它还有一个附加宏\newunit
,可以为最常见的单位创建命令。
我还尝试让这些命令在普通文本和数学模式下运行。
下面的代码显示了定义的宏和示例:
\documentclass[twocolumn]{article}
\makeatletter
%%% Modified from xspace
\DeclareRobustCommand\uspace{\futurelet\@let@token\@uspace}
\def\@uspace{%
\ifx\@let@token\bgroup\else
\ifx\@let@token\egroup\else
\ifx\@let@token\/\else
\ifx\@let@token\ \else
\ifx\@let@token~\else
\ifx\@let@token.\,\else
\ifx\@let@token!\,\else
\ifx\@let@token,\,\else
\ifx\@let@token:\,\else
\ifx\@let@token;\,\else
\ifx\@let@token?\,\else
\ifx\@let@token/\else
\ifx\@let@token'\else
\ifx\@let@token)\,\else
\ifx\@let@token-\else
\ifx\@let@token\@xobeysp\else
\ifx\@let@token\space\else
\ifx\@let@token\@sptoken\else
\space
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
\newcommand\unit[1]{\def\@tempa{#1}\unit@}
\newcommand\unit@[1][\@empty]{%
\ensuremath{\,%
\textrm{\@tempa}%
\ifx#1\@empty\else
^{#1}\fi}%
\uspace}
\newcommand\newunit[2]{%
\@namedef{#1}{\unit{#2}}}
\newcommand\degree{%
\ensuremath{^\circ}}
\makeatother
% SI official and common derivated units
\newunit{m}{m}
\newunit{kg}{kg}
\newunit{sec}{s}
\newunit{amp}{A}
\newunit{ohm}{$\Omega$}
\newunit{kelvin}{\degree K}
\newunit{celcius}{\degree C}
\begin{document}
\newunit{cm}{cm}
One inch is 2.54\cm and one square inch is 6.4516\cm[2].
\[(2.54\cm)^2=6.4516\cm[2]\]
\newunit{farenheit}{\degree F}
Water freezes at 32\farenheit and boils at 212\farenheit.
\[100\celcius=212\farenheit-32\farenheit\]
International unit system defines the Ampere (\amp) and the
second (\sec), however it does ot define the Culomb (\unit{C})
prefering the compund Ampere-second (\amp\sec).
(Although it should look as \unit{As}.)
\[1\unit{C} = 1\amp\sec = 1\unit{As}.\]
If a tension of 12\unit{V} on a resistor of 15\ohm will produce
a current of 0.8\amp.
\[\frac{12\unit{V}}{15\ohm}=0.8\amp\]
The gravitational field on Eath's surface is 1\unit{g}, and this
is roughly equal to 9.8\unit{N}/\kg or 32\unit{ft}/\sec[2].
\[1\unit{g} \simeq 9.8\frac{\unit{N}}{\kg}
= 9.8\m\sec[-2] \simeq 32\frac{\unit{ft}}{\sec[2]}\]
\end{document}
在大多数运行文本和数学模式下它都能正常工作,但是输出有时会留下太宽的空格,而这些空格不应该是空格。
我可以使用什么样的技巧来消除不需要的空间,同时保留我想要的空间?
我注意到该命令\mathrel
处理空格的方式与我预期的类似\unit
(度数符号前面的空格可能会被分开处理,因为它会影响这些单位的所有实例。)
((我注意到该包siunitx
可能已经完成了我尝试做的事情;虽然使用该包可能会解决我的印刷问题,但它并不能解决我的“我想知道怎么做”的问题。))