![重新定义 \textbf 为始终无衬线](https://linux22.com/image/300693/%E9%87%8D%E6%96%B0%E5%AE%9A%E4%B9%89%20%5Ctextbf%20%E4%B8%BA%E5%A7%8B%E7%BB%88%E6%97%A0%E8%A1%AC%E7%BA%BF.png)
正如标题所说,有没有办法让粗体文本自动排版为无衬线字体?我在想
\renewcommand{\bfdefault}{???}
但我不知道该重新定义什么?
答案1
您是否尝试过插入
\renewcommand{\textbf}[1]{{\bfseries\sffamily#1}}
在你的文档的序言中?请注意双花括号;里面的一对花括号用于限制\bfseries\sffamily
对参数的应用\textbf
。
附录:正如 cgnieder 和 egreg 的评论所暗示的,LaTeX 内核(参见文件latex.ltx
,大约第 3720 行)提供了以下定义\textbf
:
\DeclareTextFontCommand{\textbf}{\bfseries}
如果在 TeX 处于数学模式时遇到宏,则宏\DeclareTextFontCommand
会小心地保持整洁。\textbf
为了保持同样整洁,最好重新定义\textbf
如下:
\DeclareTextFontCommand{\textbf}{\bfseries\sffamily}
答案2
的定义\bfseries
如下latex.ltx
\DeclareRobustCommand\bfseries
{\not@math@alphabet\bfseries\mathbf
\fontseries\bfdefault\selectfont}
所以可以说
\makeatletter
\DeclareRobustCommand\bfseries{%
\not@math@alphabet\bfseries\mathbfsf
\fontfamily\sfdefault\fontseries\bfdefault\selectfont
}
\DeclareMathAlphabet{\mathbfsf}{OT1}{\sfdefault}{\bfdefault}{n}
\makeatother
以下是完整的示例:
\documentclass{article}
\usepackage{lmodern} % for sans serif bold slanted
\makeatletter
\DeclareRobustCommand\bfseries{%
\not@math@alphabet\bfseries\mathbfsf
\fontfamily\sfdefault\fontseries\bfdefault\selectfont
}
\DeclareMathAlphabet{\mathbfsf}{OT1}{\sfdefault}{\bfdefault}{n}
\makeatother
\begin{document}
This {\bfseries is sans} and this \textbf{too}; what
about math? Here it is: $a\textbf{x}$; also italic is
applied: \textbf{\textit{abc}} or \textit{\textbf{abc}}.
\end{document}
当然,如果想要衬线数学粗体,\mathbfsf
则应保留\mathbf
并删除字体字母声明。