对齐序数

对齐序数
\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{}。如果不是,则数字应包含在数学模式中。

相关内容