Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thermodynamic quantities to si #155

Merged
merged 1 commit into from
Sep 10, 2019
Merged

Add thermodynamic quantities to si #155

merged 1 commit into from
Sep 10, 2019

Conversation

glowforge-opensource
Copy link

@glowforge-opensource glowforge-opensource commented Jun 28, 2019

Add HeatTransfer, ThermalConductivity, HeatCapacity, SpecificHeatCapacity, MolarMass, and MolarEnergy SI derived quantities.

Non-SI units were added in some places where we'd seen them used. If you'd like for these to be extended or reduced, let us know. MolarMass was an exception where we'd not seen any non-SI units in the wild.

Most of these complex quantities are commonly expressed in terms of derived units. We tried to support at least some expression in base units, but prioritized the expression in common units.

Thanks for considering these changes! They were useful to us and we hope others will find them so as well.

@iliekturtles
Copy link
Owner

Awesome! Thanks for PR with all these quantities. I'll plan to start reviewing this weekend. There is a lot of code so it will probably take me a while to work through.

@iliekturtles
Copy link
Owner

Just leaving an update that I'm still working on this! My schedule has filled up with 4th of July activities so it's going to be a bit longer.

@iliekturtles
Copy link
Owner

First round of review complete! While this review is just for HeatCapacity many of the items apply to the other quantities included in the PR. I've included a patch below that can be applied to make the formatting changes and some of the unit fixes.

diff --git a/src/si/heat_capacity.rs b/src/si/heat_capacity.rs
index ca08ff4..d511d8c 100644
--- a/src/si/heat_capacity.rs
+++ b/src/si/heat_capacity.rs
@@ -1,23 +1,20 @@
-//! Quantity of heat capacity.
-//! Base unit: kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹.
-//! Commonly expressed using derived unit energy: joule per kelvin, J · K⁻¹.
-//! Of the kind Kind shared with [temperature interval][ti], as this quantity relates
-//! to change of temperature. Not of kind TemperatureKind, used by [thermodynamic temperature][tt].
+//! Heat capacity (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
+//!
+//! Heat capacity has the same kind as [temperature interval][ti], as this quantity relates to
+//! change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic temperature][tt].
 //! See [thermodynamic temperature][tt] for a full explanation.
-//! 
+//!
 //! This quantity might be used to define the heat capacity of an object. To define heat capacity
 //! of a material, use [specific heat capacity][shc].
