我一直使用\textsc
来表示 的缩写AM
,PM
但它在 中不起作用\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}