假半粗体(粗体但不增加文本长度)

假半粗体(粗体但不增加文本长度)

我使用的字体没有半粗体粗细。

我想伪造一种与常规字体宽度相似的粗体字体。

我尝试使用这种方法https://tex.stackexchange.com/a/23691/41036

\newsavebox\CBox
\def\textBF#1{\sbox\CBox{#1}\resizebox{\wd\CBox}{\ht\CBox}{\textbf{#1}}}

它对于单个单词非常有效,但是不允许换行等。

我如何重新定义此命令以将其用于更长的表达式,最好像我通常使用的那样\bfseries(例如,通过定义一个新的命令\bfsemiseries)?

最诚挚的问候,Mil

答案1

您无法扩展此命令。但您可以使用 pdfliteral(假设您使用 pdflatex):

\documentclass[]{article}
\newcommand{\textBF}[1]{%
    \pdfliteral direct {2 Tr 0.3 w} %the second factor is the boldness
     #1%
    \pdfliteral direct {0 Tr 0 w}%
}

\usepackage{lipsum}

\begin{document}
some text 

\textBF{some text}

\textbf{some text}

\lipsum[1]

\textBF{\lipsum[1]}
\end{document}

在此处输入图片描述

答案2

fontspec软件包支持FakeBold字体选项。您可以使用\newfontfamily\somefamily{Some Font}[FakeBold=1.2]\addfontfeature{FakeBold=1.2}(或您喜欢的任何数字,但正常粗细为 1.0,粗体的典型值为 1.5)。

如果您想添加可以使用 和 等命令选择的半粗体粗细\sbseries\textsb{}请参阅以下示例:

\documentclass[varwidth, preview]{standalone}
\usepackage{fontspec}

\setmainfont{DejaVuSerif}[
  Scale = 1.0,
  Ligatures = {Common, Discretionary, TeX},
  UprightFont = * ,
  BoldFont = *-Bold ,
  ItalicFont = *-Italic ,
  BoldItalicFont = *-BoldItalic ,
  FontFace = {sb}{n}{ Font={*}, FakeBold = 1.2 },
  FontFace = {sb}{it}{ Font={*-Italic}, FakeBold = 1.2 },
  Extension = .ttf
]

% The commands to select semibold weight:
\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareTextFontCommand{\textsb}{\sbseries}

\begin{document}

DejaVu \textit{Serif} \\
\textbf{Bold \textit{Italic}} \\
\textsb{\textit{Fake} Semibold} 

\end{document}

DejaVu 衬线示例

相关内容