68

In my document which I compile with pdflatex (Ubuntu 11.04 TeX Live package). I use the Sans Serif font. Some keywords should be printed bold. I use the {\bf text} construct for this.

However, the bold printed keyword appear (to my taste) too bold, i.e. too fat. Is it possible to control the boldness of bold printed text?

8
  • 4
    If the font supports it, you can try to set the fontseries to semibold. As \bf is an deprecated command (use \textbfinstead), try something like: \newcommand{\sebo}[1]{{\fontseries{sb}#1}}, but close to none fonts support semibold Commented Sep 8, 2011 at 9:55
  • 1
    The solutions to \textbf{text} without increasing the length of the text might also be from interest for you. There a different "boldness" is achieved by scaling. Commented Sep 8, 2011 at 10:41
  • This solution to 'Set the "font-weight: lighter/ bolder" ' may be helpful.
    – mas
    Commented Sep 8, 2011 at 11:36
  • 2
    @Tom: You need \selectfont after \fontseries. Commented Sep 8, 2011 at 15:35
  • @Andrey Vihrov: Whoah, of course! What a lapse. Thanks for pointing out. Commented Sep 8, 2011 at 18:18

6 Answers 6

35

This is font-specific and is produced and fixed at production time. That is, the way to change the "boldness" would be to switch to a different font series.

There is at least one possible alternative by means of the contour package. It duplicates a piece of text a certain number of times at a fixed length away from the origin, thereby creating the illusion of being slightly more bold. The intent of the package is to provide a contour around text of a chosen colour. Including this package with the outline package option, together with \usepackage[T1]{fontenc} yields the desired output. If you choose a black contour, you get the following:

\documentclass{article}
\usepackage[T1]{fontenc}% http://ctan.org/pkg/fontenc
\usepackage[outline]{contour}% http://ctan.org/pkg/contour
\usepackage{xcolor}% http://ctan.org/pkg/xcolor
\begin{document}
\renewcommand{\arraystretch}{1.5}
\contourlength{0.1pt}
\contournumber{10}%
\begin{tabular}{lc}
  \verb|bold| & bold \\
  \verb|\textbf{bold}| & \textbf{bold} \\
  \verb|\contourlength{0.1pt}| & \\
  \verb|\contournumber{10}| & \\
  \verb|\contour{black}{bold}| & \contour{black}{bold}
\end{tabular}
\end{document}

bold contours

The first bold is typeset in normal font. The second bold is typeset in bfseries (using \textbf{...} rather than {\bf ...}, by the way - see l2tabu). The third bold is typeset using contour with the settings

  • \contournumber{10}: reprint text 10 times;
  • \contourlength{0.1pt}: offset text reprints by 0.1pt.

The copies are evenly distributed around the original. In more detail from the countour package documentation:

The used technique is quite simple. By default, in a circle around the original text position the same text is printed evenly distributed 16, 32, or a given number times. The default radius for the circle is 0.03 em. If requested and supported by the used driver (...) a real outline can be choseninstead of text copies.

3
  • 6
    When using Type 1 fonts (by saying \usepackage[T1]{fontenc} in the preamble), the contour package can even produce high-quality real outlines: Just load it like \usepackage[outline]{contour}
    – diabonas
    Commented Sep 8, 2011 at 10:38
  • 1
    @diabonas: It was too late for me to pick up on that - thanks. I've updated my answer to reflect this choice.
    – Werner
    Commented Sep 8, 2011 at 14:12
  • 1
    Does this not work in a beamerposter? I used \contour{black}{myword} and it didn't do anything. I tried going up to \contourlength{20pt} and \contournumber{100}, not that I know what those do, but it had no effect.
    – Joe
    Commented Feb 6, 2022 at 21:32
30

The common values for font series are (taken from fntguide):

m   Medium
b   Bold
bx  Bold extended
sb  Semi-bold
c   Condensed

m is the default font weight, bx is the default bold series. The c and sb weights do not exist in Computer Modern and Latin Modern. But it is a little known fact that the nonextended bold series, b, is also available for the roman family in these fonts.

You would switch to this series with

\fontseries{b}\selectfont Text…

and make it the default bold series (such that it affects \bfseries and \textbf) with

\renewcommand{\bfdefault}{b}

However, there is no similar font weight defined for the sans serif CM/LM font family.

Fortunately, Latin Modern comes to rescue with its Latin Modern Sans Demi Cond font, available in regular and oblique shapes. This font is somewhat more dense than the normal one, but because of that it also looks heavier. You can access this font through the sbc font weight, which can be used just as b above. If you use XeLaTeX or LuaLaTeX, you can also select this font by name with fontspec.

And to show all the fonts:

Example

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\newcommand{\test}[2]{%
  \makebox[2.5cm][l]{#2:} {\fontseries{#1}\selectfont The quick brown fox\dots}\par}

\begin{document}

Roman font family:

\test{m}  {Medium}
\test{b}  {Bold}
\test{bx} {Bold extended}

\null\par

\sffamily
Sans serif font family:

\test{m}  {Medium}
\test{sbc}{Sans Demi Cond}
\test{bx} {Bold extended}

\end{document}

If you use a font other than Computer Modern or Latin Modern, you can check for the font weights mentioned before or examine the list of font files/font documentation.

1
  • 1
    Amazing. I used this inside a tcolorbox, e.g. fontupper=\color{blue}\boldmath\fontseries{sb}\selectfont, so it emphasizes the math more than the text. Not sure how clever it is, but today I like it.
    – PatrickT
    Commented Nov 7, 2017 at 5:48
8

Here's an option with xfakebold:

enter image description here

\documentclass{article}

\usepackage{xfakebold}

\newcommand{\fbseries}{\unskip\setBold\aftergroup\unsetBold\aftergroup\ignorespaces}
\makeatletter
\newcommand{\setBoldness}[1]{\def\fake@bold{#1}}
\makeatother

\begin{document}

This is some regular text.

% Default boldness = 0.3
This is some {\fbseries fake bold} text.

\setBoldness{0.5}%
This is some {\fbseries fake bolder} text.

\setBoldness{1}%
This is some {\fbseries fake boldest} text.

\end{document}
11
  • How may I combine the \fbseries and \setBoldness commands into a single command with the #1 parameter as an optional parameter set to the default [0.3] if not specified? Commented Apr 2, 2022 at 6:26
  • @RosesBouquet: Try this code.
    – Werner
    Commented Apr 3, 2022 at 5:23
  • Thank you for the code. The code appears to work, particularly for less bold, or bold-lite styles. But I am unable to adjust the degree of boldness to what appears to be just one level less bold than the default. I am unable to include a screen capture of what I am seeing in my PDF file. Is there an intentional limit to how lite I can make the bold? Commented Apr 6, 2022 at 14:55
  • @RosesBouquet: The difference between \fakebold[0.2] and \fakebold (the default 0.3) is extremely small, but it is there. Here is a range of \fakebold from 0.1 to 1.0: Image.
    – Werner
    Commented Apr 6, 2022 at 16:12
  • Thank you for the response. I am very interested in any gradations in bold that exist between the default bold and default text. The xfakebold command is or great interest to me, and I'd like to learn more about how to access a lite'r-bold using xfakebold that I do not see when I use options less than 0.3. There is some differential, but it does not appear to lessen as I decrease the option below 0.3. I realize this may require additional coding given the original design expectation for values above 0.3, but I believe there may be significant interest in a range of values below 0.3. Commented Apr 8, 2022 at 5:32
2

I was looking for the answer to change boldness for a single letter in the document. So for people coming from google for that, here is one (bad) solution for one-time use. It is not nice code but it works for a single letter, I chose w:

\mbox{w\hspace{0.04mm}\llap{w}}

the hspace can be ranging from 0.05 to 0.01 depending on the boldness wanted. There are of course many issues with this just judging by the code, but it will do for a one-time thing.

Example: normal, little-bold, bold

w \mbox{w\hspace{0.05mm}\llap{w}} \textbf{w}

enter image description here

1

For me a simple package times helps

\usepackage{times}

Before adding times package: enter image description here

After:

enter image description here

0

Here is a simple way you can do this. Just define a new color, and change the text to be a "lighter" color, then cast this to be bold. You can control the "boldness" using the grayscale value of the text.

\documentclass{article}
\usepackage{color}

\definecolor{boldcolor}{gray}{0.3} % range from [0,1]
\newcommand{\lightbold}[1]{\textbf{\textcolor{boldcolor}{#1}}}

\begin{document}
    Regular

    \lightbold{Lightbold}

    \textbf{Bold}
\end{document}

You can specifically control the "boldness" variable by changing the following line of code:

\definecolor{boldcolor}{gray}{BOLDNESS} % BOLDNESS values are in range [0,1]

Comparison between Lightbold and Bold

1
  • Welcome to TeX.SE!
    – Mensch
    Commented Apr 2 at 21:21

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .