This seems like a simple question ...

I know from this question that \hrule and presumably \hrulefill have a thickness of 0.4pt. I think \hrule is a primitive, so does that mean that you cannot change the thickness of \hrulefill?

  • 3
    You can use \hrule height 4pt. See TeXbook chapter 21 page 221. Commented Aug 3, 2012 at 16:13

1 Answer 1


The default height for \hrule is 0.4pt (not a parameter whose default value is 0.4pt) so you are correct that it may not be changed via setting a parameter. However \hrulefill is only a macro so you can change it if you wish.

It is defined by



\def\hrulefill{\leavevmode\leaders\hrule height 2pt\hfill\kern\z@}

would make it thicker

  • I am assuming it is not possible to define a primitive that depends on a parameter, since that doesn't seem like it would be a primitive anymore.
    – StrongBad
    Commented Aug 4, 2012 at 12:20
  • 2
    Well yes you or I can't define a primitive however it would have been possible for tex-the-program to define the default widths of rules to be a dimen register \defaultrulewidth or some such, but it doesn't. Compare with the primitive \indent which indents by an amount given by the primitive dimen parameter \parindent. Somewhat unusually in TeX, the rule width is a hard wired numerical default. Commented Aug 4, 2012 at 12:29
  • 2
    Perhaps instead of \z@ we Plain TeX guys could use 0pt? Searching on it brought me to this answer which suggests so. Commented Jun 18, 2015 at 15:19
  • 1
    I see it there, but I get Undefined control sequence from xetex. Commented Jun 18, 2015 at 15:45
  • 1
    @DanielLyons of course you would in latex too: you need to make the definition at a point that @ is a letter (\catcode`\@=11) otherwise you have \z (undefined) followed by @ Commented Jun 18, 2015 at 15:47

You must log in to answer this question.

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