我有一份很长的文档,其中包含很多\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
文档中使用。