-//! 
+//!
 //! [ti]: ../temperature_interval/index.html
 //! [tt]: ../thermodynamic_temperature/index.html
 //! [shc]: ../specific_heat_capacity/index.html
 
 quantity! {
-    /// Quantity of heat capacity.
-    /// (kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹).
+    /// Heat capacity (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
     quantity: HeatCapacity; "heat capacity";
-    /// Dimension of heat capacity, M¹L²T⁻²Th⁻¹
-    /// (kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹).
+    /// Dimension of heat capacity, L²MT⁻²Th⁻¹ (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
     dimension: ISQ<
         P2,     // length
         P1,     // mass
@@ -27,11 +24,10 @@ quantity! {
         Z0,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow for units directly in base units
-        @yottagram_square_meter_per_squared_second_kelvin: prefix!(yotta) / prefix!(kilo);
-            "(Yg m²)/s²K", 
-            "yottagram square meter per squared second kelvin",
-            "yottagram square meters per squared second kelvin";
+        @yottagram_square_meter_per_second_squared_kelvin: prefix!(yotta) / prefix!(kilo);
+            "Yg · m²/(s² · K)",
+            "yottagram square meter per second squared kelvin",
+            "yottagram square meters per second squared kelvin";
         @zettagram_square_meter_per_squared_second_kelvin: prefix!(zetta) / prefix!(kilo);
             "(Zg m²)/s²K",
             "zettagram square meter per squared second kelvin",
@@ -115,62 +111,62 @@ quantity! {
             "yoctogram square meters per squared second kelvin";
 
         // Heat capacity is much more commonly expressed in terms of energy / temperature.
-        @yottajoule_per_kelvin: prefix!(yotta); "YJ/K", 
-            "yottajoule per kelvin", "yottajoules per kelvin";
-        @zettajoule_per_kelvin: prefix!(zetta); "ZJ/K",
-            "zettajoule per kelvin", "zettajoules per kelvin";
-        @exajoule_per_kelvin: prefix!(exa); "EJ/K",
-            "exajoule per kelvin", "exajoules per kelvin";
-        @petajoule_per_kelvin: prefix!(peta); "PJ/K",
-            "petajoule per kelvin", "petajoules per kelvin";
-        @terajoule_per_kelvin: prefix!(tera); "TJ/K",
-            "terajoule per kelvin", "terajoules per kelvin";
-        @gigajoule_per_kelvin: prefix!(giga); "GJ/K",
-            "gigajoule per kelvin", "gigajoules per kelvin";
-        @megajoule_per_kelvin: prefix!(mega); "MJ/K",
-            "megajoule per kelvin", "megajoules per kelvin";
-        @kilojoule_per_kelvin: prefix!(kilo); "kJ/K",
-            "kilojoule per kelvin", "kilojoules per kelvin";
-        @hectojoule_per_kelvin: prefix!(hecto); "hJ/K",
-            "hectojoule per kelvin", "hectojoules per kelvin";
-        @decajoule_per_kelvin: prefix!(deca); "daJ/K",
-            "decajoule per kelvin", "decajoules per kelvin";
-        /// Derived unit of heat capacity expressed in terms of derived unit Joule.
-        /// Equivalent to (kg m²)/s²K.
-        @joule_per_kelvin: prefix!(none); "J/K",
-            "joule per kelvin", "joules per kelvin";
-        @decijoule_per_kelvin: prefix!(deci); "dJ/K",
-            "decijoule per kelvin", "decijoules per kelvin";
-        @centijoule_per_kelvin: prefix!(centi); "cJ/K",
-            "centijoule per kelvin", "centijoules per kelvin";
-        @millijoule_per_kelvin: prefix!(milli); "mJ/K",
-            "millijoule per kelvin", "millijoules per kelvin";
-        @microjoule_per_kelvin: prefix!(micro); "µJ/K",
-            "microjoule per kelvin", "microjoules per kelvin";
-        @nanojoule_per_kelvin: prefix!(nano); "nJ/K",
-            "nanojoule per kelvin", "nanojoules per kelvin";
-        @picojoule_per_kelvin: prefix!(pico); "pJ/K",
-            "picojoule per kelvin", "picojoules per kelvin";
-        @femtojoule_per_kelvin: prefix!(femto); "fJ/K",
-            "femtojoule per kelvin", "femtojoules per kelvin";
-        @attojoule_per_kelvin: prefix!(atto); "aJ/K",
-            "attojoule per kelvin", "attojoules per kelvin";
-        @zeptojoule_per_kelvin: prefix!(zepto); "zJ/K",
-            "zeptojoule per kelvin", "zeptojoules per kelvin";
-        @yoctojoule_per_kelvin: prefix!(yocto); "yJ/K",
-            "yoctojoule per kelvin", "yoctojoules per kelvin";
+        @yottajoule_per_kelvin: prefix!(yotta); "YJ/K", "yottajoule per kelvin",
+            "yottajoules per kelvin";
+        @zettajoule_per_kelvin: prefix!(zetta); "ZJ/K", "zettajoule per kelvin",
+            "zettajoules per kelvin";
+        @exajoule_per_kelvin: prefix!(exa); "EJ/K", "exajoule per kelvin", "exajoules per kelvin";
+        @petajoule_per_kelvin: prefix!(peta); "PJ/K", "petajoule per kelvin",
+            "petajoules per kelvin";
+        @terajoule_per_kelvin: prefix!(tera); "TJ/K", "terajoule per kelvin",
+            "terajoules per kelvin";
+        @gigajoule_per_kelvin: prefix!(giga); "GJ/K", "gigajoule per kelvin",
+            "gigajoules per kelvin";
+        @megajoule_per_kelvin: prefix!(mega); "MJ/K", "megajoule per kelvin",
+            "megajoules per kelvin";
+        @kilojoule_per_kelvin: prefix!(kilo); "kJ/K", "kilojoule per kelvin",
+            "kilojoules per kelvin";
+        @hectojoule_per_kelvin: prefix!(hecto); "hJ/K", "hectojoule per kelvin",
+            "hectojoules per kelvin";
+        @decajoule_per_kelvin: prefix!(deca); "daJ/K", "decajoule per kelvin",
+            "decajoules per kelvin";
+        /// Derived unit of heat capacity expressed in terms of derived unit Joule. Equivalent to
+        /// kg · m²/(s² · K).
+        @joule_per_kelvin: prefix!(none); "J/K", "joule per kelvin", "joules per kelvin";
+        @decijoule_per_kelvin: prefix!(deci); "dJ/K", "decijoule per kelvin",
+            "decijoules per kelvin";
+        @centijoule_per_kelvin: prefix!(centi); "cJ/K", "centijoule per kelvin",
+            "centijoules per kelvin";
+        @millijoule_per_kelvin: prefix!(milli); "mJ/K", "millijoule per kelvin",
+            "millijoules per kelvin";
+        @microjoule_per_kelvin: prefix!(micro); "µJ/K", "microjoule per kelvin",
+            "microjoules per kelvin";
+        @nanojoule_per_kelvin: prefix!(nano); "nJ/K", "nanojoule per kelvin",
+            "nanojoules per kelvin";
+        @picojoule_per_kelvin: prefix!(pico); "pJ/K", "picojoule per kelvin",
+            "picojoules per kelvin";
+        @femtojoule_per_kelvin: prefix!(femto); "fJ/K", "femtojoule per kelvin",
+            "femtojoules per kelvin";
+        @attojoule_per_kelvin: prefix!(atto); "aJ/K", "attojoule per kelvin",
+            "attojoules per kelvin";
+        @zeptojoule_per_kelvin: prefix!(zepto); "zJ/K", "zeptojoule per kelvin",
+            "zeptojoules per kelvin";
+        @yoctojoule_per_kelvin: prefix!(yocto); "yJ/K", "yoctojoule per kelvin",
+            "yoctojoules per kelvin";
 
-        @kilojoule_per_degree_celsius: 1.0_E3; "kJ/°C",
-            "kilojoule per degree celsius", "kilojoules per degree celsius";
-        @joule_per_degree_celsius: 1.0_E0; "J/°C",
-            "joule per degree celsius", "joules per degree celsius";
-        @millijoule_per_degree_celsius: 1.0_E-3; "mJ/°C",
-            "millijoule per degree celsius", "millijoules per degree celsius";
+        @kilojoule_per_degree_celsius: 1.0_E3; "kJ/°C", "kilojoule per degree celsius",
+            "kilojoules per degree celsius";
+        @joule_per_degree_celsius: 1.0_E0; "J/°C", "joule per degree celsius",
+            "joules per degree celsius";
+        @millijoule_per_degree_celsius: 1.0_E-3; "mJ/°C", "millijoule per degree celsius",
+            "millijoules per degree celsius";
 
-        @btu_per_degree_fahrenheit: 1.897_829_999_999_999_9_E3; "BTU/°F",
-            "BTU per degree Fahrenheit", "BTUs per degree Fahrenheit";
-        @btu_it_per_degree_fahrenheit: 1.899_100_8_E3; "BTU (IT)/°F",
-            "BTU (IT) per degree Fahrenheit", "BTUs (IT) per degree Fahrenheit";
+        @btu_per_degree_fahrenheit: 1.897_830_E3; "Btu/°F",
+            "British thermal unit per degree Fahrenheit",
+            "British thermal units per degree Fahrenheit";
+        @btu_it_per_degree_fahrenheit: 1.899_100_8_E3; "Btu (IT)/°F",
+            "British thermal unit (IT) per degree Fahrenheit",
+            "British thermal units (IT) per degree Fahrenheit";
     }
 }
 
@@ -199,7 +195,7 @@ mod tests {
 
         #[test]
         fn check_base_units() {
-            test::<m::yottagram, hc::yottagram_square_meter_per_squared_second_kelvin>();
+            test::<m::yottagram, hc::yottagram_square_meter_per_second_squared_kelvin>();
             test::<m::zettagram, hc::zettagram_square_meter_per_squared_second_kelvin>();
             test::<m::exagram, hc::exagram_square_meter_per_squared_second_kelvin>();
             test::<m::petagram, hc::petagram_square_meter_per_squared_second_kelvin>();
@@ -258,7 +254,6 @@ mod tests {
             test::<e::attojoule, ti::kelvin, hc::attojoule_per_kelvin>();
             test::<e::zeptojoule, ti::kelvin, hc::zeptojoule_per_kelvin>();
             test::<e::yoctojoule, ti::kelvin, hc::yoctojoule_per_kelvin>();
-            
 
             test::<e::kilojoule, ti::degree_celsius, hc::kilojoule_per_degree_celsius>();
             test::<e::joule, ti::degree_celsius, hc::joule_per_degree_celsius>();

@glowforge-opensource
Copy link
Author

Thanks for the feedback! We'll apply these changes across the other new quantities as well, though timing is uncertain.

@iliekturtles
Copy link
Owner

Excellent! I've been super busy these last few weeks but things should be quieting down shortly so I'll have time to review changes.

@glowforge-opensource
Copy link
Author

We've applied your suggestions to the other four units. Please have a look and see if there are any other changes you'd like.

@iliekturtles
Copy link
Owner

Excellent! I'll review this week.

@@ -0,0 +1,329 @@
//! Quantity of thermodynamic heat transfer, also known as heat transfer coefficient,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The quantity name "thermodynamic heat transfer" doesn't make sense to me, and I'm having a very hard time finding anything that uses such a name to refer to the concept. I would prefer to see this renamed to "film effectiveness" personally (largely because having "coefficient" as a quantity doesn't seem very rigorous to me, so adding "coefficient" feels like a hack).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @Aehmlo, thanks for the feedback.

"Heat Transfer" was the most common name in the engineering literature we were referring to while using this quantity. "Film Effectiveness" is called out here as a common alias here in the interest of discoverability. Perhaps "Film Effectiveness" is a better name in some context we were not engaged with? We can certainly change it to "Flim Effectiveness" if it is more clear, discoverable, or correct.

Some academic sources:
Mejia Parra, Daniel & Montoya-Zapata, Diego & Arbelaiz, Ander & Moreno, Aitor & Posada, Jorge & Ruiz, Oscar. (2018). Fast Analytic Simulation for Multi-Laser Heating of Sheet Metal in GPU. Materials. 11. 2078. 10.3390/ma11112078.

Maria, Rutheravan. (2016). HEAT TRANSFER COEFFICIENT OF NANOFLUID. 10.13140/RG.2.1.4647.4642.

Some engineering literature:
https://books.google.com/books?id=u4U1H13ksmQC&printsec=frontcover#v=onepage&q&f=false

Some internet citations:
http://www.thermopedia.com/content/841/
https://en.wikipedia.org/wiki/Heat_transfer_coefficient
https://www.engineersedge.com/thermodynamics/overall_heat_transfer-table.htm

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIST 811 uses "coefficient of heat transfer." I'm inclined towards HeatTransferCoefficient currently.

@Aehmlo can you expand on why including coefficient doesn't seem as rigorous to you?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We'd leaned away from HeatTransferCoefficient in favor of HeatTransfer because all of these quantities could be considered coefficients when constructed with values. As such, putting Coeffiicient on one quantity seemed strange, but its a minor change if desired.

@iliekturtles
Copy link
Owner

@glowforge-opensource see the patch below for all the remaining changes that I believe are needed. If you can review and apply I believe we can merge once the heat transfer conversation is resolved.

diff --git a/src/si/heat_capacity.rs b/src/si/heat_capacity.rs
index ca08ff4..255be9e 100644
--- a/src/si/heat_capacity.rs
+++ b/src/si/heat_capacity.rs
@@ -1,23 +1,20 @@
-//! Quantity of heat capacity.
-//! Base unit: kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹.
-//! Commonly expressed using derived unit energy: joule per kelvin, J · K⁻¹.
-//! Of the kind Kind shared with [temperature interval][ti], as this quantity relates
-//! to change of temperature. Not of kind TemperatureKind, used by [thermodynamic temperature][tt].
+//! Heat capacity (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
+//!
+//! Heat capacity has the same kind as [temperature interval][ti], as this quantity relates to
+//! change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic temperature][tt].
 //! See [thermodynamic temperature][tt] for a full explanation.
-//! 
+//!
 //! This quantity might be used to define the heat capacity of an object. To define heat capacity
 //! of a material, use [specific heat capacity][shc].
-//! 
+//!
 //! [ti]: ../temperature_interval/index.html
 //! [tt]: ../thermodynamic_temperature/index.html
 //! [shc]: ../specific_heat_capacity/index.html
 
 quantity! {
-    /// Quantity of heat capacity.
-    /// (kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹).
+    /// Heat capacity (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
     quantity: HeatCapacity; "heat capacity";
-    /// Dimension of heat capacity, M¹L²T⁻²Th⁻¹
-    /// (kilogram square meter per squared second kelvin: kg¹ · m² · s⁻² · K⁻¹).
+    /// Dimension of heat capacity, L²MT⁻²Th⁻¹ (base unit joule per kelvin, kg · m² · s⁻² · K⁻¹).
     dimension: ISQ<
         P2,     // length
         P1,     // mass
@@ -27,150 +24,149 @@ quantity! {
         Z0,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow for units directly in base units
-        @yottagram_square_meter_per_squared_second_kelvin: prefix!(yotta) / prefix!(kilo);
-            "(Yg m²)/s²K", 
-            "yottagram square meter per squared second kelvin",
-            "yottagram square meters per squared second kelvin";
-        @zettagram_square_meter_per_squared_second_kelvin: prefix!(zetta) / prefix!(kilo);
-            "(Zg m²)/s²K",
-            "zettagram square meter per squared second kelvin",
-            "zettagram square meters per squared second kelvin";
-        @exagram_square_meter_per_squared_second_kelvin: prefix!(exa) / prefix!(kilo);
-            "(Eg m²)/s²K",
-            "exagram square meter per squared second kelvin",
-            "exagram square meters per squared second kelvin";
-        @petagram_square_meter_per_squared_second_kelvin: prefix!(peta) / prefix!(kilo);
-            "(Pg m²)/s²K",
-            "petagram square meter per squared second kelvin",
-            "petagram square meters per squared second kelvin";
-        @teragram_square_meter_per_squared_second_kelvin: prefix!(tera) / prefix!(kilo);
-            "(Tg m²)/s²K",
-            "teragram square meter per squared second kelvin",
-            "teragram square meters per squared second kelvin";
-        @gigagram_square_meter_per_squared_second_kelvin: prefix!(giga) / prefix!(kilo);
-            "(Gg m²)/s²K",
-            "gigagram square meter per squared second kelvin",
-            "gigagram square meters per squared second kelvin";
-        @megagram_square_meter_per_squared_second_kelvin: prefix!(mega) / prefix!(kilo);
-            "(Mg m²)/s²K",
-            "megagram square meter per squared second kelvin",
-            "megagram square meters per squared second kelvin";
+        @yottagram_square_meter_per_second_squared_kelvin: prefix!(yotta) / prefix!(kilo);
+            "Yg · m²/(s² · K)",
+            "yottagram square meter per second squared kelvin",
+            "yottagram square meters per second squared kelvin";
+        @zettagram_square_meter_per_second_squared_kelvin: prefix!(zetta) / prefix!(kilo);
+            "Zg · m²/(s² · K)",
+            "zettagram square meter per second squared kelvin",
+            "zettagram square meters per second squared kelvin";
+        @exagram_square_meter_per_second_squared_kelvin: prefix!(exa) / prefix!(kilo);
+            "Eg · m²/(s² · K)",
+            "exagram square meter per second squared kelvin",
+            "exagram square meters per second squared kelvin";
+        @petagram_square_meter_per_second_squared_kelvin: prefix!(peta) / prefix!(kilo);
+            "Pg · m²/(s² · K)",
+            "petagram square meter per second squared kelvin",
+            "petagram square meters per second squared kelvin";
+        @teragram_square_meter_per_second_squared_kelvin: prefix!(tera) / prefix!(kilo);
+            "Tg · m²/(s² · K)",
+            "teragram square meter per second squared kelvin",
+            "teragram square meters per second squared kelvin";
+        @gigagram_square_meter_per_second_squared_kelvin: prefix!(giga) / prefix!(kilo);
+            "Gg · m²/(s² · K)",
+            "gigagram square meter per second squared kelvin",
+            "gigagram square meters per second squared kelvin";
+        @megagram_square_meter_per_second_squared_kelvin: prefix!(mega) / prefix!(kilo);
+            "Mg · m²/(s² · K)",
+            "megagram square meter per second squared kelvin",
+            "megagram square meters per second squared kelvin";
         /// The derived unit of heat capacity expressed in base units. Equivalent to J/K.
-        @kilogram_square_meter_per_squared_second_kelvin: prefix!(kilo) / prefix!(kilo);
-            "(kg m²)/s²K",
-            "kilogram square meter per squared second kelvin",
-            "kilogram square meters per squared second kelvin";
-        @hectogram_square_meter_per_squared_second_kelvin: prefix!(hecto) / prefix!(kilo);
-            "(hg m²)/s²K",
-            "hectogram square meter per squared second kelvin",
-            "hectogram square meters per squared second kelvin";
-        @decagram_square_meter_per_squared_second_kelvin: prefix!(deca) / prefix!(kilo);
-            "(dag m²)/s²K",
-            "decagram square meter per squared second kelvin",
-            "decagram square meters per squared second kelvin";
-        @gram_square_meter_per_squared_second_kelvin: prefix!(none) / prefix!(kilo);
-            "(g m²)/s²K",
-            "gram square meter per squared second kelvin",
-            "gram square meters per squared second kelvin";
-        @decigram_square_meter_per_squared_second_kelvin: prefix!(deci) / prefix!(kilo);
-            "(dg m²)/s²K",
-            "decigram square meter per squared second kelvin",
-            "decigram square meters per squared second kelvin";
-        @centigram_square_meter_per_squared_second_kelvin: prefix!(centi) / prefix!(kilo);
-            "(cg m²)/s²K",
-            "centigram square meter per squared second kelvin",
-            "centigram square meters per squared second kelvin";
-        @milligram_square_meter_per_squared_second_kelvin: prefix!(milli) / prefix!(kilo);
-            "(mg m²)/s²K",
-            "milligram square meter per squared second kelvin",
-            "milligram square meters per squared second kelvin";
-        @microgram_square_meter_per_squared_second_kelvin: prefix!(micro) / prefix!(kilo);
-            "(µg m²)/s²K",
-            "microgram square meter per squared second kelvin",
-            "microgram square meters per squared second kelvin";
-        @nanogram_square_meter_per_squared_second_kelvin: prefix!(nano) / prefix!(kilo);
-            "(ng m²)/s²K",
-            "nanogram square meter per squared second kelvin",
-            "nanogram square meters per squared second kelvin";
-        @picogram_square_meter_per_squared_second_kelvin: prefix!(pico) / prefix!(kilo);
-            "(pg m²)/s²K",
-            "picogram square meter per squared second kelvin",
-            "picogram square meters per squared second kelvin";
-        @femtogram_square_meter_per_squared_second_kelvin: prefix!(femto) / prefix!(kilo);
-            "(fg m²)/s²K",
-            "femtogram square meter per squared second kelvin",
-            "femtogram square meters per squared second kelvin";
-        @attogram_square_meter_per_squared_second_kelvin: prefix!(atto) / prefix!(kilo);
-            "(ag m²)/s²K",
-            "attogram square meter per squared second kelvin",
-            "attogram square meters per squared second kelvin";
-        @zeptogram_square_meter_per_squared_second_kelvin: prefix!(zepto) / prefix!(kilo);
-            "(zg m²)/s²K",
-            "zeptogram square meter per squared second kelvin",
-            "zeptogram square meters per squared second kelvin";
-        @yoctogram_square_meter_per_squared_second_kelvin: prefix!(yocto) / prefix!(kilo);
-            "(yg m²)/s²K",
-            "yoctogram square meter per squared second kelvin",
-            "yoctogram square meters per squared second kelvin";
+        @kilogram_square_meter_per_second_squared_kelvin: prefix!(kilo) / prefix!(kilo);
+            "kg · m²/(s² · K)",
+            "kilogram square meter per second squared kelvin",
+            "kilogram square meters per second squared kelvin";
+        @hectogram_square_meter_per_second_squared_kelvin: prefix!(hecto) / prefix!(kilo);
+            "hg · m²/(s² · K)",
+            "hectogram square meter per second squared kelvin",
+            "hectogram square meters per second squared kelvin";
+        @decagram_square_meter_per_second_squared_kelvin: prefix!(deca) / prefix!(kilo);
+            "dag · m²/(s² · K)",
+            "decagram square meter per second squared kelvin",
+            "decagram square meters per second squared kelvin";
+        @gram_square_meter_per_second_squared_kelvin: prefix!(none) / prefix!(kilo);
+            "g · m²/(s² · K)",
+            "gram square meter per second squared kelvin",
+            "gram square meters per second squared kelvin";
+        @decigram_square_meter_per_second_squared_kelvin: prefix!(deci) / prefix!(kilo);
+            "dg · m²/(s² · K)",
+            "decigram square meter per second squared kelvin",
+            "decigram square meters per second squared kelvin";
+        @centigram_square_meter_per_second_squared_kelvin: prefix!(centi) / prefix!(kilo);
+            "cg · m²/(s² · K)",
+            "centigram square meter per second squared kelvin",
+            "centigram square meters per second squared kelvin";
+        @milligram_square_meter_per_second_squared_kelvin: prefix!(milli) / prefix!(kilo);
+            "mg · m²/(s² · K)",
+            "milligram square meter per second squared kelvin",
+            "milligram square meters per second squared kelvin";
+        @microgram_square_meter_per_second_squared_kelvin: prefix!(micro) / prefix!(kilo);
+            "µg · m²/(s² · K)",
+            "microgram square meter per second squared kelvin",
+            "microgram square meters per second squared kelvin";
+        @nanogram_square_meter_per_second_squared_kelvin: prefix!(nano) / prefix!(kilo);
+            "ng · m²/(s² · K)",
+            "nanogram square meter per second squared kelvin",
+            "nanogram square meters per second squared kelvin";
+        @picogram_square_meter_per_second_squared_kelvin: prefix!(pico) / prefix!(kilo);
+            "pg · m²/(s² · K)",
+            "picogram square meter per second squared kelvin",
+            "picogram square meters per second squared kelvin";
+        @femtogram_square_meter_per_second_squared_kelvin: prefix!(femto) / prefix!(kilo);
+            "fg · m²/(s² · K)",
+            "femtogram square meter per second squared kelvin",
+            "femtogram square meters per second squared kelvin";
+        @attogram_square_meter_per_second_squared_kelvin: prefix!(atto) / prefix!(kilo);
+            "ag · m²/(s² · K)",
+            "attogram square meter per second squared kelvin",
+            "attogram square meters per second squared kelvin";
+        @zeptogram_square_meter_per_second_squared_kelvin: prefix!(zepto) / prefix!(kilo);
+            "zg · m²/(s² · K)",
+            "zeptogram square meter per second squared kelvin",
+            "zeptogram square meters per second squared kelvin";
+        @yoctogram_square_meter_per_second_squared_kelvin: prefix!(yocto) / prefix!(kilo);
+            "yg · m²/(s² · K)",
+            "yoctogram square meter per second squared kelvin",
+            "yoctogram square meters per second squared kelvin";
 
         // Heat capacity is much more commonly expressed in terms of energy / temperature.
-        @yottajoule_per_kelvin: prefix!(yotta); "YJ/K", 
-            "yottajoule per kelvin", "yottajoules per kelvin";
-        @zettajoule_per_kelvin: prefix!(zetta); "ZJ/K",
-            "zettajoule per kelvin", "zettajoules per kelvin";
-        @exajoule_per_kelvin: prefix!(exa); "EJ/K",
-            "exajoule per kelvin", "exajoules per kelvin";
-        @petajoule_per_kelvin: prefix!(peta); "PJ/K",
-            "petajoule per kelvin", "petajoules per kelvin";
-        @terajoule_per_kelvin: prefix!(tera); "TJ/K",
-            "terajoule per kelvin", "terajoules per kelvin";
-        @gigajoule_per_kelvin: prefix!(giga); "GJ/K",
-            "gigajoule per kelvin", "gigajoules per kelvin";
-        @megajoule_per_kelvin: prefix!(mega); "MJ/K",
-            "megajoule per kelvin", "megajoules per kelvin";
-        @kilojoule_per_kelvin: prefix!(kilo); "kJ/K",
-            "kilojoule per kelvin", "kilojoules per kelvin";
-        @hectojoule_per_kelvin: prefix!(hecto); "hJ/K",
-            "hectojoule per kelvin", "hectojoules per kelvin";
-        @decajoule_per_kelvin: prefix!(deca); "daJ/K",
-            "decajoule per kelvin", "decajoules per kelvin";
-        /// Derived unit of heat capacity expressed in terms of derived unit Joule.
-        /// Equivalent to (kg m²)/s²K.
-        @joule_per_kelvin: prefix!(none); "J/K",
-            "joule per kelvin", "joules per kelvin";
-        @decijoule_per_kelvin: prefix!(deci); "dJ/K",
-            "decijoule per kelvin", "decijoules per kelvin";
-        @centijoule_per_kelvin: prefix!(centi); "cJ/K",
-            "centijoule per kelvin", "centijoules per kelvin";
-        @millijoule_per_kelvin: prefix!(milli); "mJ/K",
-            "millijoule per kelvin", "millijoules per kelvin";
-        @microjoule_per_kelvin: prefix!(micro); "µJ/K",
-            "microjoule per kelvin", "microjoules per kelvin";
-        @nanojoule_per_kelvin: prefix!(nano); "nJ/K",
-            "nanojoule per kelvin", "nanojoules per kelvin";
-        @picojoule_per_kelvin: prefix!(pico); "pJ/K",
-            "picojoule per kelvin", "picojoules per kelvin";
-        @femtojoule_per_kelvin: prefix!(femto); "fJ/K",
-            "femtojoule per kelvin", "femtojoules per kelvin";
-        @attojoule_per_kelvin: prefix!(atto); "aJ/K",
-            "attojoule per kelvin", "attojoules per kelvin";
-        @zeptojoule_per_kelvin: prefix!(zepto); "zJ/K",
-            "zeptojoule per kelvin", "zeptojoules per kelvin";
-        @yoctojoule_per_kelvin: prefix!(yocto); "yJ/K",
-            "yoctojoule per kelvin", "yoctojoules per kelvin";
+        @yottajoule_per_kelvin: prefix!(yotta); "YJ/K", "yottajoule per kelvin",
+            "yottajoules per kelvin";
+        @zettajoule_per_kelvin: prefix!(zetta); "ZJ/K", "zettajoule per kelvin",
+            "zettajoules per kelvin";
+        @exajoule_per_kelvin: prefix!(exa); "EJ/K", "exajoule per kelvin", "exajoules per kelvin";
+        @petajoule_per_kelvin: prefix!(peta); "PJ/K", "petajoule per kelvin",
+            "petajoules per kelvin";
+        @terajoule_per_kelvin: prefix!(tera); "TJ/K", "terajoule per kelvin",
+            "terajoules per kelvin";
+        @gigajoule_per_kelvin: prefix!(giga); "GJ/K", "gigajoule per kelvin",
+            "gigajoules per kelvin";
+        @megajoule_per_kelvin: prefix!(mega); "MJ/K", "megajoule per kelvin",
+            "megajoules per kelvin";
+        @kilojoule_per_kelvin: prefix!(kilo); "kJ/K", "kilojoule per kelvin",
+            "kilojoules per kelvin";
+        @hectojoule_per_kelvin: prefix!(hecto); "hJ/K", "hectojoule per kelvin",
+            "hectojoules per kelvin";
+        @decajoule_per_kelvin: prefix!(deca); "daJ/K", "decajoule per kelvin",
+            "decajoules per kelvin";
+        /// Derived unit of heat capacity expressed in terms of derived unit Joule. Equivalent to
+        /// kg · m²/(s² · K).
+        @joule_per_kelvin: prefix!(none); "J/K", "joule per kelvin", "joules per kelvin";
+        @decijoule_per_kelvin: prefix!(deci); "dJ/K", "decijoule per kelvin",
+            "decijoules per kelvin";
+        @centijoule_per_kelvin: prefix!(centi); "cJ/K", "centijoule per kelvin",
+            "centijoules per kelvin";
+        @millijoule_per_kelvin: prefix!(milli); "mJ/K", "millijoule per kelvin",
+            "millijoules per kelvin";
+        @microjoule_per_kelvin: prefix!(micro); "µJ/K", "microjoule per kelvin",
+            "microjoules per kelvin";
+        @nanojoule_per_kelvin: prefix!(nano); "nJ/K", "nanojoule per kelvin",
+            "nanojoules per kelvin";
+        @picojoule_per_kelvin: prefix!(pico); "pJ/K", "picojoule per kelvin",
+            "picojoules per kelvin";
+        @femtojoule_per_kelvin: prefix!(femto); "fJ/K", "femtojoule per kelvin",
+            "femtojoules per kelvin";
+        @attojoule_per_kelvin: prefix!(atto); "aJ/K", "attojoule per kelvin",
+            "attojoules per kelvin";
+        @zeptojoule_per_kelvin: prefix!(zepto); "zJ/K", "zeptojoule per kelvin",
+            "zeptojoules per kelvin";
+        @yoctojoule_per_kelvin: prefix!(yocto); "yJ/K", "yoctojoule per kelvin",
+            "yoctojoules per kelvin";
 
-        @kilojoule_per_degree_celsius: 1.0_E3; "kJ/°C",
-            "kilojoule per degree celsius", "kilojoules per degree celsius";
-        @joule_per_degree_celsius: 1.0_E0; "J/°C",
-            "joule per degree celsius", "joules per degree celsius";
-        @millijoule_per_degree_celsius: 1.0_E-3; "mJ/°C",
-            "millijoule per degree celsius", "millijoules per degree celsius";
+        @kilojoule_per_degree_celsius: 1.0_E3; "kJ/°C", "kilojoule per degree celsius",
+            "kilojoules per degree celsius";
+        @joule_per_degree_celsius: 1.0_E0; "J/°C", "joule per degree celsius",
+            "joules per degree celsius";
+        @millijoule_per_degree_celsius: 1.0_E-3; "mJ/°C", "millijoule per degree celsius",
+            "millijoules per degree celsius";
 
-        @btu_per_degree_fahrenheit: 1.897_829_999_999_999_9_E3; "BTU/°F",
-            "BTU per degree Fahrenheit", "BTUs per degree Fahrenheit";
-        @btu_it_per_degree_fahrenheit: 1.899_100_8_E3; "BTU (IT)/°F",
-            "BTU (IT) per degree Fahrenheit", "BTUs (IT) per degree Fahrenheit";
+        @btu_per_degree_fahrenheit: 1.897_830_E3; "Btu/°F",
+            "British thermal unit per degree Fahrenheit",
+            "British thermal units per degree Fahrenheit";
+        @btu_it_per_degree_fahrenheit: 1.899_100_8_E3; "Btu (IT)/°F",
+            "British thermal unit (IT) per degree Fahrenheit",
+            "British thermal units (IT) per degree Fahrenheit";
     }
 }
 
@@ -199,32 +195,29 @@ mod tests {
 
         #[test]
         fn check_base_units() {
-            test::<m::yottagram, hc::yottagram_square_meter_per_squared_second_kelvin>();
-            test::<m::zettagram, hc::zettagram_square_meter_per_squared_second_kelvin>();
-            test::<m::exagram, hc::exagram_square_meter_per_squared_second_kelvin>();
-            test::<m::petagram, hc::petagram_square_meter_per_squared_second_kelvin>();
-            test::<m::teragram, hc::teragram_square_meter_per_squared_second_kelvin>();
-            test::<m::gigagram, hc::gigagram_square_meter_per_squared_second_kelvin>();
-            test::<m::megagram, hc::megagram_square_meter_per_squared_second_kelvin>();
-            test::<m::kilogram, hc::kilogram_square_meter_per_squared_second_kelvin>();
-            test::<m::hectogram, hc::hectogram_square_meter_per_squared_second_kelvin>();
-            test::<m::decagram, hc::decagram_square_meter_per_squared_second_kelvin>();
-            test::<m::gram, hc::gram_square_meter_per_squared_second_kelvin>();
-            test::<m::decigram, hc::decigram_square_meter_per_squared_second_kelvin>();
-            test::<m::centigram, hc::centigram_square_meter_per_squared_second_kelvin>();
-            test::<m::milligram, hc::milligram_square_meter_per_squared_second_kelvin>();
-            test::<m::microgram, hc::microgram_square_meter_per_squared_second_kelvin>();
-            test::<m::nanogram, hc::nanogram_square_meter_per_squared_second_kelvin>();
-            test::<m::picogram, hc::picogram_square_meter_per_squared_second_kelvin>();
-            test::<m::femtogram, hc::femtogram_square_meter_per_squared_second_kelvin>();
-            test::<m::attogram, hc::attogram_square_meter_per_squared_second_kelvin>();
-            test::<m::zeptogram, hc::zeptogram_square_meter_per_squared_second_kelvin>();
-            test::<m::yoctogram, hc::yoctogram_square_meter_per_squared_second_kelvin>();
+            test::<m::yottagram, hc::yottagram_square_meter_per_second_squared_kelvin>();
+            test::<m::zettagram, hc::zettagram_square_meter_per_second_squared_kelvin>();
+            test::<m::exagram, hc::exagram_square_meter_per_second_squared_kelvin>();
+            test::<m::petagram, hc::petagram_square_meter_per_second_squared_kelvin>();
+            test::<m::teragram, hc::teragram_square_meter_per_second_squared_kelvin>();
+            test::<m::gigagram, hc::gigagram_square_meter_per_second_squared_kelvin>();
+            test::<m::megagram, hc::megagram_square_meter_per_second_squared_kelvin>();
+            test::<m::kilogram, hc::kilogram_square_meter_per_second_squared_kelvin>();
+            test::<m::hectogram, hc::hectogram_square_meter_per_second_squared_kelvin>();
+            test::<m::decagram, hc::decagram_square_meter_per_second_squared_kelvin>();
+            test::<m::gram, hc::gram_square_meter_per_second_squared_kelvin>();
+            test::<m::decigram, hc::decigram_square_meter_per_second_squared_kelvin>();
+            test::<m::centigram, hc::centigram_square_meter_per_second_squared_kelvin>();
+            test::<m::milligram, hc::milligram_square_meter_per_second_squared_kelvin>();
+            test::<m::microgram, hc::microgram_square_meter_per_second_squared_kelvin>();
+            test::<m::nanogram, hc::nanogram_square_meter_per_second_squared_kelvin>();
+            test::<m::picogram, hc::picogram_square_meter_per_second_squared_kelvin>();
+            test::<m::femtogram, hc::femtogram_square_meter_per_second_squared_kelvin>();
+            test::<m::attogram, hc::attogram_square_meter_per_second_squared_kelvin>();
+            test::<m::zeptogram, hc::zeptogram_square_meter_per_second_squared_kelvin>();
+            test::<m::yoctogram, hc::yoctogram_square_meter_per_second_squared_kelvin>();
 
-            fn test<
-                M: m::Conversion<V>,
-                HC: hc::Conversion<V>,
-                >() {
+            fn test<M: m::Conversion<V>, HC: hc::Conversion<V>>() {
                 Test::assert_approx_eq(&HeatCapacity::new::<HC>(V::one()),
                     &(Mass::new::<M>(V::one())
                         * Length::new::<l::meter>(V::one())
@@ -258,7 +251,6 @@ mod tests {
             test::<e::attojoule, ti::kelvin, hc::attojoule_per_kelvin>();
             test::<e::zeptojoule, ti::kelvin, hc::zeptojoule_per_kelvin>();
             test::<e::yoctojoule, ti::kelvin, hc::yoctojoule_per_kelvin>();
-            
 
             test::<e::kilojoule, ti::degree_celsius, hc::kilojoule_per_degree_celsius>();
             test::<e::joule, ti::degree_celsius, hc::joule_per_degree_celsius>();
@@ -267,11 +259,7 @@ mod tests {
             test::<e::btu, ti::degree_fahrenheit, hc::btu_per_degree_fahrenheit>();
             test::<e::btu_it, ti::degree_fahrenheit, hc::btu_it_per_degree_fahrenheit>();
 
-            fn test<
-                E: e::Conversion<V>,
-                TI: ti::Conversion<V>,
-                HC: hc::Conversion<V>,
-                >() {
+            fn test<E: e::Conversion<V>, TI: ti::Conversion<V>, HC: hc::Conversion<V>>() {
                 Test::assert_approx_eq(&HeatCapacity::new::<HC>(V::one()),
                     &(Energy::new::<E>(V::one())
                         / TemperatureInterval::new::<TI>(V::one())));
diff --git a/src/si/heat_transfer.rs b/src/si/heat_transfer.rs
index 735ffda..9316203 100644
--- a/src/si/heat_transfer.rs
+++ b/src/si/heat_transfer.rs
@@ -1,19 +1,20 @@
-//! Quantity of thermodynamic heat transfer, also known as heat transfer coefficient,
-//! film coefficient, or film effectiveness.
-//! Base unit: kilogram per kelvin cubed second: kg · s⁻³ · K⁻¹.
-//! Commonly expressed using derived units power and area: watt per kelvin square meter, W · m⁻² · K⁻¹.
-//! Of the kind Kind shared with [temperature interval][ti], as this quantity relates
-//! to change of temperature. Not of kind TemperatureKind, used by [thermodynamic temperature][tt].
-//! See [thermodynamic temperature][tt] for a full explanation.
-//! 
+//! Heat transfer coefficient (base unit watt per square meter kelvin, kg · s⁻³ · K⁻¹).
+//!
+//! Heat transfer coefficient is also known as film coefficient, or film effectiveness. Commonly
+//! expressed using derived units power and area: watt per square meter kelvin.
+//!
+//! Heat transfer coefficient has the same kind as [temperature interval][ti], as this quantity
+//! relates to change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic
+//! temperature][tt]. See [thermodynamic temperature][tt] for a full explanation.
+//!
 //! [ti]: ../temperature_interval/index.html
 //! [tt]: ../thermodynamic_temperature/index.html
 
 quantity! {
-    /// Quantity of thermodynamic heat transfer, also known as heat transfer coefficient,
-    /// film coefficient, or film effectiveness. (kilogram per cubed second kelvin, kg · s⁻³ · K⁻¹).
+    /// Heat transfer coefficient (base unit watt per square meter kelvin, kg · s⁻³ · K⁻¹).
     quantity: HeatTransfer; "heat transfer";
-    /// Dimension of thermodynamic heat transfer, M¹T⁻³Th⁻¹ (kilogram per cubed second kelvin: kg · s⁻³ · K⁻¹).
+    /// Dimension of heat transfer coefficient, MT⁻³Th⁻¹ (base unit watt per square meter kelvin,
+    /// kg · s⁻³ · K⁻¹).
     dimension: ISQ<
         Z0,     // length
         P1,     // mass
@@ -23,148 +24,160 @@ quantity! {
         Z0,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow for units directly in base units
-        @yottagram_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo); "Yg/s³K", 
+        @yottagram_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo); "Yg/(s³ · K)",
             "yottagram per second cubed kelvin", "yottagrams per second cubed kelvin";
-        @zettagram_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo); "Zg/s³K",
+        @zettagram_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo); "Zg/(s³ · K)",
             "zettagram per second cubed kelvin", "zettagrams per second cubed kelvin";
-        @exagram_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "Eg/s³K",
+        @exagram_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "Eg/(s³ · K)",
             "exagram per second cubed kelvin", "exagrams per second cubed kelvin";
-        @petagram_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "Pg/s³K",
+        @petagram_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "Pg/(s³ · K)",
             "petagram per second cubed kelvin", "petagrams per second cubed kelvin";
-        @teragram_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "Tg/s³K",
+        @teragram_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "Tg/(s³ · K)",
             "teragram per second cubed kelvin", "teragrams per second cubed kelvin";
-        @gigagram_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "Gg/s³K",
+        @gigagram_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "Gg/(s³ · K)",
             "gigagram per second cubed kelvin", "gigagrams per second cubed kelvin";
-        @megagram_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "Mg/s³K",
+        @megagram_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "Mg/(s³ · K)",
             "megagram per second cubed kelvin", "megagrams per second cubed kelvin";
-        /// Derived unit of heat transfer in base units. Equivalent to W/m^2K.
-        @kilogram_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "kg/s³K",
+        /// Derived unit of heat transfer in base units. Equivalent to W/(m² · K).
+        @kilogram_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "kg/(s³ · K)",
             "kilogram per second cubed kelvin", "kilograms per second cubed kelvin";
-        @hectogram_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo); "hg/s³K",
+        @hectogram_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo); "hg/(s³ · K)",
             "hectogram per second cubed kelvin", "hectograms per second cubed kelvin";
-        @decagram_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "dag/s³K",
+        @decagram_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "dag/(s³ · K)",
             "decagram per second cubed kelvin", "decagrams per second cubed kelvin";
-        @gram_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g/s³K",
+        @gram_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g/(s³ · K)",
             "gram per second cubed kelvin", "grams per second cubed kelvin";
-        @decigram_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "dg/s³K",
+        @decigram_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "dg/(s³ · K)",
             "decigram per second cubed kelvin", "decigrams per second cubed kelvin";
-        @centigram_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo); "cg/s³K",
+        @centigram_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo); "cg/(s³ · K)",
             "centigram per second cubed kelvin", "centigrams per second cubed kelvin";
-        @milligram_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo); "mg/s³K",
+        @milligram_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo); "mg/(s³ · K)",
             "milligram per second cubed kelvin", "milligrams per second cubed kelvin";
-        @microgram_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "µg/s³K",
+        @microgram_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "µg/(s³ · K)",
             "microgram per second cubed kelvin", "micrograms per second cubed kelvin";
-        @nanogram_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "ng/s³K",
+        @nanogram_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "ng/(s³ · K)",
             "nanogram per second cubed kelvin", "nanograms per second cubed kelvin";
-        @picogram_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "pg/s³K",
+        @picogram_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "pg/(s³ · K)",
             "picogram per second cubed kelvin", "picograms per second cubed kelvin";
-        @femtogram_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo); "fg/s³K",
+        @femtogram_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo); "fg/(s³ · K)",
             "femtogram per second cubed kelvin", "femtograms per second cubed kelvin";
-        @attogram_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "ag/s³K",
+        @attogram_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "ag/(s³ · K)",
             "attogram per second cubed kelvin", "attograms per second cubed kelvin";
-        @zeptogram_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo); "zg/s³K",
+        @zeptogram_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo); "zg/(s³ · K)",
             "zeptogram per second cubed kelvin", "zeptograms per second cubed kelvin";
-        @yoctogram_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo); "yg/s³K",
+        @yoctogram_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo); "yg/(s³ · K)",
             "yoctogram per second cubed kelvin", "yoctograms per second cubed kelvin";
 
