As the author of siunitx I have some idea about the relative strengths of the various alternatives. There are various things that need to be done for units:
- Semantic input of units, so
\kilo\metre rather than km: this allows special effects such as reformatting fractions 'on the go' (some people prefer to use literal input, and this ideally needs to be supported too).
- Formatting of numbers, for example dividing up digits into groups.
- Correctly presenting awkward symbols such as the micro symbol.
- Setting the font: many guidelines call for units to be in upright roman font with no bold or italic variation.
- Keeping numbers and units together (no space breaking)
Many packages have been written to address one or other aspect of this question. For example, SIunits is good at providing semantic input, whereas SIstyle focusses on correct typesetting but leaves the input to the user. On the other hand, unitsdef sticks to doing only units and does not worry about other aspects.
The aim of the siunitx package is to cover all of the requirements above, and to provide a way that package behaviour can be altered. Thus it uses a series of key-value options that will change how the output is formatted. The options can be applied to the entire document or to an individual piece of input. It also is designed to work in either math or text mode equally well. I have also been very careful to provide up to date advice about the internationally-agreed units in the documentation of siunitx.
As a demo, using the latest release of siunitx the following all show off the package:
\documentclass{article}
\usepackage{siunitx}
\begin{document}
\begin{itemize}
\item \qty{100}{\degreeCelsius}
\item \qty{3e5}{\km\per\s} or \qty[per-mode = symbol]{3e5}{\km\per\s}
\item \unit{\newton\metre\squared\per\kilogram\squared} or
\unit[per-mode = symbol]{\newton\metre\squared\per\kilogram\squared}
\item ( \qty{10}{\kilo\hertz} = \qty{1}{\per\second\tothe{4}} )
\item \qty[parse-numbers = false]{\sin(x)}{\metre}
\end{itemize}
\end{document}

There are a couple of notes to bear in mind if using siunitx. First, it requires e-TeX, which can be an issue with some publishers (even over 10 years after it was finalised!). Secondly, the formatting does take up some time. There are settings to turn things off but it's always the case that working by hand will ultimately be faster. However, the upside of clearer and more flexible input is in my opinion worth it.
One other point is that siunitx is under development, with bug fixes and new features (there is a list for v3.1). In contrast, both SIunits and SIstyle are depreciated: bug fixes only. The units and unitsdef packages have not been updated for many years.
cjwunitsandhepunits. ;-) – Denilson Sá Maia Aug 24 '10 at 20:26hepunitsis an extension ofSIunits. I'm not familiar withcjwunits, but a quick read through the code suggests is a simple approach to providing something likeunitsdef-style units. – Joseph Wright Aug 24 '10 at 20:43siunitxhave any conflict insidealign*environment? I get! Package siunitx Error: Invalid token '\protect ' in numerical input.– Kedar Mhaswade Nov 05 '20 at 00:40siunitx. I've always usedunitsdefand I was going to update tosiunitxsince it's actively maintained, but the two packages are incompatible, so this prevents a smooth transition, forcing me to change every unitsdef usage in a document at once, which could be a bit disruptive. – LorenzoDonati4Ukraine-OnStrike Dec 21 '21 at 15:12siunitxis incompatible withunitsdef: that's a consequence of using the same document command names. – Joseph Wright Dec 21 '21 at 18:57\qtyin the example doesn't seem to be defined (I'm skimming over the manual of v2.8b in the latest TeXlive distro). It seems it was replaced by the\SIcommand. – LorenzoDonati4Ukraine-OnStrike Dec 21 '21 at 19:45\SIwas the standard v2 syntax, for v3 I have moved to using\qty. I suspect you are using a Linux distro TeX live rather than the vanilla one from TUG:siunitxin TeX Live 2021 is currently v3.0.37. – Joseph Wright Dec 22 '21 at 09:03As a demo, using the latest release (v.3.0.37-released on 2021-MM-DD.)...– LorenzoDonati4Ukraine-OnStrike Dec 22 '21 at 10:53