伪造小写字母作为风格

伪造小写字母作为风格

如果这个问题已经有人问过了,我很抱歉,但是搜索了大约 2 个小时后,我没有找到任何东西。

因此,我使用的是希腊 Linux Libertine 字体,它不提供小型大写字母,这意味着我必须定义命令\fauxsc{},如 egreg 所建议的那样这里。每当我将其用作 时,它都会正常工作\fauxsc{Text text text}。但是,当我必须将其用作样式时(例如,如果我想在章节名称中使用小型大写字母,因此必须重新定义\titleformat{\chapter}),它就无法工作,因为它需要文本作为参数。

换句话说,如果\fauxsc{...}是 的替代方案\textsc{...},那么我正在寻找 的替代方案\scshape

答案1

欢迎!如果您提出此问题的原因是想要将其用作\textsc章节标题,则可以使用explicit此处的选项将标题文本包装在宏中。

\documentclass{article}
\usepackage[explicit]{titlesec}
\usepackage{graphicx}
\usepackage{plex-serif}
\usepackage{roboto}
% from https://tex.stackexchange.com/a/499046/194703
\let\textsc\relax
\DeclareRobustCommand{\textsc}[1]{%
  \sbox0{x\xdef\testA{\the\font}}%
  \sbox0{\scshape x\xdef\testB{\the\font}}%
  \ifx\testA\testB\fauxsc{#1}\else{\scshape #1}\fi
}

\makeatletter
\newlength\fake@f
\newlength\fake@c
\def\fakesc#1{%
  \begingroup
  \xdef\fake@name{\csname\curr@fontshape/\f@size\endcsname}%
  \fontsize{\fontdimen8\fake@name}{\baselineskip}\selectfont
  \MakeUppercase{#1}%
  \endgroup
}
\makeatother
\newcommand\fauxsc[1]{\fauxschelper#1 \relax\relax}
\def\fauxschelper#1 #2\relax{%
  \fauxschelphelp#1\relax\relax
  \if\relax#2\relax\else\ \fauxschelper#2\relax\fi
}
\def\Hscale{.83}\def\Vscale{.72}\def\Cscale{1.00}
\def\fauxschelphelp#1#2\relax{%
  \ifnum`#1>``\ifnum`#1<`\{\scalebox{\Hscale}[\Vscale]{\uppercase{#1}}\else
    \scalebox{\Cscale}[1]{#1}\fi\else\scalebox{\Cscale}[1]{#1}\fi
  \ifx\relax#2\relax\else\fauxschelphelp#2\relax\fi}

% explicit title format
\titleformat{name=\section}
[block]
{\large}
{\thesection}
{10pt}
{ \textsc{#1}}
[]   
\begin{document}
\section{A Test Section}
\end{document}

在此处输入图片描述

请注意,如果您也想在目录中使用它,您也需要使用titletoc并指示它使用\textsc。请参阅这里举一个具体的例子。

相关内容