我定义了如下命令:
\makeatletter
\newcommand{\ion}[2]{#1$\;$\textsc{\rmfamily\@roman{#2}}\relax}
\makeatother
目的是用小写罗马数字(例如\ion{He}{2}
)排版电离状态。这在我的正文和表格脚注中运行良好,但在标题列中却失败了。以下是一个例子:
关于如何修复此问题有什么建议吗?
答案1
最小化 MWE,因为这与表头无关,但与那里使用的粗体字体有关:
\documentclass{article}
\makeatletter
\newcommand{\ion}[2]{#1$\;$\textsc{\rmfamily\@roman{#2}}\relax}
\makeatother
\begin{document}
\ion{He}{4}
\textbf{\ion{He}{4}}
\end{document}
你得到了错误的外观:
并发出警告:
LaTeX Font Warning: Font shape `OT1/cmr/bx/sc' undefined
(Font) using `OT1/cmr/bx/n' instead on input line 9.
这意味着,没有带小写字母的粗体版本,而是使用常规(正常)粗体字体。Computer Modern 字体作为其后继者,Latin Modern 字体缺少小写字母的粗体变体。带有粗体变体的字体是 TG Termes,它是 TeX Gyre 字体项目的 Times Roman 克隆版:
\usepackage{tgtermes}
一个穷人的解决方案是使用大写字母来伪造粗体字体的小写字母,然后将其缩小到小写字母的大小。至少这可以避免更改整个字体系列。
\documentclass{article}
\usepackage{graphicx}
\makeatletter
\newcommand{\ion}[2]{%
#1$\;$%
% Test for bold font by inspecting \f@series, it can be "b" or "bx"
\if b\expandafter\@car\f@series\relax\@nil
\begingroup % keep changes to scratch box register 0 local
\sbox0{\rmfamily\mdseries\textsc{v}}%
\resizebox{!}{\ht0}{\rmfamily\@Roman{#2}}%
\endgroup
\else
\textsc{\rmfamily\@roman{#2}}%
\fi
}
\makeatother
\begin{document}
\ion{He}{4}
\textbf{\ion{He}{4}}
\end{document}
现在有了支持功能的强大版本hyperref
。然后\ion
也可以在标题和章节标题中使用:
\documentclass{article}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{bookmark}
\makeatletter
\newcommand{\ion}{}% Check, that \ion is not yet defined
\DeclareRobustCommand*{\ion}[2]{%
#1$\;$%
% Test for bold font by inspecting \f@series, it can be "b" or "bx"
\if b\expandafter\@car\f@series\relax\@nil
\begingroup % keep changes to scratch box register 0 local
\sbox0{\rmfamily\mdseries\textsc{v}}%
\resizebox{!}{\ht0}{\rmfamily\@Roman{#2}}%
\endgroup
\else
\textsc{\rmfamily\@roman{#2}}%
\fi
}
\makeatother
% hyperref support
\pdfstringdefDisableCommands{%
\renewcommand*{\ion}[2]{%
#1 %
\@Roman{#2}% LaTeX's version via \@slowromancap is expandable
}%
}
\begin{document}
\tableofcontents
\section{\ion{He}{4}}
\ion{He}{4}
\textbf{\ion{He}{4}}
\end{document}
答案2
如果你不想使用其他字体,可以考虑直接加载bold-extra
。这是相似的与 Heiko 的回复中提到的“穷人的解决方案”不同,不同之处在于它实际上从 Computer Modern 源构建了一个真正的、纯蓝色的粗体小型大写字体,而无需缩放和随之而来的质量损失。
\documentclass{article}
\usepackage{bold-extra}
\begin{document}
\textsc{He iv}---\textbf{He iv}---\textsc{\textbf{He iv}}
\end{document}
请注意,这些是 Metafont 源,据我所知,它们从未转换为轮廓格式;这意味着您的 pdf 中会有位图。但在现代 pdf 查看器中,这还不算太糟;下面的屏幕截图来自xpdf
:
另一个好处是,您拥有的字体与其他正文字体完全匹配(假设您使用的是 Computer/Latin Modern)。