有一个有趣的讨论https://ux.stackexchange.com/q/92941/107032关于加拿大/墨西哥/美国电话号码的书写方式。答案基本上是这样的:
如果您的受众仅限于加拿大/墨西哥/美国,请使用 (###) ###-####
如果你的观众不是严格地在这个区域,使用 +### ### #### ,它对应于E.123 规范。
我不想讨论什么是正确的格式(如何正确排版电话号码?已经回答了这个问题),但是如何正确排版第一种格式。
有一场关于第一种情况下破折号在 Latex 中如何书写的讨论,如何使用 pdflatex 和 XCharter 制作图形破折号 (U+2012)。
我还有其他问题:
- 是否应该以数学模式输入数字?
- 这些空间应该是牢不可破的,还是具有其他性质?
- 加号应该是加号以外的其他符号吗?(这维基百科页面似乎使用“正常” + 符号,但我想知道是否有不同的惯例)
梅威瑟:
\documentclass{standalone}
\begin{document}
% Solution from https://tex.stackexchange.com/a/335513/34551
\newlength\figurewidth
\newcommand\fdash
{\settowidth\figurewidth{9}%
\raisebox{0.6ex}{\makebox[\figurewidth]{\hrulefill}}%
}
\begin{tabular}{c c c }
(607) 123-4567 & +22 607 123 4567 & Text mode\\
(607)~123-4567 & +22~607~123~4567 & Text mode, unbreakable spaces\\
\((607) 123-4567\) & \(+22 607 123 4567\) & Math mode\\
\((607)~123-4567\) & \(+22~607~123~4567\) & Math mode, unbreakable spaces\\
(607) 123\fdash4567 & & Text mode, "custom" dashes\\
\((607) 123\fdash4567\) & & Math mode, "custom" dashes
\end{tabular}
\end{document}
答案1
您可以定义一个布尔值来选择不同的分支:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\nanp}{mm}
{% #1 = area code, #2 = phone number
\bool_if:NTF \g_clement_camxus_bool
{
\clement_camxus:nn { #1 } { #2 }
}
{
\clement_noncamxus:nn { #1 } { #2 }
}
}
\NewDocumentCommand{\nonCAMXUS}{}
{
\bool_gset_false:N \g_clement_camxus_bool
}
\bool_new:N \g_clement_camxus_bool
\bool_gset_true:N \g_clement_camxus_bool
\cs_new_protected:Nn \clement_camxus:nn
{
(#1)\nobreakspace
\tl_range:nnn { #2 } { 1 } { 3 }\nobreakspace
\tl_range:nnn { #2 } { 4 } { 7 }
}
\cs_new_protected:Nn \clement_noncamxus:nn
{
+1\nobreakspace#1\nobreakspace
\tl_range:nnn { #2 } { 1 } { 3 }\nobreakspace
\tl_range:nnn { #2 } { 4 } { 7 }
}
\ExplSyntaxOff
\begin{document}
\nanp{212}{3456789}
\nanp{212}{345 6789}
\nonCAMXUS
\nanp{212}{3456789}
\nanp{212}{345 6789}
\end{document}
由于电话号码不是“数学数字”,因此它们不应处于数学模式并根据上下文改变形状。空格应该是不可分割的,因为电话号码不能跨行分割。加号是国际公认的代表国际电话的本地中继代码。