在 \textbf 中使用的 AM、PM 缩写(小型大写)

在 \textbf 中使用的 AM、PM 缩写(小型大写)

我一直使用\textsc来表示 的缩写AMPM但它在 中不起作用\textbf{}。正如您在图片中看到的那样,在 中\textbf{},它会恢复为正常的小写字母。Ulrike Fischer 建议使用 mathpazo 粗体小写字母,在尝试使用粗体字体时切换到大写字符,但结果标签MyTextsc显示的结果看起来不正确(我稍微修改了一下以应用\tiny大小更改):

在此处输入图片描述

效果不是很好,想知道其他人是否还有其他建议?

代码:

\documentclass{article}
\usepackage{lmodern}%
\usepackage[T1]{fontenc}%

\usepackage{graphicx}
\usepackage{xspace}

\makeatletter
\newcommand*{\AMorPMTextModeTextsc}[1]{%
        \@ifnextchar{.}%
            {\textsc{\,{\small#1}}}%
            {\textsc{\,{\small#1}}\xspace}%
}%

% https://tex.stackexchange.com/a/24635/4301
\DeclareRobustCommand{\MyTextsc}[1]{%
 \edef\@tempa{\f@series}\edef\@tempb{\bfdefault}%
 \ifx\@tempa\@tempb%
  \uppercase{{\tiny#1}}% \small here seems to do nothing
 \else
  {\scshape\small#1}%
 \fi }

\newcommand*{\AMorPMTextModeMyTextsc}[1]{%
        \@ifnextchar{.}%
            {\MyTextsc{\,{#1}}}%
            {\MyTextsc{\,{#1}}\xspace}%
}%

\makeatother


\newcommand{\PrintText}[1]{%
\makebox[8.0em][l]{Using \textbackslash#1:} 5:00\PM to 8:00\PM.\par
\makebox[8.0em][l]{Using \textbackslash#1:} \textbf{5:00\PM to 8:00\PM.}
}%

\begin{document}
\newcommand{\AM}{\AMorPMTextModeTextsc{am}}%
\newcommand{\PM}{\AMorPMTextModeTextsc{pm}}%
\PrintText{textsc}

\bigskip
\renewcommand{\AM}{\AMorPMTextModeMyTextsc{am}}%
\renewcommand{\PM}{\AMorPMTextModeMyTextsc{pm}}%
\PrintText{MyTextsc}
\end{document}

答案1

将大写字母缩放到与小型大写字母匹配(效果不佳)的一个好的经验法则是使用字体大小的 0.8 倍。

\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{xspace}
\makeatletter
\DeclareRobustCommand{\maybefakesc}[1]{%
  \ifnum\pdfstrcmp{\f@series}{\bfdefault}=\z@
    {\fontsize{\dimexpr0.8\dimexpr\f@size pt\relax}{0}\selectfont\uppercase{#1}}%
  \else
    \textsc{#1}%
  \fi
}
\newcommand\AM{\,\maybefakesc{am}\xspace}
\newcommand\PM{\,\maybefakesc{pm}\xspace}
\makeatother

\begin{document}

{\bfseries 5:00\AM to 8:00\AM}

5:00\AM to 8:00\AM

\textbf{\AM}\AM

\Huge\textbf{\AM}\AM

\end{document} 

请注意,如果您采用,那么您对后续时期的测试将毫无用处\xspace

在此处输入图片描述

并排比较时,粗体字可能看起来过高,但粗体字总会有些超出。可随意调整。

注意:如果传递的文本\maybefakesc比简单的 ASCII 字符串更复杂,请更改\uppercase\MakeUppercase

答案2

我的方法依赖于缩放软件包。如有必要,请阅读软件包文档。

\documentclass{article}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{relsize}
\usepackage{xspace}
\makeatletter
\protected\def\declarescsize{\@testopt\declare@scsize{1}}
\def\declare@scsize[#1]{%
  \protected\def\makesc##1{%
    \ifnum\pdfstrcmp{\f@series}{\bfdefault}=\z@
      \uppercase{{\relsize{#1}{##1}}}%
   \else
      \textsc{##1}%
   \fi
  }%
}
\newcommand\AM{\,\makesc{am}\xspace}
\newcommand\PM{\,\makesc{pm}\xspace}
\makeatother

% You can change the scale by calling \declarescsize:
\declarescsize[-1.2]

\begin{document}
\parindent0pt
{\bfseries 5:00\AM to 8:00\AM}

5:00\AM to 8:00\AM

\textbf{\AM}\AM

\par\bigskip
{\Huge\textbf{\AM}\AM}
\end{document}

在此处输入图片描述

相关内容