+        @kilogram_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo); "kg/(s³ · °C)",
+            "kilogram per second cubed degree celsius", "kilograms per second cubed degree celsius";
+
         // Heat transfer is much more commonly expressed in terms of power / area (heat flux).
-        @yottawatt_per_square_meter_kelvin: prefix!(yotta); "YW/m²K", 
+        @yottawatt_per_square_meter_kelvin: prefix!(yotta); "YW/(m² · K)",
             "yottawatt per square meter kelvin", "yottawatts per square meter kelvin";
-        @zettawatt_per_square_meter_kelvin: prefix!(zetta); "ZW/m²K",
+        @zettawatt_per_square_meter_kelvin: prefix!(zetta); "ZW/(m² · K)",
             "zettawatt per square meter kelvin", "zettawatts per square meter kelvin";
-        @exawatt_per_square_meter_kelvin: prefix!(exa); "EW/m²K",
+        @exawatt_per_square_meter_kelvin: prefix!(exa); "EW/(m² · K)",
             "exawatt per square meter kelvin", "exawatts per square meter kelvin";
-        @petawatt_per_square_meter_kelvin: prefix!(peta); "PW/m²K",
+        @petawatt_per_square_meter_kelvin: prefix!(peta); "PW/(m² · K)",
             "petawatt per square meter kelvin", "petawatts per square meter kelvin";
