franen” post=74621Titolo enigmatico, ma non ho trovato di meglio.
Uso il pacchetto songs per scrivere canzoni. Talvolta quando si scrivono gli accordi e si vuole indicare la nota di basso da suonare si usa una barra seguita dalla nota, spesso in corpo più piccolo. Ho un bel po’ di canzoni in cui questi accordi si prensentano nella forma `Sol/Do, Re/Fa` quindi non vorrei definire un nuovo comando per le note di basso. L’idea è di rendere la / un carattere attivo, così:`% !TEX encoding = UTF-8 Unicode
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[noindexes]{songs} %(songs 2.14 da http://songs.sourceforge.net/)\newcommand{\bassfont}{/\footnotesize}
\catcode`/=13
\def/{\bassfont}\begin{document}
\begin{songs}{}
\beginsong{Casa}
\beginverse
\[Re]Ciao a \[Do{/Mi&} Fa]tutti
\endverse
\endsong
\end{songs}
\end{document}` Tutto funziona benissimo, ma ovviamente la “/” ora è attiva in tutto il documento, e io vorrei che lo fosse solo all’interno degli accordi. Il problema è che non sono riuscito a trovare il comando giusto da ridefinire in songs.sty. Mi rendo conto che il pacchetto non sia dei più diffusi e che non è semplice da interpretare, ma se qualcuno volesse accettare la sfida… 🙂Fran
Proverei prima di tutto con questo:
`\begingroup\lccode`~=`/
\lowercase{\endgroup\def~}{/\footnotesize}
\makeatletter
\expandafter\def\expandafter\SB@loadactives\expandafter{\SB@loadactives\ifchorded\catcode`/=\active\fi}
\makeatother`
La definizione di [tt]\SB@loadactives[/tt] è data in modo assai bizzarro; la riporto
`\newcommand\SB@loadactives{}
{
\catcode`&\active
\catcode`#\active
\catcode`|\active
\catcode`^\active
\global\let&\flt
\global\let#\shrp
\global\let|\measurebar
\global\let^\SB@activehat
\gdef\SB@loadactives{%
\catcode`^\ifchorded\active\else9 \fi%
\catcode`|\ifmeasures\active\else9 \fi%
\def\[{\SB@bracket}%
}
}`
È del tutto ovvio che
`\def\SB@loadactives{%
\catcode`^\ifchorded\active\else9 \fi
\catcode`|\ifmeasures\active\else9 \fi
\def\[{\SB@bracket}%
}`
sarebbe del tutto equivalente. Il codice di prima evita di dover sapere come precisamente è definita la macro [tt]\SB@loadactives[/tt] e aggiunge l’attivazione di [tt]/[/tt] solo quando [tt]\ifchorded[/tt] è “vero”.
Ciao
Enrico