Memoir – Custom Left-Aligned Veelo Chapter Style

memoir

I'm trying to make a Memoir chapter style based on veelo, using this custom definition:

\documentclass[a5paper]{memoir}
\usepackage[utf8]{inputenc}

\usepackage{lipsum}
\usepackage{graphicx}
\usepackage[showframe]{geometry}

\newlength{\numberheight}
\setlength{\numberheight}{15mm}
\makechapterstyle{myveelo}{%
    \setlength{\afterchapskip}{30pt}
    \renewcommand*{\chapterheadstart}{\vspace*{10pt}}
    \renewcommand*{\afterchapternum}{\par\nobreak\vskip 10pt}
    \renewcommand*{\chapnumfont}{\normalfont\Huge\bfseries}
    \renewcommand*{\chaptitlefont}{\normalfont\Huge\bfseries}
    \renewcommand*{\printchaptername}{}
    \renewcommand*{\chapternamenum}{}
    \renewcommand*{\printchapternum}{%
        \makebox[0pt][l]{%
            \resizebox{!}{\numberheight}{\chapnumfont\thechapter}%
        }%
        \makebox[0pt][l]{%
            \hspace{\textwidth}%
            \hspace{1.5cm}%
            \rule{2cm}{\numberheight}%
        }
    }%
    \makeoddfoot{plain}{}{}{\thepage}
}

\chapterstyle{myveelo}

\begin{document}
\chapter{Introduction}
\lipsum[1]
\end{document}

An example chapter made with this (with showframe from the geometry package):

enter image description here

The problem is that the number is not aligned, and that the offset depends on the chapter number (1 is quite large, 4 is much smaller, etc.). Is there a way to left-align the number automatically for all chapter numbers?

Best Answer

You can apply a negative kerning depending on the initial digit.

I computed the following values by eye after looking closely them inside bounding boxes.

\documentclass[a5paper]{memoir}

\usepackage{lipsum}
\usepackage{graphicx}
\usepackage[pass,showframe]{geometry}

\newlength{\numberheight}
\setlength{\numberheight}{15mm}
\makechapterstyle{myveelo}{%
    \setlength{\afterchapskip}{30pt}
    \renewcommand*{\chapterheadstart}{\vspace*{10pt}}
    \renewcommand*{\afterchapternum}{\par\nobreak\vskip 10pt}
    \renewcommand*{\chapnumfont}{\normalfont\Huge\bfseries}
    \renewcommand*{\chaptitlefont}{\normalfont\Huge\bfseries}
    \renewcommand*{\printchaptername}{}
    \renewcommand*{\chapternamenum}{}
    \renewcommand*{\printchapternum}{%
        \makebox[0pt][l]{%
            \resizebox{!}{\numberheight}{\chapnumfont\fixspace{\thechapter}}%
        }%
        \makebox[0pt][l]{%
            \hspace{\textwidth}%
            \hspace{1.5cm}%
            \rule{2cm}{\numberheight}%
        }
    }%
    \makeoddfoot{plain}{}{}{\thepage}
}

\ExplSyntaxOn
\NewDocumentCommand{\fixspace}{m}
 {
  \martin_fixspace:e { #1 }
 }
\cs_new_protected:Nn \martin_fixspace:n
 {
  \str_case_e:nn { \str_head:n { #1 } }
   {
    {0}{\kern-0.04em~}
    {1}{\kern-0.08em~}
    {2}{\kern-0.05em~}
    {3}{\kern-0.0425em~}
    {4}{\kern-0.03em~}
    {5}{\kern-0.05em~}
    {6}{\kern-0.045em~}
    {7}{\kern-0.06em~}
    {8}{\kern-0.045em~}
    {9}{\kern-0.045em~}
   }
   #1
 }
\cs_generate_variant:Nn \martin_fixspace:n { e }
\ExplSyntaxOff

\chapterstyle{myveelo}

\begin{document}
\chapter{Introduction}

\setlength{\fboxsep}{0pt}
\setlength{\fboxrule}{0.1pt}
\fbox{\chapnumfont\fixspace{0}}
\fbox{\chapnumfont\fixspace{1}}
\fbox{\chapnumfont\fixspace{2}}
\fbox{\chapnumfont\fixspace{3}}
\fbox{\chapnumfont\fixspace{4}}
\fbox{\chapnumfont\fixspace{5}}
\fbox{\chapnumfont\fixspace{6}}
\fbox{\chapnumfont\fixspace{7}}
\fbox{\chapnumfont\fixspace{8}}
\fbox{\chapnumfont\fixspace{9}}

\medskip

\noindent
\fbox{\chapnumfont 0}
\fbox{\chapnumfont 1}
\fbox{\chapnumfont 2}
\fbox{\chapnumfont 3}
\fbox{\chapnumfont 4}
\fbox{\chapnumfont 5}
\fbox{\chapnumfont 6}
\fbox{\chapnumfont 7}
\fbox{\chapnumfont 8}
\fbox{\chapnumfont 9}


\lipsum[1]
\end{document}

enter image description here

Related Question