如何影响整个文档的命令?

如何影响整个文档的命令?

我有一份很长的文档,其中包含很多\textbf{...}\textit{...}甚至只是句子中间。我想在序言中添加一些内容,以便将每个粗体或斜体的文本变为无衬线文本。我需要它是可逆的(这就是为什么我不想通过添加 来更改数百个出现的\sffamily{...})。

我已经尝试使用

\let\oldtextbf\textbf  
\renewcommand{\textbf}{\sffamily\oldtextbf}
\let\oldtextit\textit
\renewcommand{\textit}{\sffamily\oldtextit}

但这只会从第一次出现到文档结束产生无衬线字体。每次粗体或斜体文本结束时,我应该使用什么来恢复正常字体?

答案1

LaTeX 已经具备了实现这一目标的基础设施:

\documentclass{memoir}
\usepackage{lmodern}

\DeclareTextFontCommand{\textbf}{\sffamily\bfseries}
\DeclareTextFontCommand{\textit}{\sffamily\slshape}

\begin{document}

Now is \textbf{the time} for \textit{all good} men...

\end{document}

在此处输入图片描述

请注意,的默认定义\textbf

\DeclareTextFontCommand{\textbf}{\bfseries}

而且这绝对是不是\textbf重新定义使用是个好主意\renewcommand,这会使命令变得脆弱。使用上述方法,只需注释掉这两行即可逆转这种情况,命令\textbf\textit仍然保持健壮。

然而,最好的可能是定义个人命令来代替\textbf\textit

\DeclareTextFontCommand{\bfemph}{\sffamily\bfseries}
\DeclareTextFontCommand{\itemph}{\sffamily\slshape}
%\DeclareTextFontCommand{\bfemph}{\bfseries}
%\DeclareTextFontCommand{\itemph}{\itshape}

切换注释以使用一个版本或另一个版本,并\bfemph\itemph文档中使用。

相关内容