如何在表头中设置粗体小型大写字母?

如何在表头中设置粗体小型大写字母?

我定义了如下命令:

\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}

结果 TG 术语

一个穷人的解决方案是使用大写字母来伪造粗体字体的小写字母,然后将其缩小到小写字母的大小。至少这可以避免更改整个字体系列。

\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}

结果 robust/hyperref

答案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

来自 bold-extra 的粗体小型大写字母示例。

另一个好处是,您拥有的字体与其他正文字体完全匹配(假设您使用的是 Computer/Latin Modern)。

相关内容