在 siunitx 列中使用 textcomp 货币符号会导致编译错误

在 siunitx 列中使用 textcomp 货币符号会导致编译错误

我有以下代码:

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\begin{document}
\begin{tabu}{rS}
  US  & \$5.00\\
  CAN & \$6.50\\
  UK  & \textsterling4.00\\
  EU  & \texteuro4.50\\
\end{tabu}
\end{document}

但是,尝试编译它会出现以下错误:

! Extra }, or forgotten \endgroup.
\__siunitx_table_column_end:n ...ne_fill_skip -#1}
                                                  \tex_kern:D \c_zero_skip \...
l.14 \end{tabu}

? 

答案1

这些命令不够强大/保护性,因此siunitx“认为”它们代表可扩展的内容。因此,尝试扩展它们会导致问题。您最好让它们具有引擎鲁棒性:

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage{etoolbox}
\robustify\textsterling
\robustify\texteuro
\begin{document}
\begin{tabu}{rS}
  US  & \$5.00\\
  CAN & \$6.50\\
  UK  & \textsterling4.00\\
  EU  & \texteuro4.50\\
\end{tabu}
\end{document}

你可能还想进行强化\$,以便所有标记的解释都是相同的,并告诉siunitx数字和数字前部分的间距

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\usepackage{etoolbox}
\robustify\$
\robustify\textsterling
\robustify\texteuro
\begin{document}
\begin{tabu}{rS[table-format = 1.2, table-space-text-pre = \textsterling]}
  US  & \$5.00\\
  CAN & \$6.50\\
  UK  & \textsterling4.00\\
  EU  & \texteuro4.50\\
\end{tabu}
\end{document}

“隐藏”输入标记也会起作用,但代价是阅读起来会稍微不那么“愉快”。

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\begin{document}
\begin{tabu}{rS[table-format = 1.2, table-space-text-pre = \textsterling]}
  US  & {\$}5.00\\
  CAN & {\$}6.50\\
  UK  & {\textsterling}4.00\\
  EU  & {\texteuro}4.50\\
\end{tabu}
\end{document}

这告诉包内容是文本,因此不是数字的一部分。


最好使用单独的列来表示该单元

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\begin{document}
\begin{tabu}{rl@{}S}
  US  & \$            & 5.00\\
  CAN & \$            & 6.50\\
  UK  & \textsterling & 4.00\\
  EU  & \texteuro     & 4.50\\
\end{tabu}
\end{document}

你可能还应该告诉包有多少位数字

\documentclass{standalone}
\usepackage{siunitx}
\usepackage{tabu}
\usepackage{lmodern}
\usepackage{textcomp}
\begin{document}
\begin{tabu}{rl@{}S[table-format = 1.2]}
  US  & \$            & 5.00\\
  CAN & \$            & 6.50\\
  UK  & \textsterling & 4.00\\
  EU  & \texteuro     & 4.50\\
\end{tabu}
\end{document}

相关内容