这是来自在数学模式中使用 palatino (mathpazo) 的旧式字体。原始问题已使用siunitx
而不是解决dcolumn
。但是,问题是我使用mathpazo
和osf
作为我的主要字体和eulervm
我的数学字体。siunitx
使用 来对齐表格会导致[]()
符号绘制在数学字体中,但数字绘制在文本字体中,如下面的 MWE 示例所示。
是否可以在普通文本字体中绘制符号或完全重新定义 S 列的数学字体?
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage[osf]{mathpazo}
\usepackage[euler-digits]{eulervm}
% For Tables created by estout
\newcommand{\sym}[1]{\ensuremath{^{#1}}} % for symbols in Table
\usepackage{siunitx}
\sisetup{ detect-mode,
group-digits = false ,
input-signs = ,
input-symbols = ()[]-+ ,
input-open-uncertainty = ,
input-close-uncertainty = ,
table-align-text-post = false
}
\begin{document}
\begin{tabular*}{\textwidth}{
l @{\extracolsep\fill} *{2}{S[table-format=4.4]} @{}}
\toprule
\multicolumn{1}{@{}l}{\emph{Age}} \\[0.5ex]
18--24 & [-1360.228]\sym{*} & -1371.941\sym{*} \\
& (6.915) & (-7.953) \\
25--34 & -219.216 & -240.271 \\
& (514.894) & (515.348) \\
35--44 & -310.715 & -311.438 \\
& (485.780) & (486.013) \\
55$+$ & -5.135 & [2.656] \\
& (53.267) & (533.875) \\
\bottomrule
\end{tabular*}
\end{document}
编辑:感谢 David,问题已得到解决,包括对amsmath
XeTeX 的修复和扩展。顺便提一下,*
generated by 的命令estout
现在应该只是纯文本:
\newcommand{\sym}1{#1} % 表示表中的符号
\newcommand{\sym}[1]{\rlap{$#1$}} % Thanks to David Carlise again.
答案1
如果siuintx
没有对此进行自定义,一种方法是让括号切换到文本模式,而不必弄乱数学字体布局,无论是全局的,还是像这里一样,只针对单个环境
\documentclass{scrartcl}
\usepackage{booktabs}
\usepackage[osf]{mathpazo}
\usepackage[euler-digits]{eulervm}
% For Tables created by estout
\newcommand{\sym}[1]{\ensuremath{^{#1}}} % for symbols in Table
\usepackage{siunitx}
\sisetup{ detect-mode,
group-digits = false ,
input-signs = ,
input-symbols = ()[]-+ ,
input-open-uncertainty = ,
input-close-uncertainty = ,
table-align-text-post = false
}
\def\xxx#1{%
\bgroup\uccode`\~\expandafter`\string#1%
\uppercase{\egroup\edef~{\noexpand\text\string#1}}%
\mathcode\expandafter`\string#1"8000 }
\def\textsymbols{\xxx[\xxx]\xxx(\xxx)}
\begin{document}
{\textsymbols
\begin{tabular*}{\textwidth}{
l @{\extracolsep\fill} *{2}{S[table-format=4.4]} @{}}
\toprule
\multicolumn{1}{@{}l}{\emph{Age}} \\[0.5ex]
18--24 & [-1360.228]\sym{*} & -1371.941\sym{*} \\
& (6.915) & (-7.953) \\
25--34 & -219.216 & -240.271 \\
& (514.894) & (515.348) \\
35--44 & -310.715 & -311.438 \\
& (485.780) & (486.013) \\
55$+$ & -5.135 & [2.656] \\
& (53.267) & (533.875) \\
\bottomrule
\end{tabular*}}
\end{document}
如果你使用 amsmath,则需要稍微修正一下后加载包
\usepackage{amsmath}
\makeatletter
\edef\originalbmathcode{%
\noexpand\mathchardef\noexpand\@tempa\the\mathcode`\(\relax}
\def\resetMathstrut@{%
\setbox\z@\hbox{%
\originalbmathcode
\def\@tempb##1"##2##3{\the\textfont"##3\char"}%
\expandafter\@tempb\meaning\@tempa \relax
}%
\ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@
}
\makeatother
正如评论中所述,这仍然保留了数学模式中的 - 符号,可以通过将 - 添加到文本符号列表中来更改:
\def\yyy{%
\bgroup\uccode`\~\expandafter`\string-%
\uppercase{\egroup\edef~{\noexpand\text{\char"2212\relax}}}%
\mathcode\expandafter`\string-"8000 }
\def\textsymbols{\xxx[\xxx]\xxx(\xxx)\yyy}
那是使用 (xetex) unicode 插槽作为 - (−) 符号,但是使用 MWE 中的字体时,符号全部消失,日志显示
Missing character: There is no − in font pplr9o!
Missing character: There is no − in font pplr9o!
Missing character: There is no − in font pplr9o!
Missing character: There is no − in font pplr9o!
然而,如果您有一种具有此字符的字体,或者有一种可以生成该字体内容的 LaTeX 命令,那么您可以进行调整\yyy
以进行匹配。