-        @terawatt_per_square_meter_kelvin: prefix!(tera); "TW/m²K",
+        @terawatt_per_square_meter_kelvin: prefix!(tera); "TW/(m² · K)",
             "terawatt per square meter kelvin", "terawatts per square meter kelvin";
-        @gigawatt_per_square_meter_kelvin: prefix!(giga); "GW/m²K",
+        @gigawatt_per_square_meter_kelvin: prefix!(giga); "GW/(m² · K)",
             "gigawatt per square meter kelvin", "gigawatts per square meter kelvin";
-        @megawatt_per_square_meter_kelvin: prefix!(mega); "MW/m²K",
+        @megawatt_per_square_meter_kelvin: prefix!(mega); "MW/(m² · K)",
             "megawatt per square meter kelvin", "megawatts per square meter kelvin";
-        @kilowatt_per_square_meter_kelvin: prefix!(kilo); "kW/m²K",
+        @kilowatt_per_square_meter_kelvin: prefix!(kilo); "kW/(m² · K)",
             "kilowatt per square meter kelvin", "kilowatts per square meter kelvin";
-        @hectowatt_per_square_meter_kelvin: prefix!(hecto); "hW/m²K",
+        @hectowatt_per_square_meter_kelvin: prefix!(hecto); "hW/(m² · K)",
             "hectowatt per square meter kelvin", "hectowatts per square meter kelvin";
-        @decawatt_per_square_meter_kelvin: prefix!(deca); "daW/m²K",
+        @decawatt_per_square_meter_kelvin: prefix!(deca); "daW/(m² · K)",
             "decawatt per square meter kelvin", "decawatts per square meter kelvin";
-        /// Derived unit of heat transfer in derived units. Equivalent to kg/s^3K.
-        @watt_per_square_meter_kelvin: prefix!(none); "W/m²K",
+        /// Derived unit of heat transfer in derived units. Equivalent to kg/(s³ · K).
+        @watt_per_square_meter_kelvin: prefix!(none); "W/(m² · K)",
             "watt per square meter kelvin", "watts per square meter kelvin";
-        @deciwatt_per_square_meter_kelvin: prefix!(deci); "dW/m²K",
+        @deciwatt_per_square_meter_kelvin: prefix!(deci); "dW/(m² · K)",
             "deciwatt per square meter kelvin", "deciwatts per square meter kelvin";
-        @centiwatt_per_square_meter_kelvin: prefix!(centi); "cW/m²K",
+        @centiwatt_per_square_meter_kelvin: prefix!(centi); "cW/(m² · K)",
             "centiwatt per square meter kelvin", "centiwatts per square meter kelvin";
-        @milliwatt_per_square_meter_kelvin: prefix!(milli); "mW/m²K",
+        @milliwatt_per_square_meter_kelvin: prefix!(milli); "mW/(m² · K)",
             "milliwatt per square meter kelvin", "milliwatts per square meter kelvin";
-        @microwatt_per_square_meter_kelvin: prefix!(micro); "µW/m²K",
+        @microwatt_per_square_meter_kelvin: prefix!(micro); "µW/(m² · K)",
             "microwatt per square meter kelvin", "microwatts per square meter kelvin";
-        @nanowatt_per_square_meter_kelvin: prefix!(nano); "nW/m²K",
+        @nanowatt_per_square_meter_kelvin: prefix!(nano); "nW/(m² · K)",
             "nanowatt per square meter kelvin", "nanowatts per square meter kelvin";
-        @picowatt_per_square_meter_kelvin: prefix!(pico); "pW/m²K",
+        @picowatt_per_square_meter_kelvin: prefix!(pico); "pW/(m² · K)",
             "picowatt per square meter kelvin", "picowatts per square meter kelvin";
-        @femtowatt_per_square_meter_kelvin: prefix!(femto); "fW/m²K",
+        @femtowatt_per_square_meter_kelvin: prefix!(femto); "fW/(m² · K)",
             "femtowatt per square meter kelvin", "femtowatts per square meter kelvin";
-        @attowatt_per_square_meter_kelvin: prefix!(atto); "aW/m²K",
+        @attowatt_per_square_meter_kelvin: prefix!(atto); "aW/(m² · K)",
             "attowatt per square meter kelvin", "attowatts per square meter kelvin";
-        @zeptowatt_per_square_meter_kelvin: prefix!(zepto); "zW/m²K",
+        @zeptowatt_per_square_meter_kelvin: prefix!(zepto); "zW/(m² · K)",
             "zeptowatt per square meter kelvin", "zeptowatts per square meter kelvin";
-        @yoctowatt_per_square_meter_kelvin: prefix!(yocto); "yW/m²K",
+        @yoctowatt_per_square_meter_kelvin: prefix!(yocto); "yW/(m² · K)",
             "yoctowatt per square meter kelvin", "yoctowatts per square meter kelvin";
 
         // Power per area temperature interval
-        @kilogram_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo); "kg/s³°C",
-            "kilogram per second cubed degree celsius", "kilograms per second cubed degree celsius";
-        @watt_per_square_kilometer_degree_celsius: prefix!(micro); "W/km²°C",
-            "watt per square kilometer degree celsius", "watts per square kilometer degree celsius";
-        @watt_per_square_meter_degree_celsius: prefix!(none); "W/m²°C",
-            "watt per square meter degree celsius", "watts per square meter degree celsius";
-        @watt_per_square_centimeter_degree_celsius: 1.0_E4; "W/cm²°C",
-            "watt per square meter degree celsius", "watts per square meter degree celsius";
-        @watt_per_square_millimeter_degree_celsius: prefix!(mega); "W/mm²°C",
+        @watt_per_square_kilometer_degree_celsius: prefix!(none) / (prefix!(kilo) * prefix!(kilo));
+            "W/(km² · °C)", "watt per square kilometer degree celsius",
+            "watts per square kilometer degree celsius";
+        @watt_per_square_meter_degree_celsius: prefix!(none); "W/(m² · °C)",
             "watt per square meter degree celsius", "watts per square meter degree celsius";
+        @watt_per_square_centimeter_degree_celsius:
+            prefix!(none) / (prefix!(centi) * prefix!(centi)); "W/(cm² · °C)",
+            "watt per square centimeter degree celsius",
+            "watts per square centimeter degree celsius";
+        @watt_per_square_millimeter_degree_celsius:
+            prefix!(none) / (prefix!(milli) * prefix!(milli)); "W/(mm² · °C)",
+            "watt per square millimeter degree celsius",
+            "watts per square millimeter degree celsius";
 
         // Energy per time area temperature interval
-        @joule_per_second_square_meter_kelvin: prefix!(none); "J/sm²K",
+        @joule_per_second_square_meter_kelvin: prefix!(none); "J/(s · m² · K)",
             "joule per second square meter kelvin", "joules per second square meter kelvin";
-        @joule_per_second_square_meter_degree_celsius: prefix!(none); "J/sm²°C",
-            "joule per square meter degree celsius", "joules per square meter degree celsius";
-        @btu_it_per_hour_square_foot_degree_fahrenheit: 5.678_264_134_306_046; "BTU (IT)/(hr ft² °F)",
+        @joule_per_second_square_meter_degree_celsius: prefix!(none); "J/(s · m² · °C)",
+            "joule per second square meter degree celsius",
+            "joules per second square meter degree celsius";
+        @btu_it_per_hour_square_foot_degree_fahrenheit: 5.678_264_134_306_046;
+            "Btu (IT)/(hr · ft² · °F)",
             "British thermal unit (IT) per hour square foot degree Fahrenheit",
             "British thermal units (IT) per hour square foot degree Fahrenheit";
-        @btu_it_per_hour_square_inch_degree_fahrenheit: 8.176_700_353_400_707_E2; "BTU (IT)/(hr in² °F)",
+        @btu_it_per_hour_square_inch_degree_fahrenheit: 8.176_700_353_400_707_E2;
+            "Btu (IT)/(hr · in² · °F)",
             "British thermal unit (IT) per hour square inch degree Fahrenheit",
             "British thermal units (IT) per hour square inch degree Fahrenheit";
-        @btu_it_per_minute_square_foot_degree_fahrenheit: 3.406_958_480_583_627_4_E2; "BTU (IT)/(min ft² °F)",
+        @btu_it_per_minute_square_foot_degree_fahrenheit: 3.406_958_480_583_627_4_E2;
+            "Btu (IT)/(min · ft² · °F)",
             "British thermal unit (IT) per minute square foot degree Fahrenheit",
             "British thermal units (IT) per minute square foot degree Fahrenheit";
-        @btu_it_per_minute_square_inch_degree_fahrenheit: 4.906_020_212_040_425_E4; "BTU (IT)/(min in² °F)",
+        @btu_it_per_minute_square_inch_degree_fahrenheit: 4.906_020_212_040_425_E4;
+            "Btu (IT)/(min · in² · °F)",
             "British thermal unit (IT) per minute square inch degree Fahrenheit",
             "British thermal units (IT) per minute square inch degree Fahrenheit";
-        @btu_it_per_second_square_foot_degree_fahrenheit: 2.044_175_088_350_176_5_E4; "BTU (IT)/(s ft² °F)",
+        @btu_it_per_second_square_foot_degree_fahrenheit: 2.044_175_088_350_176_5_E4;
+            "Btu (IT)/(s · ft² · °F)",
             "British thermal unit (IT) per second square foot degree Fahrenheit",
             "British thermal units (IT) per second square foot degree Fahrenheit";
-        @btu_it_per_second_square_inch_degree_fahrenheit: 2.943_612_127_224_254_4_E6; "BTU (IT)/(s in² °F)",
+        @btu_it_per_second_square_inch_degree_fahrenheit: 2.943_612_127_224_254_4_E6;
+            "Btu (IT)/(s · in² · °F)",
             "British thermal unit (IT) per second square inch degree Fahrenheit",
             "British thermal units (IT) per second square inch degree Fahrenheit";
-        @btu_per_hour_square_foot_degree_fahrenheit: 5.674_464_473_928_946; "BTU/(hr ft² °F)",
+        @btu_per_hour_square_foot_degree_fahrenheit: 5.674_464_473_928_946; "Btu/(hr · ft² · °F)",
             "British thermal unit per hour square foot degree Fahrenheit",
             "British thermal units per hour square foot degree Fahrenheit";
-        @btu_per_hour_square_inch_degree_fahrenheit: 8.171_228_842_457_684_E2; "BTU/(hr in² °F)",
-            "British thermal unit per hour square inch degree Fahrenheit",
+        @btu_per_hour_square_inch_degree_fahrenheit: 8.171_228_842_457_684_E2;
+            "Btu/(hr · in² · °F)", "British thermal unit per hour square inch degree Fahrenheit",
             "British thermal units per hour square inch degree Fahrenheit";
-        @btu_per_minute_square_foot_degree_fahrenheit: 3.404_678_684_357_368_E2; "BTU/(min ft² °F)",
-            "British thermal unit per minute square foot degree Fahrenheit",
+        @btu_per_minute_square_foot_degree_fahrenheit: 3.404_678_684_357_368_E2;
+            "Btu/(min · ft² · °F)", "British thermal unit per minute square foot degree Fahrenheit",
             "British thermal units per minute square foot degree Fahrenheit";
-        @btu_per_minute_square_inch_degree_fahrenheit: 4.902_737_305_474_611_E4; "BTU/(min in² °F)",
-            "British thermal unit per minute square inch degree Fahrenheit",
+        @btu_per_minute_square_inch_degree_fahrenheit: 4.902_737_305_474_611_E4;
+            "Btu/(min · in² · °F)", "British thermal unit per minute square inch degree Fahrenheit",
             "British thermal units per minute square inch degree Fahrenheit";
-        @btu_per_second_square_foot_degree_fahrenheit: 2.042_807_210_614_421_E4; "BTU/(s ft² °F)",
-            "British thermal unit per second square foot degree Fahrenheit",
+        @btu_per_second_square_foot_degree_fahrenheit: 2.042_807_210_614_421_E4;
+            "Btu/(s · ft² · °F)", "British thermal unit per second square foot degree Fahrenheit",
             "British thermal units per second square foot degree Fahrenheit";
-        @btu_per_second_square_inch_degree_fahrenheit: 2.941_642_383_284_766_E6; "BTU/(s in² °F)",
-            "British thermal unit per second square inch degree Fahrenheit",
+        @btu_per_second_square_inch_degree_fahrenheit: 2.941_642_383_284_766_E6;
+            "Btu/(s · in² · °F)", "British thermal unit per second square inch degree Fahrenheit",
             "British thermal units per second square inch degree Fahrenheit";
     }
 }
