13

I'm trying to write a nice number symbol (#). The usual tex way is just to put a backslash before, like this \#. The symbol that is created drops below the baseline of the rest! This is what I want to avoid.

Is there a nice package, or something else, that will allow me to write a nicer looking number symbol?

  • Welcome to TeX.SX! You can have a look at our starter guide to familiarize yourself further with our format. –  Apr 04 '15 at 15:52
  • That depends on what you want it for. In text, some OpenType fonts have features that change # to № or that shrink # down to fit with oldstyle numbers. – Thérèse Apr 04 '15 at 17:00
  • I think this has to do more with the typography you decide to use. A good one has a set of non alphabetical symbol (such that) well designed instead the boring and generic design present in many others. – Aradnix Apr 04 '15 at 17:17

3 Answers3

14

Does this look nice?

\documentclass{article}

\begin{document}
Using \verb|\verb|: \verb|#| and using \verb|\texttt|: \texttt{\#} and then regular symbol using \verb|\#|: \#

\end{document}

enter image description here

8

And this one?

\documentclass{article}
\newcommand{\myhash}{\raisebox{\depth}{\#}}
\begin{document}
\# or \myhash?
\end{document}

enter image description here

The second hash fits your requirement (not dropping below the baseline), but personally I think the first is better positioned.

Franck Pastor
  • 18,756
  • 4
    Anyway, a nice hash symbol is a contradiction in terms. – egreg Apr 04 '15 at 14:26
  • 1
    I agree. Compare p = \# d with p = \myhash d The depth of \# is the same that "p", and is as high as "d". In this way is too high. – Fran Apr 04 '15 at 14:30
  • You are right that your solution makes the baseline follow the normal letter baseline. But as @Fran, I don't like that it now is higher than normal letters. But anyway, thanks for posting your solution:) – Christian Olsen Apr 04 '15 at 17:29
  • @ChristianOlsen I do agree with you: placed just upon the baseline, the standard hash symbol is way too high relatively to the other letters. But you asked for it, so I got it for you :-) – Franck Pastor Apr 04 '15 at 20:00
7

A solution with TikZ. The hash sign has the width of 80% of the equals sign, see \myWidth, and the height of an uppercase letter, see \myHeight. The vertical distance of the horizontal lines is configured as a third of the width, see \mySepY. The angle of the slanted lines is configured by \myAngle. Also side bearings are added, see \mySideBearing. The line caps are round:

\documentclass{article}

\usepackage{tikz}
\newcommand*{\myhash}{%
  \begin{tikzpicture}
    % Width: 80% of equal sign
    \pgfmathsetlengthmacro\myWidth{.8*width("=")}%
    % Height: height of uppercase letter
    \pgfmathsetlengthmacro\myHeight{height("H")}%
    % Space between horizontal lines
    \pgfmathsetlengthmacro\mySepY{.3333*\myWidth}%
    % Side bearing
    \pgfmathsetlengthmacro\mySideBearing{.1*\myWidth}%
    % Angle for slanted vertical lines
    \def\myAngle{70}%
    % Calculate separation of vertical lines in horizontal direction
    \pgfmathsetlengthmacro\mySepX{\mySepY/sin(\myAngle)}%
    % Calculate the width of a slanted line
    \pgfmathsetlengthmacro\mySlantX{\myHeight/tan(\myAngle)}%
    \draw[line cap=round]
      (0, {(\myHeight - \mySepY)/2}) -- ++(\myWidth, 0)
      (0, {(\myHeight + \mySepY)/2}) -- ++(\myWidth, 0)
      ({(\myWidth - \mySepX - \mySlantX)/2}, 0)
      -- ({(\myWidth - \mySepX + \mySlantX)/2}, \myHeight)
      ({(\myWidth + \mySepX - \mySlantX)/2}, 0)
      -- ({(\myWidth + \mySepX + \mySlantX)/2}, \myHeight)
    ;%
    \useasboundingbox
      (-\mySideBearing, 0)
      (\myWidth + \mySideBearing, \myHeight)
    ;% 
  \end{tikzpicture}%
}

\begin{document}
  A\myhash B vs.\@ A\#B
\end{document}

Result

Heiko Oberdiek
  • 271,626