使用 时\textbf{text}
, 的长度text
会增加。有没有办法text
在不增加长度的情况下使 变粗?
编辑:
感谢@Herbert 和@Martin,这对我来说是一个完美的解决方案:
\newsavebox\CBox
\newcommand<>*\textBF[1]{\sbox\CBox{#1}\resizebox{\wd\CBox}{\ht\CBox}{\textbf#2{#1}}}
答案1
\documentclass{article}
\usepackage{graphicx}
\newsavebox\CBox
\def\textBF#1{\sbox\CBox{#1}\resizebox{\wd\CBox}{\ht\CBox}{\textbf{#1}}}
\parindent=0pt
\begin{document}
foobarbaz y\\
\textbf{foobarbaz} y\\
\textBF{foobarbaz} y
\end{document}
例如beamer
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\newsavebox\CBox
\newcommand<>*\textBF[1]{\only#2{\sbox\CBox{#1}\resizebox{\wd\CBox}{\ht\CBox}{\textbf{#1}}}}
\parindent=0pt
\begin{document}
\begin{frame}{foo}
\only<1>{foobarbaz y1}
\textbf<2->{foobarbaz y2}
\textBF<3>{foobarbaz y3}
\end{frame}
\end{document}
另一个(更好的)可能性是使用包中的字母间距选项microtype
答案2
您可以使用\fontseries{b}\selectfont
选择非扩展粗体字体,当然前提是您使用的字体系列包含此类字体(如 computer modern 所包含)。为了进行比较,请注意\textbf
使用\fontseries{bx}
,其中 代表x
“扩展”。
答案3
这个答案只是为了向 Herber 的命令添加覆盖支持,他应该为此受到赞扬。
\newcommand<>\textBF[1]{\only#2{\dotextBF}{#1}}
\newcommand\dotextBF[1]{\sbox0{#1}\resizebox{\wd0}{\ht0}{\textbf{#1}}}
...
\textBF<2->{xyz}
从第二个屏幕开始,“xyz”将变为粗体。
我认为这不是在屏幕上强调事物的好方法;颜色更好。
答案4
如果您愿意(或被允许)切换到打字机(等宽)字体,那么您就不会遇到这个问题:常规字体和粗体字体具有完全相同宽度的字形。
以下 MWE 使用Courier
(缩放 5%,以使所用单声道字体和文本字体的大写字母高度相等),因为在该字体中,中等粗细和粗体之间的差异特别明显。该lmodern
包中也有粗体单声道字体,但与中等粗细的差异并不明显。
\documentclass{article}
\usepackage[scaled=1.05]{couriers} %%
\begin{document}
\noindent
\texttt{The quick brown fox 012456789}\\
\texttt{\bfseries The quick brown fox 012456789}
\end{document}
您可能需要考虑的另一种字体包是arev
。(鉴于您似乎正在准备一个 beamer 演示文稿,使用该arev
包无论如何都是一个不错的选择。)在 arev 包中,mono 字体与文本字体(无衬线字体)很好地协调,而中等和粗体 mono 字体则截然不同。