将改变字体的宏变成改变字体的“开关”

将改变字体的宏变成改变字体的“开关”

我想将字体更改宏变成“开关”(我在这个答案),使得诸如 的宏\macro{Text to be changed}在括号内工作,就像一样{\switch text to be changed},类似于\textbf\bfseries的行为。

我正在研究一个论文课程,它提供了可以更改的格式化命令,例如、等。但在整个课程中,这些格式化命令就像开关一样使用,因此您有一个\titleformat打印的命令。我想将其中一些格式化命令更改为真正的小写字母,我将其定义为,但我不知道如何切换到小写字母(我也尝试过使用包)。\authornameformat\titlepage{\titleformat \titledata}\DeclareRobustCommand{\smallcaps}[1]{\textls[10]{\scshape\MakeLowercase{#1}}}textcase\MakeTextLowercase

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[osf]{libertine}
\usepackage{letterspace}

\DeclareRobustCommand{\smallcaps}[1]{\textls[10]{\scshape\MakeLowercase{#1}}}

\begin{document}

\smallcaps{These are real smallcaps}, {\smallcaps these are not} and this is normal.

\end{document}

答案1

让我们定义\textsfsl选择\sffamily\slshape

\DeclareTextFontCommand{\textsfsl}{\sffamily\slshape}

命令名称不必以 开头text。LaTeX 会自动对 进行斜体校正\textsfsl{text},如下例所示:

\documentclass{article}
\DeclareTextFontCommand{\textsfsl}{\sffamily\slshape}
\begin{document}
abc \textsfsl{def}ghi

abc \sffamily\slshape def\/\normalfont ghi

abc \sffamily\slshape def\normalfont ghi
\end{document}

在此处输入图片描述

但是,如果您需要的是处理章节标题的逆向操作,那么还有另一种方法:titlesec 包提供了命令\titleformat,其最后一个强制参数可以以以章节标题为参数的命令结尾:例如,

\documentclass{article}
\usepackage[osf]{mathpazo}
\usepackage{titlesec,microtype}
\DeclareRobustCommand{\smallcaps}[1]{\textls[100]{\scshape\MakeLowercase{#1}}}
\titleformat{\section}
  {}
  {\textsc{\MakeLowercase{\thesection}}}
  {1em}
  {\smallcaps}

\begin{document}
\section{This is my section title}
\end{document}

得到以下结果

在此处输入图片描述

周围是为了应对可能出现的附录\MakeLowercase\thesection

答案2

我认为您是在寻找诸如\bf, \tt等的旧字体命令行为。这些“旧”样式的命令可以使用以下命令定义:

 \DeclareOldFontCommand{\mytt}{\sffamily\slshape}{\mathtt}

以下是如何使用它们的最简单方法,第一个参数是命令名称,第二个参数中紧接着是普通文本字体声明。最后一个参数是在数学模式下触发的数学字母表。

\documentclass{article}
\DeclareOldFontCommand{\mytt}{\sffamily\slshape}{\mathtt}
\begin{document}
{\mytt this is a test} and this is normal. 
\end{document}

该命令在 LaTeX 内核中定义ltfntcmd.dtx。所有 LaTeX 类(如书籍和文章)中都可以找到定义。这些类型的命令有很多限制。最好定义自己的语义宏。理想情况下,(La)TeX 文档中不应包含任何排版命令。例如,假设您要定义所有船舶名称都按照建议以斜体排版的普通英语样式指南进行排版。定义一个宏,例如:

\newcommand{\ship}[1]{\textit{#1}\xspace}

这种方法的优点是您可以修改宏以自动将它们添加到索引中。

答案3

这个用作开关:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[osf]{libertine}
\usepackage[letterspace=10]{letterspace}

\newcommand{\smallcaps}{\lsstyle\scshape}

\begin{document}

This is normal with some Uppercase Letters.

\smallcaps these are real smallcaps.

\normalfont This is normal with some Uppercase Letters.

{\smallcaps and these are smallcaps, again.}

\end{document}

请注意,您必须放弃使用\MakeLowercase,因此请注意,之后要用小写字母书写。\textls被 替换\lsstyle;字母间距因子必须作为包选项提供。 您应该只在组内使用开关,因为否则字母间距不会被重置,将第一句与我的示例中的第三句进行比较。

相关内容