# Text style for marginpar

Is there a way to change the font, font size and so on for \marginpar with a standard LaTeX macro, i.e. without something such as \let\oldmarginpar\marginpar (cp. Problem with Customized Marginpar (in Combination With a ToMarginpar). The \marginnote package e.g. provides \marginfont.

MWE:

\documentclass{book}

\begin{document}
Text text text\marginpar{A short note.}
\end{document}

-

To print out a margin the contents will be save in a savebox. So you can manipulate the default implementation of latex.ltx which is as follows:

\long\def\@ympar#1{%
\@savemarbox\@marbox{#1}%
\global\setbox\@currbox\copy\@marbox
\@xympar}


The mandatory argument is the contents. So simple use:

\long\def\@ympar#1{%
\@savemarbox\@marbox{\tiny #1}%
\global\setbox\@currbox\copy\@marbox
\@xympar}


Based on the special symbol @ you have to use \makeatletter...\makeatother.

-

The easiest way is with xparse:

\usepackage{xparse}
\let\oldmarginpar\marginpar
\RenewDocumentCommand{\marginpar}{om}{%
\IfNoValueTF{#1}
{\oldmarginpar{\mymparsetup #2}}
{\oldmarginpar[\mymparsetup #1]{\mymparsetup #2}}}

\newcommand{\mymparsetup}{\itshape}


In the \mymparsetup command you can put all customizations you want. In this way we can keep the behavior with the optional argument to \marginpar.

The method with \let\oldcs\cs can often lead to unexpected results, when \cs has an optional argument or it's defined with \DeclareRobustCommand. However the kernel provided \marginpar is none of this kind; indeed

texdef -t latex marginpar


\marginpar:

so we see that it's a parameterless macro and, as it often happens with LaTeX, the management of arguments is done later by other macros called by (the expansion of) \marginpar. Thus, in this case, we can safely do as shown before.
@MarcoDaniel I don't see why: if one does the right redefinition, there's no problem. :) –  egreg Jun 2 '12 at 13:01
I thought that using \let has the side effect of losing the ability to have optional arguments. But your \oldmarginpar can still parse the leading []? –  Andy Jun 2 '12 at 13:08
@Andy: You can use the let operation for commands with optional argument. However a more robust way is to use \LetLtxMacro provided by the package letltxmacro. –  Marco Daniel Jun 2 '12 at 13:14
@Andy Actually \marginpar has no argument. I'll add something to my answer. –  egreg Jun 2 '12 at 13:16