“9.81 m/s²” 같은 양을 올바르게 조판하려면 여러 세부 약속이 필요합니다. 단위는 직립(로마체)으로, 숫자와 단위 사이에는 얇은 공백을 두고, 복합 단위의 곱과 나눗셈 간격도 일관되게 맞춰야 합니다. 이를 손으로 지키는 것은 번거롭고 쉽게 흔들립니다. siunitx 패키지는 숫자, 단위, 양을 하나의 일관된 규칙으로 자동 조판해 주는 표준 도구입니다. 이 페이지에서는 현행 버전(v3)의 중심 명령인 \num, \unit, \qty와, 표에서 숫자를 소수점 기준으로 맞추는 S 열을 정리하고, 오래된 문서에서 볼 수 있는 v2 이름 \SI, \si와의 차이도 보여줍니다.
왜 단위 패키지가 필요한가
이공계 표기에는 국제적인 약속이 있습니다(ISO 80000-2 / JIS Z 8000-2, 자세한 내용은 별도 페이지). 핵심 중 하나는 “단위 기호는 직립으로 조판한다”는 것입니다. m, kg, s는 변수가 아니므로 변수 서체인 이탤릭으로 조판해서는 안 됩니다. 그런데 LaTeX 수식 모드에서는 영문자가 기본적으로 기울어지므로, $kg$라고 그대로 쓰면 단위가 이탤릭 k와 g의 곱처럼 보입니다.
또 하나의 요점은 간격입니다. 숫자와 단위 사이에는 붙이지도, 너무 많이 띄우지도 않고 얇은 공백(수식의 \,에 해당)을 넣는 것이 약속입니다. 9.81m도 아니고 9.81 m도 아닙니다. 또한 m/s 같은 복합 단위에서는 나눗셈을 어떻게 보일지(슬래시인지, 음의 거듭제곱 s⁻¹인지), kg·m 같은 곱에 가운데점을 넣을지 등을 문서 전체에서 맞추고 싶습니다. 이를 \mathrm{m} 등으로 하나씩 손으로 쓰면 공백, 거듭제곱, 곱의 처리가 곳곳에서 달라지기 쉽습니다.
siunitx는 이 모든 것을 한꺼번에 맡습니다. 단위를 직립으로 조판하고, 숫자와 단위 사이에 올바른 공백을 넣고, 곱·몫·거듭제곱을 일관된 규칙으로 정리합니다. 게다가 한 곳의 설정만 바꾸면 문서 전체의 표시 방식을 바꿀 수 있습니다. 프리앰블에서 \usepackage{siunitx}를 읽어들이면 사용할 수 있습니다.
숫자 조판: \num
\num{…}는 숫자만 정리해 조판하는 명령입니다. 인수로 숫자를 넘기면 자리 구분, 지수, 부호 등을 자동으로 정리해 직립으로 조판합니다. 특히 편리한 것은 지수 해석으로, e, E, d, D를 “×10의 거듭제곱”으로 인식합니다. \num{1.234e5}는 1.234 × 10⁵를 조판합니다(e5가 그대로 출력되는 것이 아닙니다). 소수점은 .와 , 모두 받아들이며, 필요하면 소수점 앞에 0을 보충합니다.
\num{12345} % → 12 345(桁区切りが入る / digit grouping)
\num{1.234e5} % → 1.234 × 10^5
\num{0,1234} % → 0.1234(カンマも小数点として解釈 / comma as decimal)
\num{.5} % → 0.5(先頭に 0 を補う / leading zero added)
\num{3.45d-4} % → 3.45 × 10^{-4}이 예에서 12345는 자리 구분용 얇은 공백이 들어가 12 345가 되고, 1.234e5는 1.234 × 10⁵, .5는 0.5가 됩니다. 지역 관행(자리 구분을 콤마로 하기, 소수점을 콤마로 하기 등)은 옵션으로 바꿀 수 있지만, 우선은 “숫자는 그대로 쓰지 말고 \num에 통과시킨다”고 기억하면 충분합니다. 또한 숫자의 곱을 내기 위해서는 전용 \numproduct{1.2 x 3.4}(x로 구분)를 사용합니다(v3에서는 \num 자체가 곱을 조판하지 않습니다).
단위 조판: \unit
\unit{…}는 단위만 조판하는 명령입니다. 입력에는 두 가지 방식이 있습니다. 하나는 리터럴(그대로 쓰기) 방식으로, \unit{kg.m/s^2}처럼 단위 기호를 직접 입력합니다. 여기서 마침표 .는 단위 사이의 곱, /는 몫, ^와 _는 윗첨자와 아래첨자를 나타냅니다. siunitx는 이를 직립으로 조판하고 올바른 공백을 넣습니다. \unit{kg.m/s^2}는 kg m/s²(kg와 m 사이에 얇은 공백, s에 윗첨자 2)가 됩니다.
다른 하나는 해석(매크로) 방식으로, 단위, 접두사, 거듭제곱을 각각 명령으로 조립합니다. 영어로 단위 이름을 읽는 것에 가까운 방식입니다. 기본 명령을 표에 정리합니다.
| 명령 | 의미 | 출력 예 | |
|---|---|---|---|
gram | \gram / \metre / \second | 기본 단위(SI 기본 단위 이름) | g / m / s |
kilo | \kilo \milli \micro … | 접두사(단위 앞에 둠) | k / m / µ |
kilogram | \kilogram | 접두사가 붙은 정의済み 단위 | kg |
per | \per | 다음 단위를 분모로 보냄 | … ⁻¹ 또는 /… |
squared | \squared / \cubed | 직전 단위를 제곱 / 세제곱(후치) | m² / m³ |
square | \square / \cubic | 직후 단위를 제곱 / 세제곱(전치) | m² / m³ |
\unit{\kilo\gram\per\cubic\metre} % → kg/m^3 (密度 / density)
\unit{\metre\per\second\squared} % → m/s^2 (加速度 / acceleration)
\unit{\kilo\gram} % → kg
\unit{\kilogram} % → kg(定義済みの一語 / predefined)접두사가 붙은 “킬로그램”은 접두사와 단위를 이어 \kilo\gram이라고 써도, 정의된 한 단어 \kilogram을 써도 같은 kg가 됩니다. \cubic\metre는 전치 형태의 “세제곱미터 m³”이고, \metre\per\second\squared는 후치 \squared를 사용한 “초 제곱당 미터 m/s²”입니다. \per의 표시 방식(음의 거듭제곱 s⁻¹인지, 슬래시 /s인지)은 아래의 per-mode 옵션으로 전환합니다.
리터럴 방식과 해석 방식은 같은 결과를 낼 수 있지만, 해석(매크로) 방식에는 장점이 있습니다. 거듭제곱, 접두사, 곱/몫의 모양을 옵션으로 일괄 제어할 수 있고, 직접 새 단위 매크로를 정의할 수도 있습니다. 반면 리터럴 방식은 간단한 단위를 빠르게 적기에 편리합니다. 어느 쪽이든 단위는 직립이고 공백은 올바르게 들어갑니다.
숫자와 단위를 함께: \qty
실제 문서에서는 숫자와 단위가 대개 함께 나타납니다. \qty{…}{…}는 첫 번째 인수에 숫자, 두 번째 인수에 단위를 받아 둘을 함께 조판합니다. 이는 \num과 \unit을 합친 것으로, 숫자 부분은 \num과, 단위 부분은 \unit과 완전히 같은 방식으로 씁니다. 양의 값은 “숫자 × 단위”이며, 둘 사이의 공백이 곱셈 기호에 해당한다는 생각을 그대로 명령으로 만든 것입니다.
重力加速度は \qty{9.81}{\metre\per\second\squared} である。
The acceleration of gravity is \qty{9.81}{\metre\per\second\squared}.
\qty{1.234e5}{\kilo\gram\per\cubic\metre} % → 1.234 × 10^5 kg/m^3
\qty{2.998e8}{m/s} % リテラル単位もそのまま使える이 예에서는 9.81 뒤에 얇은 공백이 오고 직립 m/s²가 이어져 “9.81 m/s²”라는 양이 하나로 조판됩니다. \qty{1.234e5}{…}처럼 지수가 붙은 숫자도 그대로 넘길 수 있습니다. 단위 부분은 매크로(\metre\per\second\squared)여도 되고 리터럴(m/s)이어도 됩니다.
\per의 표시 방식은 per-mode 옵션으로 고릅니다. 기본은 음의 거듭제곱(m s⁻¹), per-mode=symbol은 슬래시(m/s), per-mode=fraction은 세로로 쌓은 분수(분자/분모)가 됩니다. 옵션은 각 명령에 대괄호로 개별 지정하거나, 프리앰블에서 \sisetup{…}으로 문서 전체에 일괄 지정할 수 있습니다.
\qty{1.99}{\per\kilogram} % 既定 → 1.99 kg^{-1}
\qty[per-mode = symbol]{1.99}{\per\kilogram} % → 1.99 /kg
\qty[per-mode = fraction]{1.345}{\coulomb\per\mole} % → 縦組みの分数 C/mol
% 文書全体に方針を適用 / set a policy document-wide
\sisetup{per-mode = symbol}각도에는 전용 \ang{…}가 있습니다. \ang{45}는 45°를 내며, 세미콜론으로 도·분·초를 넘기는 “호 형식”도 사용할 수 있어 \ang{45;30;15}는 45°30′15″를 조판합니다. 호 형식에서는 성분을 비울 수도 있어 \ang{;;1}은 초만, \ang{+10;;}은 도만(부호 포함) 출력합니다. 각도는 SI 접두사의 대상이 아니므로 \qty가 아니라 이 전용 명령을 사용합니다.
v2와 v3: \SI / \si는 오래된 이름
여기까지의 \num, \unit, \qty는 siunitx 버전 3의 중심 명령입니다. 오래된 문서나 웹 답변에서는 버전 2의 명령을 볼 수 있습니다. 대응 관계는 다음과 같습니다.
| v2(예전 이름) | v3(현행) | 역할 | |
|---|---|---|---|
SI | \SI{9.81}{\metre\per\second\squared} | \qty{9.81}{...} | 숫자 + 단위 |
si | \si{\kilo\gram} | \unit{\kilo\gram} | 단위만 |
num | \num{1.234e5} | \num{1.234e5}(변경 없음) | 숫자만 |
SIrange | \SIrange{10}{20}{\metre} | \qtyrange{10}{20}{\metre} | 범위(10 m~20 m) |
SIlist | \SIlist{10;20;30}{\metre} | \qtylist{10;20;30}{\metre} | 목록(10 m, 20 m, 30 m) |
공식 매뉴얼은 v3에서 문서용 명령 이름을 “더 설명적인” 이름으로 바꾸었다고 하며, \SI, \si, \SIrange, \SIlist는 계속 사용할 수 있지만 새 문서에서는 권장되지 않는다(\qty… 계열을 대신 사용)고 설명합니다. \num의 이름은 v2와 v3에서 변하지 않았습니다. 오래된 문서를 컴파일하는 것이 목적이라면 \usepackage{siunitx}[=v2]로 구버전 동작을 호출할 수 있지만, 새로 쓸 때는 v3의 \qty, \unit, \num을 사용하는 것이 맞습니다.
v3에서는 입력도 조금 더 엄격해졌습니다. 예를 들어 접두사는 단독으로 사용할 수 없고(반드시 단위와 함께), 숫자의 곱은 \numproduct, 단위가 붙은 양의 곱은 \qtyproduct라는 전용 명령으로 씁니다. 많은 경우 오래된 설정 이름은 내부에서 새 이름으로 읽혀 들어가며, 그 사실이 로그에 경고로 표시됩니다.
표에서 숫자 맞추기: S 열
숫자를 늘어놓은 표에서는 자릿수를 맞추지 않으면 읽기 어려워집니다. siunitx는 tabular를 위해 S 열 형식을 제공하며, 열 지정에서 c, l, r 대신 S를 쓰면 그 열의 숫자가 소수점 기준으로 정렬됩니다. 내용은 \num과 같은 파서로 해석되므로 지수가 붙은 값(1.2e3)도 올바르게 처리됩니다.
\begin{tabular}{@{}S@{}}
\toprule
{Some Values} \\ % 見出しは波括弧で保護(数値と誤認させない)
\midrule
2.3456 \\
34.2345 \\
-6.7835 \\
5642.5 \\
1.2e3 \\
e4 \\
\bottomrule
\end{tabular}이 표에서는 각 셀의 숫자가 소수점 위치에서 맞춰지고, 1.2e3은 1.2 × 10³으로, e4는 10⁴로 조판됩니다. 중요한 주의점이 하나 있습니다. 열 제목 같은 문자열은 중괄호 {…}로 감싸야 합니다. {Some Values}처럼 보호하지 않으면 siunitx가 이를 숫자의 일부로 해석하려 하여 정렬이 깨집니다.
자릿수 배치를 맞추고 열의 위치를 정하고 싶을 때는 table-format 옵션으로 “정수부 자릿수.소수부 자릿수”를 알려 줍니다. S[table-format=2.4]는 “정수 2자리, 소수 4자리”라는 뜻으로 열 전체의 모양을 안정시킵니다. 또한 \multicolumn이나 \multirow 안에서 숫자를 맞추고 싶을 때는 S 열 대신 사용할 수 있는 매크로 버전 \tablenum[table-format=…]{…}가 있습니다.
\begin{tabular}{@{}S[table-format=4.1]@{}}
\toprule
{Mass / \unit{\gram}} \\
\midrule
1234.5 \\
12.0 \\
6.7 \\
\bottomrule
\end{tabular}이 예에서는 열 제목에 \unit{\gram}을 사용해 “Mass / g”를 직립 단위로 보이면서, 숫자를 정수 4자리와 소수 1자리로 맞춥니다. S 열을 사용하면 본문의 양은 \qty, 표 안의 숫자는 S 열처럼 역할을 나누면서 문서 전체에서 일관된 숫자 표기를 유지할 수 있습니다.