\documentclass[10pt]{article}
\usepackage{ulem,amsmath}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\begin{document}
\begin{tabular}{llll}
1$^{\text{st}}$& first & 17$^{\text{th}}$ & seventeenth \\
2$^{\text{nd}}$& \unline{2cm} & 18$^{\text{th}}$ & \unline{2cm} \\
3$^{\text{rd}}$& \unline{2cm} & 19$^{\text{th}}$ & \unline{2cm} \\
4$^{\text{th}}$& \unline{2cm}& 20$^{\text{th}}$ & \unline{2cm} \\
5$^{\text{th}}$& \unline{2cm}& 21$^{\text{st}}$ & \unline{2cm} \\
6$^{\text{th}}$& \unline{2cm} & 22$^{\text{nd}}$ & \unline{2cm} \\
7$^{\text{th}}$& seventh& 23$^{\text{rd}}$& \unline{2cm}\\
8$^{\text{th}}$& \unline{2cm}& 24$^{\text{th}}$ & twenty$-$fourth \\
9$^{\text{th}}$& \unline{2cm}& 25$^{\text{th}}$ & twenty$-$fifth \\
10$^{\text{th}}$& \unline{2cm}& 26$^{\text{th}}$ & twenty$-$sixth \\
11$^{\text{th}}$& \unline{2cm}& 27$^{\text{th}}$ & \unline{2cm} \\
12$^{\text{th}}$& \unline{2cm} & 28$^{\text{th}}$ & twenty$-$eighth \\
13$^{\text{th}}$& \unline{2cm}& 29$^{\text{th}}$ & \unline{2cm} \\
14$^{\text{th}}$& fourteenth& 30$^{\text{th}}$ & \unline{2cm} \\
15$^{\text{th}}$& \unline{2cm} & 31$^{\text{st}}$ & \unline{2cm} \\
16$^{\text{th}}$& sixteenth& & \\
\end{tabular}
\end{document}
我该如何对齐数字 st、nd、rd 和 th?如您所见,它们没有对齐。
我正在尝试重新创建这个:
(由于某种原因,图像被翻转了。)
答案1
您选择的字体AlegreyaSans
默认使用宽度可变的衬线数字。这意味着数字的字形宽度不是恒定的,而是根据数字字形的形状而变化。
\AlegreyaSansLTF
该包定义了用于在表格中以恒定宽度排列数字的字体,以便在表格中更好地垂直对齐。
以下示例使用\textsuperscript
用于提升后缀字母。此外,该示例使用包array
在单元格开头偷偷插入一个宏,用于格式化序数。
\documentclass[10pt]{article}
\usepackage{array}
\usepackage{ulem}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\begin{document}
\newcommand*{\myordnum}[5]{%
#1% \ignorespaces, automatically added at the begin of a tabular cell
\AlegreyaSansTLF
#2#3%
\textsuperscript{#4#5}%
}
\begin{tabular}{>{\myordnum}ll>{\myordnum}ll}
{}1st & first & 17th & seventeenth \\
{}2nd & \unline{2cm} & 18th & \unline{2cm} \\
{}3rd & \unline{2cm} & 19th & \unline{2cm} \\
{}4th & \unline{2cm} & 20th & \unline{2cm} \\
{}5th & \unline{2cm} & 21st & \unline{2cm} \\
{}6th & \unline{2cm} & 22nd & \unline{2cm} \\
{}7th & seventh & 23rd & \unline{2cm} \\
{}8th & \unline{2cm} & 24th & twenty-fourth \\
{}9th & \unline{2cm} & 25th & twenty-fifth \\
10th & \unline{2cm} & 26th & twenty-sixth \\
11th & \unline{2cm} & 27th & \unline{2cm} \\
12th & \unline{2cm} & 28th & twenty-eighth \\
13th & \unline{2cm} & 29th & \unline{2cm} \\
14th & fourteenth & 30th & \unline{2cm} \\
15th & \unline{2cm} & 31st & \unline{2cm} \\
16th & sixteenth \\
\end{tabular}
\end{document}
右对齐数字的变体:
\newcommand*{\myordnum}[5]{%
#1% \ignorespaces, automatically added at the begin of a tabular cell
\leavevmode
\AlegreyaSansTLF
\ifx\\#2\\% first digit is empty?
\hphantom{0}%
\fi
#2#3%
\textsuperscript{#4#5}%
}
答案2
你做了很多手动工作,但其实并不需要。让 LaTeX 为你做这些工作:使用一些计数器、fmtcount
包和>{...}
语法array
包,表格几乎可以完全自动填写:唯一的手动调整是提供序数作为字符串(这也可以高度自动化)。使用带\AlegraSansTLF
有序数的列的字体可以得到类似于图像中的对齐方式:
\documentclass[10pt]{article}
\usepackage{ulem,amsmath}
\usepackage{array}
\usepackage{fmtcount}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\newcounter{mycounteri}
\newcounter{mycounterii}
\setcounter{mycounterii}{16}
\newcommand\FormatNumber[1]{%
\multicolumn{1}{l}{\ordinalstring{#1}}%
}
\begin{document}
\begin{tabular}{
>{\stepcounter{mycounteri}\AlegreyaSansTLF\ordinal{mycounteri}}l
>{\unline{2cm}}l
>{\stepcounter{mycounterii}\AlegreyaSansTLF\ordinal{mycounterii}}l
>{\unline{2cm}}l
}
& \FormatNumber{mycounteri} & & \FormatNumber{mycounterii} \\
& & & \\
& & & \\
& & & \\
& & & \\
& & & \\
& \FormatNumber{mycounteri} & & \\
& & & \FormatNumber{mycounterii} \\
& & & \FormatNumber{mycounterii} \\
& & & \FormatNumber{mycounterii} \\
& & & \\
& & & \FormatNumber{mycounterii} \\
& & & \\
& \FormatNumber{mycounteri} & & \\
& & & \\
& \FormatNumber{mycounteri} & \multicolumn{1}{l}{} & \multicolumn{1}{l}{} \\
\end{tabular}
\end{document}
结果:
答案3
这主要取决于你所说的“对齐”是什么意思。这里有两个类似的解决方案:在第一个例子中,数字具有成比例的宽度,因此数字 1 的宽度小于其他数字;在第二个解决方案中,选择“表格”数字。
而$-$
应该使用--
, 作为短破折号(假设您真的想要一个破折号)。
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\usepackage{ulem,amsmath,array}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\newcommand{\?}[1]{\textsuperscript{#1}}
\begin{document}
\begin{tabular}{r@{}ll r@{}ll}
1&\?{st}& first & 17&\?{th}& seventeenth \\
2&\?{nd}& \unline{2cm} & 18&\?{th}& \unline{2cm} \\
3&\?{rd}& \unline{2cm} & 19&\?{th}& \unline{2cm} \\
4&\?{th}& \unline{2cm} & 20&\?{th}& \unline{2cm} \\
5&\?{th}& \unline{2cm} & 21&\?{st}& \unline{2cm} \\
6&\?{th}& \unline{2cm} & 22&\?{nd}& \unline{2cm} \\
7&\?{th}& seventh & 23&\?{rd}& \unline{2cm}\\
8&\?{th}& \unline{2cm} & 24&\?{th}& twenty--fourth \\
9&\?{th}& \unline{2cm} & 25&\?{th}& twenty--fifth \\
10&\?{th}& \unline{2cm} & 26&\?{th}& twenty--sixth \\
11&\?{th}& \unline{2cm} & 27&\?{th}& \unline{2cm} \\
12&\?{th}& \unline{2cm} & 28&\?{th}& twenty--eighth \\
13&\?{th}& \unline{2cm} & 29&\?{th}& \unline{2cm} \\
14&\?{th}& fourteenth & 30&\?{th}& \unline{2cm} \\
15&\?{th}& \unline{2cm} & 31&\?{st}& \unline{2cm} \\
16&\?{th}& sixteenth& & \\
\end{tabular}
\bigskip
\begin{tabular}{>{\AlegreyaSansTLF}r@{}ll >{\AlegreyaSansTLF}r@{}ll}
1&\?{st}& first & 17&\?{th}& seventeenth \\
2&\?{nd}& \unline{2cm} & 18&\?{th}& \unline{2cm} \\
3&\?{rd}& \unline{2cm} & 19&\?{th}& \unline{2cm} \\
4&\?{th}& \unline{2cm} & 20&\?{th}& \unline{2cm} \\
5&\?{th}& \unline{2cm} & 21&\?{st}& \unline{2cm} \\
6&\?{th}& \unline{2cm} & 22&\?{nd}& \unline{2cm} \\
7&\?{th}& seventh & 23&\?{rd}& \unline{2cm}\\
8&\?{th}& \unline{2cm} & 24&\?{th}& twenty--fourth \\
9&\?{th}& \unline{2cm} & 25&\?{th}& twenty--fifth \\
10&\?{th}& \unline{2cm} & 26&\?{th}& twenty--sixth \\
11&\?{th}& \unline{2cm} & 27&\?{th}& \unline{2cm} \\
12&\?{th}& \unline{2cm} & 28&\?{th}& twenty--eighth \\
13&\?{th}& \unline{2cm} & 29&\?{th}& \unline{2cm} \\
14&\?{th}& fourteenth & 30&\?{th}& \unline{2cm} \\
15&\?{th}& \unline{2cm} & 31&\?{st}& \unline{2cm} \\
16&\?{th}& sixteenth& & \\
\end{tabular}
\end{document}
作为练习,下面是输入第二种形式的更简单方法:
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage[sfdefault]{AlegreyaSans}
\usepackage{ulem,amsmath,array,collcell}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\newcount\ordinalcnt
\newcommand{\alignordinal}[1]{\doalignordinal#1\doalignordinal}
\def\doalignordinal{\afterassignment\typesetordinal\ordinalcnt=}
\def\typesetordinal#1\doalignordinal{%
\begingroup
\AlegreyaSansTLF
\ifnum\ordinalcnt<10 \phantom{0}\fi
\the\ordinalcnt
\endgroup
\textsuperscript{#1}%
}
\newcolumntype{O}{>{\collectcell\alignordinal}l<{\endcollectcell}}
\begin{document}
\begin{tabular}{Ol Ol}
1st & first & 17th & seventeenth \\
2nd & \unline{2cm} & 18th & \unline{2cm} \\
3rd & \unline{2cm} & 19th & \unline{2cm} \\
4th & \unline{2cm} & 20th & \unline{2cm} \\
5th & \unline{2cm} & 21st & \unline{2cm} \\
6th & \unline{2cm} & 22nd & \unline{2cm} \\
7th & seventh & 23rd & \unline{2cm}\\
8th & \unline{2cm} & 24th & twenty--fourth \\
9th & \unline{2cm} & 25th & twenty--fifth \\
10th & \unline{2cm} & 26th & twenty--sixth \\
11th & \unline{2cm} & 27th & \unline{2cm} \\
12th & \unline{2cm} & 28th & twenty--eighth \\
13th & \unline{2cm} & 29th & \unline{2cm} \\
14th & fourteenth & 30th & \unline{2cm} \\
15th & \unline{2cm} & 31st & \unline{2cm} \\
16th & sixteenth \\
\end{tabular}
\end{document}
答案4
我认为您看到的错位只是您使用的字体的一个功能。TeX 会对齐包含字形的框。它相信字体会告诉它这些框需要多大。比较这个例子(显然无衬线字体和衬线字体的混合很糟糕):
\documentclass[10pt]{article}
\usepackage{ulem,amsmath}
\newcommand{\unline}[1]{\rule[0pt]{#1}{0.6pt}}
\usepackage[T1]{fontenc}
\usepackage{cfr-lm}
\begin{document}
\sffamily\tlstyle%
\begin{tabular}{|@{}ll|@{}ll}
1$^{\text{st}}$& first & 17$^{\text{th}}$ & seventeenth \\
2$^{\text{nd}}$& \unline{2cm} & 18$^{\text{th}}$ & \unline{2cm} \\
3$^{\text{rd}}$& \unline{2cm} & 19$^{\text{th}}$ & \unline{2cm} \\
4$^{\text{th}}$& \unline{2cm}& 20$^{\text{th}}$ & \unline{2cm} \\
5$^{\text{th}}$& \unline{2cm}& 21$^{\text{st}}$ & \unline{2cm} \\
6$^{\text{th}}$& \unline{2cm} & 22$^{\text{nd}}$ & \unline{2cm} \\
7$^{\text{th}}$& seventh& 23$^{\text{rd}}$& \unline{2cm}\\
8$^{\text{th}}$& \unline{2cm}& 24$^{\text{th}}$ & twenty$-$fourth \\
9$^{\text{th}}$& \unline{2cm}& 25$^{\text{th}}$ & twenty$-$fifth \\
10$^{\text{th}}$& \unline{2cm}& 26$^{\text{th}}$ & twenty$-$sixth \\
11$^{\text{th}}$& \unline{2cm}& 27$^{\text{th}}$ & \unline{2cm} \\
12$^{\text{th}}$& \unline{2cm} & 28$^{\text{th}}$ & twenty$-$eighth \\
13$^{\text{th}}$& \unline{2cm}& 29$^{\text{th}}$ & \unline{2cm} \\
14$^{\text{th}}$& fourteenth& 30$^{\text{th}}$ & \unline{2cm} \\
15$^{\text{th}}$& \unline{2cm} & 31$^{\text{st}}$ & \unline{2cm} \\
16$^{\text{th}}$& sixteenth& & \\
\end{tabular}
\end{document}
垂直规则只是为了演示对齐。
顺便说一句,如果序数应该是文本,请使用\textsuperscript{}
。如果不是,则数字应包含在数学模式中。