6

Macrons appear really wide on all characters, but especially so on the i. Is it possible to make them less wide?

\documentclass{article}
\begin{document}
Tac\=e, M\=arc\=o, \=unus, f\=\i li\=\i?
\end{document}

really wide macrons

5

You can define a short one that matches the longer ones and fits quite well on the i like this:

\newcommand{\shortmacron}{%
   \makebox[0pt][l]{%
      \rule[1.3ex]{0.2em}{0.035em}%
   }%
}

Another way is to define a smart version that automatically adapts it’s length. I also set this one a little lower to minimize the conflict with the drop serif of the f

\newlength\tmp
\newcommand{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.035em}%
   }\kern-\tmp#1%
}

Using the xstring package to check which letter follows, we can define the macro even more smart and align the macron better on top of the letter:

\usepackage{xstring}
\newlength\tmpa
\newlength\tmpb
\newlength\tmpc
\newcommand{\supersmartmacron}[1]{%
   \settowidth{\tmpa}{#1}% width of letter
   \setlength{\tmpb}{0em}% x-shift
   \setlength{\tmpc}{1.23ex}% raise
   \IfStrEqCase{#1}{%
      {a} {\setlength{\tmpb}{-0.04em}}%
      {e} {\setlength{\tmpb}{-0.01em}}%
      {i} {\setlength{\tmpb}{-0.045em}\setlength{\tmpc}{1.8ex}}%
      {\i}{\setlength{\tmpb}{-0.045em}}%
      {o} {\setlength{\tmpb}{-0.01em}}%
      {u} {\setlength{\tmpb}{-0.04em}}%
   }
   \makebox[\tmpa][c]{%
      \kern\tmpb\rule[\tmpc]{0.6\tmpa}{0.035em}%
   }\kern-\tmpa#1%
}

Of curse the right values for the lengthen \tmpa, \tmpb and \tmpc depend on the selected typeface.

Result and demo code
(original macron, short macron, smart macron, super smart macron)

macrons

\documentclass{article}

\newcommand{\shortmacron}{%
   \makebox[0pt][l]{%
      \rule[1.3ex]{0.2em}{0.035em}%
   }%
}

\newlength\tmp
\newcommand{\smartmacron}[1]{%
   \settowidth{\tmp}{#1}%
   \makebox[\tmp][c]{%
      \rule[1.2ex]{0.6\tmp}{0.035em}%
   }\kern-\tmp#1%
}

\usepackage{xstring}
\newlength\tmpa
\newlength\tmpb
\newlength\tmpc
\newcommand{\supersmartmacron}[1]{%
   \settowidth{\tmpa}{#1}% width of letter
   \setlength{\tmpb}{0em}% x-shift
   \setlength{\tmpc}{1.23ex}% raise
   \IfStrEqCase{#1}{%
      {a} {\setlength{\tmpb}{-0.04em}}%
      {e} {\setlength{\tmpb}{-0.01em}}%
      {i} {\setlength{\tmpb}{-0.045em}\setlength{\tmpc}{1.8ex}}%
      {\i}{\setlength{\tmpb}{-0.045em}}%
      {o} {\setlength{\tmpb}{-0.01em}}%
      {u} {\setlength{\tmpb}{-0.04em}}%
   }
   \makebox[\tmpa][c]{%
      \kern\tmpb\rule[\tmpc]{0.6\tmpa}{0.035em}%
   }\kern-\tmpa#1%
}

\begin{document}
%\huge
%\tiny
Tac\=e, M\=arc\=o, \=unus, f\=\i li\=\i?

Tac\shortmacron e, M\shortmacron arc\shortmacron o, \shortmacron unus, f\shortmacron\i li\shortmacron\i?

Tac\smartmacron e, M\smartmacron arc\smartmacron o, \smartmacron unus, f\smartmacron\i li\smartmacron\i?

Tac\supersmartmacron e, M\supersmartmacron arc\supersmartmacron o, \supersmartmacron unus, f\supersmartmacron\i li\supersmartmacron\i?

\=a \shortmacron a

\=a \smartmacron a

\=a \supersmartmacron a\quad
\=e \supersmartmacron e\quad
\=i \supersmartmacron i\quad
\=\i \supersmartmacron \i\quad
\=o \supersmartmacron o\quad
\=u \supersmartmacron u\quad

\supersmartmacron a\quad
\supersmartmacron e\quad
\supersmartmacron i\quad
\supersmartmacron \i\quad
\supersmartmacron o\quad
\supersmartmacron u\quad
\end{document}

To use the shortcut with on of the smart versions call

\let\=\supersmartmacron

in your preamble.

  • You’re welcome! Please see my addition of \supersmartmarcon which gives even better results. – Tobi Aug 28 '15 at 8:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.