@@ -215,7 +228,7 @@ mod tests {
             test::<m::attogram, t::second, ti::kelvin, ht::attogram_per_second_cubed_kelvin>();
             test::<m::zeptogram, t::second, ti::kelvin, ht::zeptogram_per_second_cubed_kelvin>();
             test::<m::yoctogram, t::second, ti::kelvin, ht::yoctogram_per_second_cubed_kelvin>();
-            
+
             test::<m::kilogram, t::second, ti::degree_celsius,
                 ht::kilogram_per_second_cubed_degree_celsius>();
 
@@ -223,8 +236,8 @@ mod tests {
                 M: m::Conversion<V>,
                 T: t::Conversion<V>,
                 TI: ti::Conversion<V>,
-                HT: ht::Conversion<V>,
-                >() {
+                HT: ht::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&HeatTransfer::new::<HT>(V::one()),
                     &(Mass::new::<M>(V::one())
                         / (Time::new::<T>(V::one())
@@ -236,27 +249,46 @@ mod tests {
 
         #[test]
         fn check_power_per_area_ti_units() {
-            test::<p::yottawatt, a::square_meter, ti::kelvin, ht::yottawatt_per_square_meter_kelvin>();
-            test::<p::zettawatt, a::square_meter, ti::kelvin, ht::zettawatt_per_square_meter_kelvin>();
+            test::<p::yottawatt, a::square_meter, ti::kelvin,
+                ht::yottawatt_per_square_meter_kelvin>();
+            test::<p::zettawatt, a::square_meter, ti::kelvin,
+                ht::zettawatt_per_square_meter_kelvin>();
             test::<p::exawatt, a::square_meter, ti::kelvin, ht::exawatt_per_square_meter_kelvin>();
-            test::<p::petawatt, a::square_meter, ti::kelvin, ht::petawatt_per_square_meter_kelvin>();
-            test::<p::terawatt, a::square_meter, ti::kelvin, ht::terawatt_per_square_meter_kelvin>();
-            test::<p::gigawatt, a::square_meter, ti::kelvin, ht::gigawatt_per_square_meter_kelvin>();
-            test::<p::megawatt, a::square_meter, ti::kelvin, ht::megawatt_per_square_meter_kelvin>();
-            test::<p::kilowatt, a::square_meter, ti::kelvin, ht::kilowatt_per_square_meter_kelvin>();
-            test::<p::hectowatt, a::square_meter, ti::kelvin, ht::hectowatt_per_square_meter_kelvin>();
-            test::<p::decawatt, a::square_meter, ti::kelvin, ht::decawatt_per_square_meter_kelvin>();
+            test::<p::petawatt, a::square_meter, ti::kelvin,
+                ht::petawatt_per_square_meter_kelvin>();
+            test::<p::terawatt, a::square_meter, ti::kelvin,
+                ht::terawatt_per_square_meter_kelvin>();
+            test::<p::gigawatt, a::square_meter, ti::kelvin,
+                ht::gigawatt_per_square_meter_kelvin>();
+            test::<p::megawatt, a::square_meter, ti::kelvin,
+                ht::megawatt_per_square_meter_kelvin>();
+            test::<p::kilowatt, a::square_meter, ti::kelvin,
+                ht::kilowatt_per_square_meter_kelvin>();
+            test::<p::hectowatt, a::square_meter, ti::kelvin,
+                ht::hectowatt_per_square_meter_kelvin>();
+            test::<p::decawatt, a::square_meter, ti::kelvin,
+                ht::decawatt_per_square_meter_kelvin>();
             test::<p::watt, a::square_meter, ti::kelvin, ht::watt_per_square_meter_kelvin>();
-            test::<p::deciwatt, a::square_meter, ti::kelvin, ht::deciwatt_per_square_meter_kelvin>();
-            test::<p::centiwatt, a::square_meter, ti::kelvin, ht::centiwatt_per_square_meter_kelvin>();
-            test::<p::milliwatt, a::square_meter, ti::kelvin, ht::milliwatt_per_square_meter_kelvin>();
-            test::<p::microwatt, a::square_meter, ti::kelvin, ht::microwatt_per_square_meter_kelvin>();
-            test::<p::nanowatt, a::square_meter, ti::kelvin, ht::nanowatt_per_square_meter_kelvin>();
-            test::<p::picowatt, a::square_meter, ti::kelvin, ht::picowatt_per_square_meter_kelvin>();
-            test::<p::femtowatt, a::square_meter, ti::kelvin, ht::femtowatt_per_square_meter_kelvin>();
-            test::<p::attowatt, a::square_meter, ti::kelvin, ht::attowatt_per_square_meter_kelvin>();
-            test::<p::zeptowatt, a::square_meter, ti::kelvin, ht::zeptowatt_per_square_meter_kelvin>();
-            test::<p::yoctowatt, a::square_meter, ti::kelvin, ht::yoctowatt_per_square_meter_kelvin>();
+            test::<p::deciwatt, a::square_meter, ti::kelvin,
+                ht::deciwatt_per_square_meter_kelvin>();
+            test::<p::centiwatt, a::square_meter, ti::kelvin,
+                ht::centiwatt_per_square_meter_kelvin>();
+            test::<p::milliwatt, a::square_meter, ti::kelvin,
+                ht::milliwatt_per_square_meter_kelvin>();
+            test::<p::microwatt, a::square_meter, ti::kelvin,
+                ht::microwatt_per_square_meter_kelvin>();
+            test::<p::nanowatt, a::square_meter, ti::kelvin,
+                ht::nanowatt_per_square_meter_kelvin>();
+            test::<p::picowatt, a::square_meter, ti::kelvin,
+                ht::picowatt_per_square_meter_kelvin>();
+            test::<p::femtowatt, a::square_meter, ti::kelvin,
+                ht::femtowatt_per_square_meter_kelvin>();
+            test::<p::attowatt, a::square_meter, ti::kelvin,
+                ht::attowatt_per_square_meter_kelvin>();
+            test::<p::zeptowatt, a::square_meter, ti::kelvin,
+                ht::zeptowatt_per_square_meter_kelvin>();
+            test::<p::yoctowatt, a::square_meter, ti::kelvin,
+                ht::yoctowatt_per_square_meter_kelvin>();
 
             test::<p::watt, a::square_kilometer, ti::degree_celsius,
                 ht::watt_per_square_kilometer_degree_celsius>();
@@ -271,8 +303,8 @@ mod tests {
                 P: p::Conversion<V>,
                 A: a::Conversion<V>,
                 TI: ti::Conversion<V>,
-                HT: ht::Conversion<V>,
-                >() {
+                HT: ht::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&HeatTransfer::new::<HT>(V::one()),
                     &(Power::new::<P>(V::one())
                         / (Area::new::<A>(V::one()) * TemperatureInterval::new::<TI>(V::one()))));
@@ -310,14 +342,13 @@ mod tests {
             test::<e::btu, t::second, a::square_inch, ti::degree_fahrenheit,
                 ht::btu_per_second_square_inch_degree_fahrenheit>();
 
-
             fn test<
                 E: e::Conversion<V>,
                 T: t::Conversion<V>,
                 A: a::Conversion<V>,
                 TI: ti::Conversion<V>,
-                HT: ht::Conversion<V>,
-                >() {
+                HT: ht::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&HeatTransfer::new::<HT>(V::one()),
                     &(Energy::new::<E>(V::one())
                         / (Time::new::<T>(V::one())
diff --git a/src/si/molar_energy.rs b/src/si/molar_energy.rs
index 98f3328..a26b29d 100644
--- a/src/si/molar_energy.rs
+++ b/src/si/molar_energy.rs
@@ -1,10 +1,9 @@
-//! Molar energy (base units (kg m²)/s⁻²mol).
-//! Commonly expressed in terms of derived quantity energy (derived units J/mol)
+//! Molar energy (base unit joule per mole, kg · m² · s⁻² · mol⁻¹).
 
 quantity! {
-    /// Molar energy (base units (kg m²)/s⁻²mol, derived units J/mol).
+    /// Molar energy (base unit joule per mole, kg · m² · s⁻² · mol⁻¹).
     quantity: MolarEnergy; "molar energy";
-    /// Dimension of molar energy, L²M¹T⁻²N⁻¹ (base units (kg m²)/s⁻²mol, derived units J/mol).
+    /// Dimension of molar energy, L²MT⁻²N⁻¹ (base unit joule per mole, kg · m² · s⁻² · mol⁻¹).
     dimension: ISQ<
         P2,     // length
         P1,     // mass
@@ -14,102 +13,101 @@ quantity! {
         N1,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow expression in base units, though this is rare.
         /// Molar energy expressed in base units. Equivalent to J/mol.
-        @kilogram_square_meter_per_squared_second_mole: prefix!(kilo) / prefix!(kilo); "(kg m²)/s⁻²mol",
-            "kilogram square meter per squared second mole",
-            "kilograms square meter per squared second mole";
-        
+        @kilogram_square_meter_per_second_squared_mole: prefix!(kilo) / prefix!(kilo);
+            "kg · m²/(s² · mol)", "kilogram square meter per second squared mole",
+            "kilograms square meter per second squared mole";
+
         // Molar energy is commonly expressed in terms of derived unit joule
-        @yottajoule_per_mole: prefix!(yotta); "YJ/mol", "yottajoule per mole", "yottajoules per mole";
-        @zettajoule_per_mole: prefix!(zetta); "ZJ/mol", "zettajoule per mole", "zettajoules per mole";
+        @yottajoule_per_mole: prefix!(yotta); "YJ/mol", "yottajoule per mole",
+            "yottajoules per mole";
+        @zettajoule_per_mole: prefix!(zetta); "ZJ/mol", "zettajoule per mole",
+            "zettajoules per mole";
         @exajoule_per_mole: prefix!(exa); "EJ/mol", "exajoule per mole", "exajoules per mole";
         @petajoule_per_mole: prefix!(peta); "PJ/mol", "petajoule per mole", "petajoules per mole";
         @terajoule_per_mole: prefix!(tera); "TJ/mol", "terajoule per mole", "terajoules per mole";
         @gigajoule_per_mole: prefix!(giga); "GJ/mol", "gigajoule per mole", "gigajoules per mole";
         @megajoule_per_mole: prefix!(mega); "MJ/mol", "megajoule per mole", "megajoules per mole";
         @kilojoule_per_mole: prefix!(kilo); "kJ/mol", "kilojoule per mole", "kilojoules per mole";
-        @hectojoule_per_mole: prefix!(hecto); "hJ/mol", "hectojoule per mole", "hectojoules per mole";
+        @hectojoule_per_mole: prefix!(hecto); "hJ/mol", "hectojoule per mole",
+            "hectojoules per mole";
         @decajoule_per_mole: prefix!(deca); "daJ/mol", "decajoule per mole", "decajoules per mole";
-        /// The derived unit of molar energy. Equivalent to (kg m²)/s⁻²mol.
+        /// The derived unit of molar energy. Equivalent to kg · m²/(s² · mol).
         @joule_per_mole: prefix!(none); "J/mol", "joule per mole", "joules per mole";
         @decijoule_per_mole: prefix!(deci); "dJ/mol", "decijoule per mole", "decijoules per mole";
-        @centijoule_per_mole: prefix!(centi); "cJ/mol", "centijoule per mole", "centijoules per mole";
-        @millijoule_per_mole: prefix!(milli); "mJ/mol", "millijoule per mole", "millijoules per mole";
-        @microjoule_per_mole: prefix!(micro); "µJ/mol", "microjoule per mole", "microjoules per mole";
+        @centijoule_per_mole: prefix!(centi); "cJ/mol", "centijoule per mole",
+            "centijoules per mole";
+        @millijoule_per_mole: prefix!(milli); "mJ/mol", "millijoule per mole",
+            "millijoules per mole";
+        @microjoule_per_mole: prefix!(micro); "µJ/mol", "microjoule per mole",
+            "microjoules per mole";
         @nanojoule_per_mole: prefix!(nano); "nJ/mol", "nanojoule per mole", "nanojoules per mole";
         @picojoule_per_mole: prefix!(pico); "pJ/mol", "picojoule per mole", "picojoules per mole";
-        @femtojoule_per_mole: prefix!(femto); "fJ/mol", "femtojoule per mole", "femtojoules per mole";
+        @femtojoule_per_mole: prefix!(femto); "fJ/mol", "femtojoule per mole",
+            "femtojoules per mole";
         @attojoule_per_mole: prefix!(atto); "aJ/mol", "attojoule per mole", "attojoules per mole";
-        @zeptojoule_per_mole: prefix!(zepto); "zJ/mol", "zeptojoule per mole", "zeptojoules per mole";
-        @yoctojoule_per_mole: prefix!(yocto); "yJ/mol", "yoctojoule per mole", "yoctojoules per mole";
-        
-        
-        @petawatt_hour_per_mole: 3.6_E18; "PW · h / mol",
-            "petawatt hour per mole", "petawatt hours per mole";
-        @terawatt_hour_per_mole: 3.6_E15; "TW · h / mol",
-            "terawatt hour per mole", "terawatt hours per mole";
-        @gigawatt_hour_per_mole: 3.6_E12; "GW · h / mol",
-            "gigawatt hour per mole", "gigawatt hours per mole";
-        @megawatt_hour_per_mole: 3.6_E9; "MW · h / mol",
-            "megawatt hour per mole", "megawatt hours per mole";
-        @kilowatt_hour_per_mole: 3.6_E6; "kW · h / mol",
-            "kilowatt hour per mole", "kilowatt hours per mole";
-        @hectowatt_hour_per_mole: 3.6_E5; "hW · h / mol",
-            "hectowatt hour per mole", "hectowatt hours per mole";
-        @decawatt_hour_per_mole: 3.6_E4; "daW · h / mol",
-            "decawatt hour per mole", "decawatt hours per mole";
-        @watt_hour_per_mole: 3.6_E3; "W · h / mol",
-            "watt hour per mole", "watt hours per mole";
-        @milliwatt_hour_per_mole: 3.6_E0; "mW · h / mol",
-            "milliwatt hour per mole", "milliwatt hours per mole";
-        @microwatt_hour_per_mole: 3.6_E-3; "µW · h / mol",
-            "microwatt hour per mole", "microwatt hours per mole";
+        @zeptojoule_per_mole: prefix!(zepto); "zJ/mol", "zeptojoule per mole",
+            "zeptojoules per mole";
+        @yoctojoule_per_mole: prefix!(yocto); "yJ/mol", "yoctojoule per mole",
+            "yoctojoules per mole";
+
+        @petawatt_hour_per_mole: 3.6_E18; "PW · h/mol", "petawatt hour per mole",
+            "petawatt hours per mole";
+        @terawatt_hour_per_mole: 3.6_E15; "TW · h/mol", "terawatt hour per mole",
+            "terawatt hours per mole";
+        @gigawatt_hour_per_mole: 3.6_E12; "GW · h/mol", "gigawatt hour per mole",
+            "gigawatt hours per mole";
+        @megawatt_hour_per_mole: 3.6_E9; "MW · h/mol", "megawatt hour per mole",
+            "megawatt hours per mole";
+        @kilowatt_hour_per_mole: 3.6_E6; "kW · h/mol", "kilowatt hour per mole",
+            "kilowatt hours per mole";
+        @hectowatt_hour_per_mole: 3.6_E5; "hW · h/mol", "hectowatt hour per mole",
+            "hectowatt hours per mole";
+        @decawatt_hour_per_mole: 3.6_E4; "daW · h/mol", "decawatt hour per mole",
+            "decawatt hours per mole";
+        @watt_hour_per_mole: 3.6_E3; "W · h/mol", "watt hour per mole", "watt hours per mole";
+        @milliwatt_hour_per_mole: 3.6_E0; "mW · h/mol", "milliwatt hour per mole",
+            "milliwatt hours per mole";
+        @microwatt_hour_per_mole: 3.6_E-3; "µW · h/mol", "microwatt hour per mole",
+            "microwatt hours per mole";
 
-        @btu_it_per_mole: 1.055_056_E3; "Btu (IT) / mol",
-            "British thermal unit (IT) per mole", "British thermal units (IT) per mole";
-        @btu_per_mole: 1.054_350_E3; "Btu / mol",
-            "British thermal unit per mole", "British thermal units per mole";
-        @btu_39_per_mole: 1.059_67_E3; "Btu₃₉ / mol",
-            "British thermal unit (39 °F) per mole", "British thermal units (39 °F) per mole";
-        @btu_59_per_mole: 1.054_80_E3; "Btu₅₉ / mol",
-            "British thermal unit (59 °F) per mole", "British thermal units (59 °F) per mole";
-        @btu_60_per_mole: 1.054_68_E3; "Btu₆₀ / mol",
-            "British thermal unit (60 °F) per mole", "British thermal units (60 °F) per mole";
-        @calorie_it_per_mole: 4.186_8_E0; "cal (IT) / mol",
-            "calorie (IT)", "calories (IT) per mole";
-        @calorie_per_mole: 4.184_E0; "cal / mol",
-            "calorie per mole", "calories per mole";
-        @calorie_15_per_mole: 4.185_80_E0; "cal₁₅ / mol",
-            "calorie (15 °C) per mole", "calories (15 °C) per mole";
-        @calorie_20_per_mole: 4.181_90_E0; "cal₂₀ / mol",
-            "calorie (20 °C) per mole", "calories (20 °C) per mole";
-        @calorie_it_nutrition_per_mole: 4.186_8_E3; "Cal (IT) / mol",
-            "Calorie (IT) per mole", "Calories (IT) per mole";
-        @calorie_nutrition_per_mole: 4.184_E3; "Cal / mol",
-            "Calorie per mole", "Calories per mole";
-        @electronvolt_per_mole: 1.602_177_E-19; "eV / mol",
-            "electronvolt per mole", "electronvolts per mole";
-        @erg_per_mole: 1.0_E-7; "erg / mol",
-            "erg per mole", "ergs per mole";
-        @foot_poundal_per_mole: 4.214_011_E-2; "ft · pdl / mol",
-            "foot poundal per mole", "foot poundals per mole";
-        @foot_pound_force_per_mole: 1.355_818_E0; "ft · lbf / mol",
-            "foot pound-force per mole", "foot pounds-force per mole";
-        @kilocalorie_it_per_mole: 4.186_8_E3; "kcal (IT) / mol",
-            "kilocalorie (IT) per mole", "kilocalories (IT) per mole";
-        @kilocalorie_per_mole: 4.184_E3; "kcal / mol",
-            "kilocalorie per mole", "kilocalories per mole";
-        @quad_per_mole: 1.055_056_E18; "10¹⁵ Btu (IT) / mol",
-            "quad per mole", "quads per mole";
-        @therm_ec_per_mole: 1.055_06_E8; "thm (EC) / mol",
-            "therm (EC) per mole", "therms (EC) per mole";
-        @therm_us_per_mole: 1.054_804_E8; "thm / mol",
-            "therm per mole", "therms per mole";
-        @ton_tnt_per_mole: 4.184_E9; "t of TNT / mol",
-            "ton of TNT per mole", "tons of TNT per mole";
-        @watt_second_per_mole: 1.0_E0; "W · s / mol",
-            "watt second per mole", "watt seconds per mole";
+        @btu_it_per_mole: 1.055_056_E3; "Btu (IT)/mol", "British thermal unit (IT) per mole",
+            "British thermal units (IT) per mole";
+        @btu_per_mole: 1.054_350_E3; "Btu/mol", "British thermal unit per mole",
+            "British thermal units per mole";
+        @btu_39_per_mole: 1.059_67_E3; "Btu₃₉/mol", "British thermal unit (39 °F) per mole",
+            "British thermal units (39 °F) per mole";
+        @btu_59_per_mole: 1.054_80_E3; "Btu₅₉/mol", "British thermal unit (59 °F) per mole",
+            "British thermal units (59 °F) per mole";
+        @btu_60_per_mole: 1.054_68_E3; "Btu₆₀/mol", "British thermal unit (60 °F) per mole",
+            "British thermal units (60 °F) per mole";
+        @calorie_it_per_mole: 4.186_8_E0; "cal (IT)/mol", "calorie (IT) per mole",
+            "calories (IT) per mole";
+        @calorie_per_mole: 4.184_E0; "cal/mol", "calorie per mole", "calories per mole";
+        @calorie_15_per_mole: 4.185_80_E0; "cal₁₅/mol", "calorie (15 °C) per mole",
+            "calories (15 °C) per mole";
+        @calorie_20_per_mole: 4.181_90_E0; "cal₂₀/mol", "calorie (20 °C) per mole",
+            "calories (20 °C) per mole";
+        @calorie_it_nutrition_per_mole: 4.186_8_E3; "Cal (IT)/mol", "Calorie (IT) per mole",
+            "Calories (IT) per mole";
+        @calorie_nutrition_per_mole: 4.184_E3; "Cal/mol", "Calorie per mole", "Calories per mole";
+        @electronvolt_per_mole: 1.602_177_E-19; "eV/mol", "electronvolt per mole",
+            "electronvolts per mole";
+        @erg_per_mole: 1.0_E-7; "erg/mol", "erg per mole", "ergs per mole";
+        @foot_poundal_per_mole: 4.214_011_E-2; "ft · pdl/mol", "foot poundal per mole",
+            "foot poundals per mole";
+        @foot_pound_force_per_mole: 1.355_818_E0; "ft · lbf/mol", "foot pound-force per mole",
+            "foot pounds-force per mole";
+        @kilocalorie_it_per_mole: 4.186_8_E3; "kcal (IT)/mol", "kilocalorie (IT) per mole",
+            "kilocalories (IT) per mole";
+        @kilocalorie_per_mole: 4.184_E3; "kcal/mol", "kilocalorie per mole",
+            "kilocalories per mole";
+        @quad_per_mole: 1.055_056_E18; "10¹⁵ Btu (IT)/mol", "quad per mole", "quads per mole";
+        @therm_ec_per_mole: 1.055_06_E8; "thm (EC)/mol", "therm (EC) per mole",
+            "therms (EC) per mole";
+        @therm_us_per_mole: 1.054_804_E8; "thm/mol", "therm per mole", "therms per mole";
+        @ton_tnt_per_mole: 4.184_E9; "t of TNT/mol", "ton of TNT per mole", "tons of TNT per mole";
+        @watt_second_per_mole: 1.0_E0; "W · s/mol", "watt second per mole", "watt seconds per mole";
     }
 }
 
@@ -141,7 +139,7 @@ mod tests {
 
         #[test]
         fn check_base_units() {
-            test::<m::kilogram, me::kilogram_square_meter_per_squared_second_mole>();
+            test::<m::kilogram, me::kilogram_square_meter_per_second_squared_mole>();
 
             fn test<M: m::Conversion<V>, ME: me::Conversion<V>>() {
                 Test::assert_approx_eq(&MolarEnergy::new::<ME>(V::one()),
@@ -220,4 +218,3 @@ mod tests {
         }
     }
 }
-
diff --git a/src/si/molar_mass.rs b/src/si/molar_mass.rs
index 680a9cf..88f769d 100644
--- a/src/si/molar_mass.rs
+++ b/src/si/molar_mass.rs
@@ -1,9 +1,9 @@
-//! Molar mass (base units kg/mol).
+//! Molar mass (base unit kilogram per mole, kg · mol⁻¹).
 
 quantity! {
-    /// Molar mass (base units kg/mol).
+    /// Molar mass (base unit kilogram per mole, kg · mol⁻¹).
     quantity: MolarMass; "molar mass";
-    /// Dimension of molar mass, M¹N⁻¹ (kg/mol).
+    /// Dimension of molar mass, MN⁻¹ (base unit kilogram per mole, kg · mol⁻¹).
     dimension: ISQ<
         Z0,     // length
         P1,     // mass
@@ -107,4 +107,3 @@ mod tests {
         }
     }
 }
-
diff --git a/src/si/specific_heat_capacity.rs b/src/si/specific_heat_capacity.rs
index ecf4572..1fdbf59 100644
--- a/src/si/specific_heat_capacity.rs
+++ b/src/si/specific_heat_capacity.rs
@@ -1,22 +1,21 @@
-//! Quantity of specific heat capacity, often called specific heat.
-//! Base unit: square meter per squared second kelvin: m² · s⁻² · K⁻¹.
-//! Commonly expressed using derived unit energy: joule per kilogram kelvin, J · kg⁻¹ · K⁻¹.
-//! Of the kind Kind shared with [temperature interval][ti], as this quantity relates
-//! to change of temperature. Not of kind TemperatureKind, used by [thermodynamic temperature][tt].
-//! See [thermodynamic temperature][tt] for a full explanation.
+//! Specific heat capacity (base unit joule per kilogram kelvin, m² · s⁻² · K⁻¹).
 //!
 //! This quantity might be used to define the heat capacity of a material. To define heat capacity
 //! of an object, use [heat capacity][hc].
-//! 
+//!
+//! Specific heat capacity has the same kind as [temperature interval][ti], as this quantity
+//! relates to change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic
+//! temperature][tt]. See [thermodynamic temperature][tt] for a full explanation.
+//!
 //! [ti]: ../temperature_interval/index.html
 //! [tt]: ../thermodynamic_temperature/index.html
-//! [shc]: ../heat_capacity/index.html
+//! [hc]: ../heat_capacity/index.html
 
 quantity! {
-    /// Quantity of specific heat capacity, often called specific heat.
-    /// (square meter per squared second kelvin: m² · s⁻² · K⁻¹).
+    /// Specific heat capacity (base unit joule per kilogram kelvin, m² · s⁻² · K⁻¹).
     quantity: SpecificHeatCapacity; "specific heat capacity";
-    /// Dimension of specific heat capacity, L²T⁻²Th⁻¹ (square meter per squared second kelvin: m² · s⁻² · K⁻¹).
+    /// Dimension of specific heat capacity, L²T⁻²Th⁻¹ (base unit joule per kilogram kelvin, m² ·
+    /// s⁻² · K⁻¹).
     dimension: ISQ<
         P2,     // length
         Z0,     // mass
@@ -26,89 +25,101 @@ quantity! {
         Z0,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow for units directly in base units
-        @square_kilometer_per_squared_second_kelvin: prefix!(kilo) * prefix!(kilo); "km²/s²K",
-            "square kilometer per squared second kelvin", "square kilometers per squared second kelvin";
-        /// The derived unit of specific heat capacity expressed in base units. Equivalent to J/kgK.
-        @square_meter_per_squared_second_kelvin: prefix!(none); "m²/s²K",
-            "square meter per squared second kelvin", "square meters per squared second kelvin";
-        @square_centimeter_per_squared_second_kelvin: prefix!(centi) * prefix!(centi); "cm²/s²K",
-            "square centimeter per squared second kelvin", "square centimeters per squared second kelvin";
-        @square_millimeter_per_squared_second_kelvin: prefix!(milli) * prefix!(milli); "mm²/s²K",
-            "square millimeter per squared second kelvin", "square millimeters per squared second kelvin";
-        @square_micrometer_per_squared_second_kelvin: prefix!(micro) * prefix!(micro); "µm²/s²K",
-            "square micrometer per squared second kelvin", "square micrometers per squared second kelvin";
+        @square_kilometer_per_second_squared_kelvin: prefix!(kilo) * prefix!(kilo); "km²/(s² · K)",
+            "square kilometer per second squared kelvin",
+            "square kilometers per second squared kelvin";
+        /// The derived unit of specific heat capacity expressed in base units. Equivalent to
+        /// J/(kg · K).
+        @square_meter_per_second_squared_kelvin: prefix!(none); "m²/(s² · K)",
+            "square meter per second squared kelvin", "square meters per second squared kelvin";
+        @square_centimeter_per_second_squared_kelvin: prefix!(centi) * prefix!(centi);
+            "cm²/(s² · K)", "square centimeter per second squared kelvin",
+            "square centimeters per second squared kelvin";
+        @square_millimeter_per_second_squared_kelvin: prefix!(milli) * prefix!(milli);
+            "mm²/(s² · K)", "square millimeter per second squared kelvin",
+            "square millimeters per second squared kelvin";
+        @square_micrometer_per_second_squared_kelvin: prefix!(micro) * prefix!(micro);
+            "µm²/(s² · K)", "square micrometer per second squared kelvin",
+            "square micrometers per second squared kelvin";
 
-        // Specific heat capacity is much more commonly expressed in terms of energy / (mass temperature).
-        @yottajoule_per_kilogram_kelvin: prefix!(yotta); "YJ/kgK", 
+        // Specific heat capacity is much more commonly expressed in terms of energy / (mass
+        // temperature).
+        @yottajoule_per_kilogram_kelvin: prefix!(yotta); "YJ/(kg · K)",
             "yottajoule per kilogram kelvin", "yottajoules per kilogram kelvin";
-        @zettajoule_per_kilogram_kelvin: prefix!(zetta); "ZJ/kgK",
+        @zettajoule_per_kilogram_kelvin: prefix!(zetta); "ZJ/(kg · K)",
             "zettajoule per kilogram kelvin", "zettajoules per kilogram kelvin";
-        @exajoule_per_kilogram_kelvin: prefix!(exa); "EJ/kgK",
+        @exajoule_per_kilogram_kelvin: prefix!(exa); "EJ/(kg · K)",
             "exajoule per kilogram kelvin", "exajoules per kilogram kelvin";
-        @petajoule_per_kilogram_kelvin: prefix!(peta); "PJ/kgK",
+        @petajoule_per_kilogram_kelvin: prefix!(peta); "PJ/(kg · K)",
             "petajoule per kilogram kelvin", "petajoules per kilogram kelvin";
-        @terajoule_per_kilogram_kelvin: prefix!(tera); "TJ/kgK",
+        @terajoule_per_kilogram_kelvin: prefix!(tera); "TJ/(kg · K)",
             "terajoule per kilogram kelvin", "terajoules per kilogram kelvin";
-        @gigajoule_per_kilogram_kelvin: prefix!(giga); "GJ/kgK",
+        @gigajoule_per_kilogram_kelvin: prefix!(giga); "GJ/(kg · K)",
             "gigajoule per kilogram kelvin", "gigajoules per kilogram kelvin";
-        @megajoule_per_kilogram_kelvin: prefix!(mega); "MJ/kgK",
+        @megajoule_per_kilogram_kelvin: prefix!(mega); "MJ/(kg · K)",
             "megajoule per kilogram kelvin", "megajoules per kilogram kelvin";
-        @kilojoule_per_kilogram_kelvin: prefix!(kilo); "kJ/kgK",
+        @kilojoule_per_kilogram_kelvin: prefix!(kilo); "kJ/(kg · K)",
             "kilojoule per kilogram kelvin", "kilojoules per kilogram kelvin";
-        @hectojoule_per_kilogram_kelvin: prefix!(hecto); "hJ/kgK",
+        @hectojoule_per_kilogram_kelvin: prefix!(hecto); "hJ/(kg · K)",
             "hectojoule per kilogram kelvin", "hectojoules per kilogram kelvin";
-        @decajoule_per_kilogram_kelvin: prefix!(deca); "daJ/kgK",
+        @decajoule_per_kilogram_kelvin: prefix!(deca); "daJ/(kg · K)",
             "decajoule per kilogram kelvin", "decajoules per kilogram kelvin";
-        /// Derived unit of specific heat capacity expressed in derived units. Equivalent to m²/s²K.
-        @joule_per_kilogram_kelvin: prefix!(none); "J/kgK",
+        /// Derived unit of specific heat capacity expressed in derived units. Equivalent to
+        /// m²/(s² · K).
+        @joule_per_kilogram_kelvin: prefix!(none); "J/(kg · K)",
             "joule per kilogram kelvin", "joules per kilogram kelvin";
-        @decijoule_per_kilogram_kelvin: prefix!(deci); "dJ/kgK",
+        @decijoule_per_kilogram_kelvin: prefix!(deci); "dJ/(kg · K)",
             "decijoule per kilogram kelvin", "decijoules per kilogram kelvin";
-        @centijoule_per_kilogram_kelvin: prefix!(centi); "cJ/kgK",
+        @centijoule_per_kilogram_kelvin: prefix!(centi); "cJ/(kg · K)",
             "centijoule per kilogram kelvin", "centijoules per kilogram kelvin";
-        @millijoule_per_kilogram_kelvin: prefix!(milli); "mJ/kgK",
+        @millijoule_per_kilogram_kelvin: prefix!(milli); "mJ/(kg · K)",
             "millijoule per kilogram kelvin", "millijoules per kilogram kelvin";
-        @microjoule_per_kilogram_kelvin: prefix!(micro); "µJ/kgK",
+        @microjoule_per_kilogram_kelvin: prefix!(micro); "µJ/(kg · K)",
             "microjoule per kilogram kelvin", "microjoules per kilogram kelvin";
-        @nanojoule_per_kilogram_kelvin: prefix!(nano); "nJ/kgK",
+        @nanojoule_per_kilogram_kelvin: prefix!(nano); "nJ/(kg · K)",
             "nanojoule per kilogram kelvin", "nanojoules per kilogram kelvin";
-        @picojoule_per_kilogram_kelvin: prefix!(pico); "pJ/kgK",
+        @picojoule_per_kilogram_kelvin: prefix!(pico); "pJ/(kg · K)",
             "picojoule per kilogram kelvin", "picojoules per kilogram kelvin";
-        @femtojoule_per_kilogram_kelvin: prefix!(femto); "fJ/kgK",
+        @femtojoule_per_kilogram_kelvin: prefix!(femto); "fJ/(kg · K)",
             "femtojoule per kilogram kelvin", "femtojoules per kilogram kelvin";
-        @attojoule_per_kilogram_kelvin: prefix!(atto); "aJ/kgK",
+        @attojoule_per_kilogram_kelvin: prefix!(atto); "aJ/(kg · K)",
             "attojoule per kilogram kelvin", "attojoules per kilogram kelvin";
-        @zeptojoule_per_kilogram_kelvin: prefix!(zepto); "zJ/kgK",
+        @zeptojoule_per_kilogram_kelvin: prefix!(zepto); "zJ/(kg · K)",
             "zeptojoule per kilogram kelvin", "zeptojoules per kilogram kelvin";
-        @yoctojoule_per_kilogram_kelvin: prefix!(yocto); "yJ/kgK",
+        @yoctojoule_per_kilogram_kelvin: prefix!(yocto); "yJ/(kg · K)",
             "yoctojoule per kilogram kelvin", "yoctojoules per kilogram kelvin";
 
-        @kilojoule_per_kilogram_degree_celsius: 1.0_E3; "kJ/kg°C",
+        @kilojoule_per_kilogram_degree_celsius: 1.0_E3; "kJ/(kg · °C)",
             "kilojoule per kilogram degree celsius", "kilojoules per kilogram degree celsius";
-        @kilojoule_per_gram_degree_celsius: 1.0_E6; "kJ/g°C",
+        @kilojoule_per_gram_degree_celsius: 1.0_E6; "kJ/(g · °C)",
             "kilojoule per gram degree celsius", "kilojoules per gram degree celsius";
-        @joule_per_kilogram_degree_celsius: 1.0_E0; "J/kg°C",
+        @joule_per_kilogram_degree_celsius: 1.0_E0; "J/(kg · °C)",
             "joule per kilogram degree celsius", "joules per kilogram degree celsius";
-        @joule_per_gram_degree_celsius: 1.0_E3; "J/g°C",
+        @joule_per_gram_degree_celsius: 1.0_E3; "J/(g · °C)",
             "joule per gram degree celsius", "joules per gram degree celsius";
-        @millijoule_per_kilogram_degree_celsius: 1.0_E-3; "mJ/kg°C",
+        @millijoule_per_kilogram_degree_celsius: 1.0_E-3; "mJ/(kg · °C)",
             "millijoule per kilogram degree celsius", "millijoules per kilogram degree celsius";
-        @millijoule_per_gram_degree_celsius: 1.0_E0; "mJ/g°C",
+        @millijoule_per_gram_degree_celsius: 1.0_E0; "mJ/(g · °C)",
             "millijoule per gram degree celsius", "millijoules per gram degree celsius";
 
-        @btu_per_ounce_degree_fahrenheit: 6.694_399_058_608_398_E4; "BTU/(oz °F)",
-            "BTU per ounce degree Fahrenheit", "BTUs per ounce degree Fahrenheit";
-        @btu_it_per_ounce_degree_fahrenheit: 6.698_881_674_187_076_E4; "BTU (IT)/(oz °F)",
-            "BTU (IT) per ounce degree Fahrenheit", "BTUs (IT) per ounce degree Fahrenheit";
-        @btu_per_pound_degree_fahrenheit: 4.183_998_673_699_118_E3; "BTU/(lb °F)",
-            "BTU per pound degree Fahrenheit", "BTUs per pound degree Fahrenheit";
-        @btu_it_per_pound_degree_fahrenheit: 4.186_800_307_941_667_E3; "BTU (IT)/(lb °F)",
-            "BTU (IT) per pound degree Fahrenheit", "BTUs (IT) per pound degree Fahrenheit";
-        @btu_per_ton_degree_fahrenheit: 1.897_829_999_999_999_999_E0; "BTU/(t °F)",
-            "BTU per ton degree Fahrenheit", "BTUs per ton degree Fahrenheit";
-        @btu_it_per_ton_degree_fahrenheit: 1.899_100_799_999_999_999_E0; "BTU (IT)/(t °F)",
-            "BTU (IT) per ton degree Fahrenheit", "BTUs (IT) per ton degree Fahrenheit";
+        @btu_per_ounce_degree_fahrenheit: 6.694_399_058_608_398_E4; "Btu/(oz · °F)",
+            "British thermal unit per ounce degree Fahrenheit",
+            "British thermal units per ounce degree Fahrenheit";
+        @btu_it_per_ounce_degree_fahrenheit: 6.698_881_674_187_076_E4; "Btu (IT)/(oz · °F)",
+            "British thermal unit (IT) per ounce degree Fahrenheit",
+            "British thermal units (IT) per ounce degree Fahrenheit";
+        @btu_per_pound_degree_fahrenheit: 4.183_998_673_699_118_E3; "Btu/(lb · °F)",
+            "British thermal unit per pound degree Fahrenheit",
+            "British thermal units per pound degree Fahrenheit";
+        @btu_it_per_pound_degree_fahrenheit: 4.186_800_307_941_667_E3; "Btu (IT)/(lb · °F)",
+            "British thermal unit (IT) per pound degree Fahrenheit",
+            "British thermal units (IT) per pound degree Fahrenheit";
+        @btu_per_ton_degree_fahrenheit: 1.897_829_999_999_999_999_E0; "Btu/(t · °F)",
+            "British thermal unit per ton degree Fahrenheit",
+            "British thermal units per ton degree Fahrenheit";
+        @btu_it_per_ton_degree_fahrenheit: 1.899_100_799_999_999_999_E0; "Btu (IT)/(t · °F)",
+            "British thermal unit (IT) per ton degree Fahrenheit",
+            "British thermal units (IT) per ton degree Fahrenheit";
     }
 }
 
@@ -136,18 +147,23 @@ mod tests {
 
         #[test]
         fn check_base_units() {
-            test::<l::kilometer, t::second, ti::kelvin, shc::square_kilometer_per_squared_second_kelvin>();
-            test::<l::meter, t::second, ti::kelvin, shc::square_meter_per_squared_second_kelvin>();
-            test::<l::centimeter, t::second, ti::kelvin, shc::square_centimeter_per_squared_second_kelvin>();
-            test::<l::millimeter, t::second, ti::kelvin, shc::square_millimeter_per_squared_second_kelvin>();
-            test::<l::micrometer, t::second, ti::kelvin, shc::square_micrometer_per_squared_second_kelvin>();
+            test::<l::kilometer, t::second, ti::kelvin,
+                shc::square_kilometer_per_second_squared_kelvin>();
+            test::<l::meter, t::second, ti::kelvin,
+                shc::square_meter_per_second_squared_kelvin>();
+            test::<l::centimeter, t::second, ti::kelvin,
+                shc::square_centimeter_per_second_squared_kelvin>();
+            test::<l::millimeter, t::second, ti::kelvin,
+                shc::square_millimeter_per_second_squared_kelvin>();
+            test::<l::micrometer, t::second, ti::kelvin,
+                shc::square_micrometer_per_second_squared_kelvin>();
 
             fn test<
                 L: l::Conversion<V>,
                 T: t::Conversion<V>,
                 TI: ti::Conversion<V>,
-                SHC: shc::Conversion<V>,
-                >() {
+                SHC: shc::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&SpecificHeatCapacity::new::<SHC>(V::one()),
                     &((Length::new::<L>(V::one()) * Length::new::<L>(V::one()))
                         / (Time::new::<T>(V::one())
@@ -179,7 +195,6 @@ mod tests {
             test::<e::attojoule, m::kilogram, ti::kelvin, shc::attojoule_per_kilogram_kelvin>();
             test::<e::zeptojoule, m::kilogram, ti::kelvin, shc::zeptojoule_per_kilogram_kelvin>();
             test::<e::yoctojoule, m::kilogram, ti::kelvin, shc::yoctojoule_per_kilogram_kelvin>();
-            
 
             test::<e::kilojoule, m::kilogram, ti::degree_celsius,
                 shc::kilojoule_per_kilogram_degree_celsius>();
@@ -187,23 +202,19 @@ mod tests {
                 shc::kilojoule_per_gram_degree_celsius>();
             test::<e::joule, m::kilogram, ti::degree_celsius,
                 shc::joule_per_kilogram_degree_celsius>();
-            test::<e::joule, m::gram, ti::degree_celsius,
-                shc::joule_per_gram_degree_celsius>();
+            test::<e::joule, m::gram, ti::degree_celsius, shc::joule_per_gram_degree_celsius>();
             test::<e::millijoule, m::kilogram, ti::degree_celsius,
                 shc::millijoule_per_kilogram_degree_celsius>();
             test::<e::millijoule, m::gram, ti::degree_celsius,
                 shc::millijoule_per_gram_degree_celsius>();
 
-            test::<e::btu, m::ounce, ti::degree_fahrenheit,
-                shc::btu_per_ounce_degree_fahrenheit>();
+            test::<e::btu, m::ounce, ti::degree_fahrenheit, shc::btu_per_ounce_degree_fahrenheit>();
             test::<e::btu_it, m::ounce, ti::degree_fahrenheit,
                 shc::btu_it_per_ounce_degree_fahrenheit>();
-            test::<e::btu, m::pound, ti::degree_fahrenheit,
-                shc::btu_per_pound_degree_fahrenheit>();
+            test::<e::btu, m::pound, ti::degree_fahrenheit, shc::btu_per_pound_degree_fahrenheit>();
             test::<e::btu_it, m::pound, ti::degree_fahrenheit,
                 shc::btu_it_per_pound_degree_fahrenheit>();
-            test::<e::btu, m::ton, ti::degree_fahrenheit,
-                shc::btu_per_ton_degree_fahrenheit>();
+            test::<e::btu, m::ton, ti::degree_fahrenheit, shc::btu_per_ton_degree_fahrenheit>();
             test::<e::btu_it, m::ton, ti::degree_fahrenheit,
                 shc::btu_it_per_ton_degree_fahrenheit>();
 
@@ -211,8 +222,8 @@ mod tests {
                 E: e::Conversion<V>,
                 M: m::Conversion<V>,
                 TI: ti::Conversion<V>,
-                SHC: shc::Conversion<V>,
-                >() {
+                SHC: shc::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&SpecificHeatCapacity::new::<SHC>(V::one()),
                     &(Energy::new::<E>(V::one())
                         / (Mass::new::<M>(V::one()) * TemperatureInterval::new::<TI>(V::one()))));
diff --git a/src/si/thermal_conductivity.rs b/src/si/thermal_conductivity.rs
index 8c05998..187d3f5 100644
--- a/src/si/thermal_conductivity.rs
+++ b/src/si/thermal_conductivity.rs
@@ -1,19 +1,17 @@
-//! Quantity of thermal conductivity.
-//! Base unit: kilogram meter per kelvin cubed second: kg · m · s⁻³ · K⁻¹.
-//! Commonly expressed in terms of derived unit power: watt per meter kelvin, W · m⁻¹ · K⁻¹.
-//! Of the kind Kind shared with [temperature interval][ti], as this quantity relates
-//! to change of temperature. Not of kind TemperatureKind, used by [thermodynamic temperature][tt].
-//! See [thermodynamic temperature][tt] for a full explanation.
-//! 
+//! Thermal conductivity (base unit watt per meter kelvin, kg · m · s⁻³ · K⁻¹).
+//!
+//! Thermal conductivity has the same kind as [temperature interval][ti], as this quantity relates
+//! to change of temperature. Not of kind `TemperatureKind`, used by [thermodynamic
+//! temperature][tt]. See [thermodynamic temperature][tt] for a full explanation.
+//!
 //! [ti]: ../temperature_interval/index.html
 //! [tt]: ../thermodynamic_temperature/index.html
 
 quantity! {
-    /// Quantity of thermal conductivity.
-    /// (kilogram meter per kelvin cubed second: kg · m · s⁻³ · K⁻¹).
+    /// Thermal conductivity (base unit watt per meter kelvin, kg · m · s⁻³ · K⁻¹).
     quantity: ThermalConductivity; "thermal conductivity";
-    /// Dimension of thermodynamic heat transfer, L¹M¹T⁻³Th⁻¹
-    /// (kilogram meter per kelvin cubed second: kg · m · s⁻³ · K⁻¹).
+    /// Dimension of thermal conductivity, LMT⁻³Th⁻¹ (base unit watt per meter kelvin, kg · m · s⁻³
+    /// · K⁻¹).
     dimension: ISQ<
         P1,     // length
         P1,     // mass
@@ -23,105 +21,106 @@ quantity! {
         Z0,     // amount of substance
         Z0>;    // luminous intensity
     units {
-        // Allow for units directly in base units
-        @yottagram_meter_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo); "(Yg m)/s³K", 
-            "yottagram meter second cubed kelvin", "yottagrams meter second cubed kelvin";
-        @zettagram_meter_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo); "(Zg m)/s³K",
-            "zettagram meter second cubed kelvin", "zettagrams meter second cubed kelvin";
-        @exagram_meter_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "(Eg m)/s³K",
-            "exagram meter second cubed kelvin", "exagrams meter second cubed kelvin";
-        @petagram_meter_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "(Pg m)/s³K",
-            "petagram meter second cubed kelvin", "petagrams meter second cubed kelvin";
-        @teragram_meter_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "(Tg m)/s³K",
-            "teragram meter second cubed kelvin", "teragrams meter second cubed kelvin";
-        @gigagram_meter_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "(Gg m)/s³K",
-            "gigagram meter second cubed kelvin", "gigagrams meter second cubed kelvin";
-        @megagram_meter_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "(Mg m)/s³K",
-            "megagram meter second cubed kelvin", "megagrams meter second cubed kelvin";
-        /// Derived unit of thermal conductivity in base units. Equivalent to W/(m K).
-        @kilogram_meter_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "(kg m)/s³K",
-            "kilogram meter second cubed kelvin", "kilograms meter second cubed kelvin";
-        @hectogram_meter_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo); "(hg m)/s³K",
-            "hectogram meter second cubed kelvin", "hectograms meter second cubed kelvin";
-        @decagram_meter_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "(dag m)/s³K",
-            "decagram meter second cubed kelvin", "decagrams meter second cubed kelvin";
-        @gram_meter_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "(g m)/s³K",
-            "gram meter second cubed kelvin", "grams meter second cubed kelvin";
-        @decigram_meter_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "(dg m)/s³K",
-            "decigram meter second cubed kelvin", "decigrams meter second cubed kelvin";
-        @centigram_meter_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo); "(cg m)/s³K",
-            "centigram meter second cubed kelvin", "centigrams meter second cubed kelvin";
-        @milligram_meter_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo); "(mg m)/s³K",
-            "milligram meter second cubed kelvin", "milligrams meter second cubed kelvin";
-        @microgram_meter_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "(µg m)/s³K",
-            "microgram meter second cubed kelvin", "micrograms meter second cubed kelvin";
-        @nanogram_meter_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "(ng m)/s³K",
-            "nanogram meter second cubed kelvin", "nanograms meter second cubed kelvin";
-        @picogram_meter_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "(pg m)/s³K",
-            "picogram meter second cubed kelvin", "picograms meter second cubed kelvin";
-        @femtogram_meter_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo); "(fg m)/s³K",
-            "femtogram meter second cubed kelvin", "femtograms meter second cubed kelvin";
-        @attogram_meter_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "(ag m)/s³K",
-            "attogram meter second cubed kelvin", "attograms meter second cubed kelvin";
-        @zeptogram_meter_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo); "(zg m)/s³K",
-            "zeptogram meter second cubed kelvin", "zeptograms meter second cubed kelvin";
-        @yoctogram_meter_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo); "(yg m)/s³K",
-            "yoctogram meter second cubed kelvin", "yoctograms meter second cubed kelvin";
+        @yottagram_meter_per_second_cubed_kelvin: prefix!(yotta) / prefix!(kilo); "Yg · m/(s³ · K)",
+            "yottagram meter per second cubed kelvin", "yottagrams meter per second cubed kelvin";
+        @zettagram_meter_per_second_cubed_kelvin: prefix!(zetta) / prefix!(kilo); "Zg · m/(s³ · K)",
+            "zettagram meter per second cubed kelvin", "zettagrams meter per second cubed kelvin";
+        @exagram_meter_per_second_cubed_kelvin: prefix!(exa) / prefix!(kilo); "Eg · m/(s³ · K)",
+            "exagram meter per second cubed kelvin", "exagrams meter per second cubed kelvin";
+        @petagram_meter_per_second_cubed_kelvin: prefix!(peta) / prefix!(kilo); "Pg · m/(s³ · K)",
+            "petagram meter per second cubed kelvin", "petagrams meter per second cubed kelvin";
+        @teragram_meter_per_second_cubed_kelvin: prefix!(tera) / prefix!(kilo); "Tg · m/(s³ · K)",
+            "teragram meter per second cubed kelvin", "teragrams meter per second cubed kelvin";
+        @gigagram_meter_per_second_cubed_kelvin: prefix!(giga) / prefix!(kilo); "Gg · m/(s³ · K)",
+            "gigagram meter per second cubed kelvin", "gigagrams meter per second cubed kelvin";
+        @megagram_meter_per_second_cubed_kelvin: prefix!(mega) / prefix!(kilo); "Mg · m/(s³ · K)",
+            "megagram meter per second cubed kelvin", "megagrams meter per second cubed kelvin";
+        /// Derived unit of thermal conductivity in base units. Equivalent to W/(m · K).
+        @kilogram_meter_per_second_cubed_kelvin: prefix!(kilo) / prefix!(kilo); "kg · m/(s³ · K)",
+            "kilogram meter per second cubed kelvin", "kilograms meter per second cubed kelvin";
+        @hectogram_meter_per_second_cubed_kelvin: prefix!(hecto) / prefix!(kilo); "hg · m/(s³ · K)",
+            "hectogram meter per second cubed kelvin", "hectograms meter per second cubed kelvin";
+        @decagram_meter_per_second_cubed_kelvin: prefix!(deca) / prefix!(kilo); "dag · m/(s³ · K)",
+            "decagram meter per second cubed kelvin", "decagrams meter per second cubed kelvin";
+        @gram_meter_per_second_cubed_kelvin: prefix!(none) / prefix!(kilo); "g · m/(s³ · K)",
+            "gram meter per second cubed kelvin", "grams meter per second cubed kelvin";
+        @decigram_meter_per_second_cubed_kelvin: prefix!(deci) / prefix!(kilo); "dg · m/(s³ · K)",
+            "decigram meter per second cubed kelvin", "decigrams meter per second cubed kelvin";
+        @centigram_meter_per_second_cubed_kelvin: prefix!(centi) / prefix!(kilo); "cg · m/(s³ · K)",
+            "centigram meter per second cubed kelvin", "centigrams meter per second cubed kelvin";
+        @milligram_meter_per_second_cubed_kelvin: prefix!(milli) / prefix!(kilo); "mg · m/(s³ · K)",
+            "milligram meter per second cubed kelvin", "milligrams meter per second cubed kelvin";
+        @microgram_meter_per_second_cubed_kelvin: prefix!(micro) / prefix!(kilo); "µg · m/(s³ · K)",
+            "microgram meter per second cubed kelvin", "micrograms meter per second cubed kelvin";
+        @nanogram_meter_per_second_cubed_kelvin: prefix!(nano) / prefix!(kilo); "ng · m/(s³ · K)",
+            "nanogram meter per second cubed kelvin", "nanograms meter per second cubed kelvin";
+        @picogram_meter_per_second_cubed_kelvin: prefix!(pico) / prefix!(kilo); "pg · m/(s³ · K)",
+            "picogram meter per second cubed kelvin", "picograms meter per second cubed kelvin";
+        @femtogram_meter_per_second_cubed_kelvin: prefix!(femto) / prefix!(kilo); "fg · m/(s³ · K)",
+            "femtogram meter per second cubed kelvin", "femtograms meter per second cubed kelvin";
+        @attogram_meter_per_second_cubed_kelvin: prefix!(atto) / prefix!(kilo); "ag · m/(s³ · K)",
+            "attogram meter per second cubed kelvin", "attograms meter per second cubed kelvin";
+        @zeptogram_meter_per_second_cubed_kelvin: prefix!(zepto) / prefix!(kilo); "zg · m/(s³ · K)",
+            "zeptogram meter per second cubed kelvin", "zeptograms meter per second cubed kelvin";
+        @yoctogram_meter_per_second_cubed_kelvin: prefix!(yocto) / prefix!(kilo); "yg · m/(s³ · K)",
+            "yoctogram meter per second cubed kelvin", "yoctograms meter per second cubed kelvin";
 
-        // Thermal conductivity is much more commonly expressed in terms of power / (length temperature).
-        @yottawatt_per_meter_kelvin: prefix!(yotta); "YW/(m K)", 
+        // Thermal conductivity is much more commonly expressed in terms of
+        // power / (length · temperature).
+        @yottawatt_per_meter_kelvin: prefix!(yotta); "YW/(m · K)",
             "yottawatt per meter kelvin", "yottawatts per meter kelvin";
-        @zettawatt_per_meter_kelvin: prefix!(zetta); "ZW/(m K)",
+        @zettawatt_per_meter_kelvin: prefix!(zetta); "ZW/(m · K)",
             "zettawatt per meter kelvin", "zettawatts per meter kelvin";
-        @exawatt_per_meter_kelvin: prefix!(exa); "EW/(m K)",
+        @exawatt_per_meter_kelvin: prefix!(exa); "EW/(m · K)",
             "exawatt per meter kelvin", "exawatts per meter kelvin";
-        @petawatt_per_meter_kelvin: prefix!(peta); "PW/(m K)",
+        @petawatt_per_meter_kelvin: prefix!(peta); "PW/(m · K)",
             "petawatt per meter kelvin", "petawatts per meter kelvin";
-        @terawatt_per_meter_kelvin: prefix!(tera); "TW/(m K)",
+        @terawatt_per_meter_kelvin: prefix!(tera); "TW/(m · K)",
             "terawatt per meter kelvin", "terawatts per meter kelvin";
-        @gigawatt_per_meter_kelvin: prefix!(giga); "GW/(m K)",
+        @gigawatt_per_meter_kelvin: prefix!(giga); "GW/(m · K)",
             "gigawatt per meter kelvin", "gigawatts per meter kelvin";
-        @megawatt_per_meter_kelvin: prefix!(mega); "MW/(m K)",
+        @megawatt_per_meter_kelvin: prefix!(mega); "MW/(m · K)",
             "megawatt per meter kelvin", "megawatts per meter kelvin";
-        @kilowatt_per_meter_kelvin: prefix!(kilo); "kW/(m K)",
+        @kilowatt_per_meter_kelvin: prefix!(kilo); "kW/(m · K)",
             "kilowatt per meter kelvin", "kilowatts per meter kelvin";
-        @hectowatt_per_meter_kelvin: prefix!(hecto); "hW/(m K)",
+        @hectowatt_per_meter_kelvin: prefix!(hecto); "hW/(m · K)",
             "hectowatt per meter kelvin", "hectowatts per meter kelvin";
-        @decawatt_per_meter_kelvin: prefix!(deca); "daW/(m K)",
+        @decawatt_per_meter_kelvin: prefix!(deca); "daW/(m · K)",
             "decawatt per meter kelvin", "decawatts per meter kelvin";
-        /// Derived unit of thermal conductivity in derived units. Equivalent to (kg m)/s^3K.
-        @watt_per_meter_kelvin: prefix!(none); "W/(m K)",
+        /// Derived unit of thermal conductivity in derived units. Equivalent to kg · m/(s³ · K).
+        @watt_per_meter_kelvin: prefix!(none); "W/(m · K)",
             "watt per meter kelvin", "watts per meter kelvin";
-        @deciwatt_per_meter_kelvin: prefix!(deci); "dW/(m K)",
+        @deciwatt_per_meter_kelvin: prefix!(deci); "dW/(m · K)",
             "deciwatt per meter kelvin", "deciwatts per meter kelvin";
-        @centiwatt_per_meter_kelvin: prefix!(centi); "cW/(m K)",
+        @centiwatt_per_meter_kelvin: prefix!(centi); "cW/(m · K)",
             "centiwatt per meter kelvin", "centiwatts per meter kelvin";
-        @milliwatt_per_meter_kelvin: prefix!(milli); "mW/(m K)",
+        @milliwatt_per_meter_kelvin: prefix!(milli); "mW/(m · K)",
             "milliwatt per meter kelvin", "milliwatts per meter kelvin";
-        @microwatt_per_meter_kelvin: prefix!(micro); "µW/(m K)",
+        @microwatt_per_meter_kelvin: prefix!(micro); "µW/(m · K)",
             "microwatt per meter kelvin", "microwatts per meter kelvin";
-        @nanowatt_per_meter_kelvin: prefix!(nano); "nW/(m K)",
+        @nanowatt_per_meter_kelvin: prefix!(nano); "nW/(m · K)",
             "nanowatt per meter kelvin", "nanowatts per meter kelvin";
-        @picowatt_per_meter_kelvin: prefix!(pico); "pW/(m K)",
+        @picowatt_per_meter_kelvin: prefix!(pico); "pW/(m · K)",
             "picowatt per meter kelvin", "picowatts per meter kelvin";
-        @femtowatt_per_meter_kelvin: prefix!(femto); "fW/(m K)",
+        @femtowatt_per_meter_kelvin: prefix!(femto); "fW/(m · K)",
             "femtowatt per meter kelvin", "femtowatts per meter kelvin";
-        @attowatt_per_meter_kelvin: prefix!(atto); "aW/(m K)",
+        @attowatt_per_meter_kelvin: prefix!(atto); "aW/(m · K)",
             "attowatt per meter kelvin", "attowatts per meter kelvin";
-        @zeptowatt_per_meter_kelvin: prefix!(zepto); "zW/(m K)",
+        @zeptowatt_per_meter_kelvin: prefix!(zepto); "zW/(m · K)",
             "zeptowatt per meter kelvin", "zeptowatts per meter kelvin";
-        @yoctowatt_per_meter_kelvin: prefix!(yocto); "yW/(m K)",
+        @yoctowatt_per_meter_kelvin: prefix!(yocto); "yW/(m · K)",
             "yoctowatt per meter kelvin", "yoctowatts per meter kelvin";
-        
-        // Celsius for convenience,
-        @kilogram_meter_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo); "(kg m)/s³°C",
-            "kilogram meter second cubed degree celsius", "kilograms meter second cubed degree celsius";
-        @kilowatt_per_meter_degree_celsius: prefix!(kilo); "kW/(m °C)",
+
+        // Celsius for convenience.
+        @kilogram_meter_per_second_cubed_degree_celsius: prefix!(kilo) / prefix!(kilo);
+            "kg · m/(s³ · °C)", "kilogram meter per second cubed degree celsius",
+            "kilograms meter per second cubed degree celsius";
+        @kilowatt_per_meter_degree_celsius: prefix!(kilo); "kW/(m · °C)",
             "kilowatt per meter degree celsius", "kilowatts per meter degree celsius";
-        /// Derived unit of thermal conductivity in derived units. Equivalent to (kg m)/s^3K.
-        @watt_per_meter_degree_celsius: prefix!(none); "W/(m °C)",
+        /// Derived unit of thermal conductivity in derived units. Equivalent to kg · m/(s³ · K).
+        @watt_per_meter_degree_celsius: prefix!(none); "W/(m · °C)",
             "watt per meter degree celsius", "watts per meter degree celsius";
-        @milliwatt_per_meter_degree_celsius: prefix!(milli); "mW/(m °C)",
+        @milliwatt_per_meter_degree_celsius: prefix!(milli); "mW/(m · °C)",
             "milliwatt per meter degree celsius", "milliwatts per meter degree celsius";
     }
 }
@@ -172,15 +171,15 @@ mod tests {
             test::<m::attogram, ti::kelvin, tc::attogram_meter_per_second_cubed_kelvin>();
             test::<m::zeptogram, ti::kelvin, tc::zeptogram_meter_per_second_cubed_kelvin>();
             test::<m::yoctogram, ti::kelvin, tc::yoctogram_meter_per_second_cubed_kelvin>();
-            
+
             test::<m::kilogram, ti::degree_celsius,
                 tc::kilogram_meter_per_second_cubed_degree_celsius>();
 
             fn test<
                 M: m::Conversion<V>,
                 TI: ti::Conversion<V>,
-                TC: tc::Conversion<V>,
-                >() {
+                TC: tc::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&ThermalConductivity::new::<TC>(V::one()),
                     &(Mass::new::<M>(V::one())
                         * Length::new::<l::meter>(V::one())
@@ -217,8 +216,7 @@ mod tests {
 
             test::<p::kilowatt, l::meter, ti::degree_celsius,
                 tc::kilowatt_per_meter_degree_celsius>();
-            test::<p::watt, l::meter, ti::degree_celsius,
-                tc::watt_per_meter_degree_celsius>();
+            test::<p::watt, l::meter, ti::degree_celsius, tc::watt_per_meter_degree_celsius>();
             test::<p::milliwatt, l::meter, ti::degree_celsius,
                 tc::milliwatt_per_meter_degree_celsius>();
 
@@ -226,8 +224,8 @@ mod tests {
                 P: p::Conversion<V>,
                 L: l::Conversion<V>,
                 TI: ti::Conversion<V>,
-                TC: tc::Conversion<V>,
-                >() {
+                TC: tc::Conversion<V>>()
+            {
                 Test::assert_approx_eq(&ThermalConductivity::new::<TC>(V::one()),
                     &(Power::new::<P>(V::one())
                         / (Length::new::<L>(V::one()) * TemperatureInterval::new::<TI>(V::one()))));

@glowforge-opensource
Copy link
Author

@iliekturtles your patch does not apply, are you sure that it is on top of the latest changes?

For example, line 42 of the patch changes yottagram_square_meter_per_squared_second_kelvin but yottagram_square_meter_per_squared_second_kelvin does not exist in the latest changes.

@iliekturtles
Copy link
Owner

I must not have rebased on the latest commit. I'll do that and get a new patch in the next day or two.

@glowforge-opensource
Copy link
Author

glowforge-opensource commented Sep 6, 2019

I must not have rebased on the latest commit. I'll do that and get a new patch in the next day or two.

We applied the patch to a tag of the commit your most recent patch was on, and merged it onto our changes. 0437bea captures the merge. The changes look good but we'll save the rebasing until the Film Effectiveness/Heat Transfer/Heat Transfer Coefficient conversation resolves in the interest of avoiding troublesome history rewrites.

@iliekturtles
Copy link
Owner

Sorry about the confusion with that last patch.

After your latest response I think we should stick with HeatTransfer. If you can update the comments for this quantity (my patch made the change to HeatTransferCoefficient) and fix the merge error in si/mod.rs (I merged another PR this morning) I will merge this PR!

…city, MolarMass, and MolarEnergy SI derived quantities.
@glowforge-opensource
Copy link
Author

Fixed up HeatTransfer, rebased on master, fixed a semver requirement for static_assertions in support of aadfa3e, and squashed to one commit.

@iliekturtles iliekturtles merged commit 5713541 into iliekturtles:master Sep 10, 2019
@iliekturtles
Copy link
Owner

Merged! Thanks for all the effort that went into this PR. I'm going to try to release a new version in the next week or so.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants