Ich arbeite an der Erstellung eines Musikpakets und hätte gerne neue Befehle mit Kurznamen, der Übersichtlichkeit halber … Ich verwende also beispielsweise \bar
, \k
, \arg
aber sie sind bereits in definiert. LaTeX
Gibt es einen Trick, damit alle diese Befehle zumindest lokal so verwendet werden können, wie ich es möchte?
Mit anderen Worten: Ist es möglich, einige spezielle Befehle in meinem Paket zu definieren, sodass beispielsweise, \mypackageON
wenn \mypackageOFF
ich einen Text mit den oben genannten Start-End-Befehlen einschließe, keine Probleme bei der Verwendung \bar
usw. auftreten? Gibt es eine bessere Strategie? Entschuldigen Sie diese allgemeine Frage ...
Antwort1
Sie könnten beispielsweise eine Umgebung mit dem Namen bereitstellen, myenv
die , , usw. neu definiert. \arg
Auf \bar
diese Weise endet der Umfang der Neudefinitionen automatisch mit \end{myenv}
.
Ein einfaches funktionierendes Beispiel:
\documentclass{article}
\usepackage[T1]{fontenc} % Enable "\k" ("ogonek") macro
\newenvironment{myenv}{%
% Provide (re)definitions of \arg, \bar, etc
\def\arg{...}
\def\bar{...}
\def\k{...}}{}
\begin{document}
$\arg a$, $\bar{b}$, \k{c}
\begin{myenv}
\arg a, \bar{b}, \k{c}
\end{myenv}
$\arg a$, $\bar{b}$, \k{c}
\end{document}
Hier ist eine Version, die „Switches“ – benannt \mypackageON
und \mypackageOFF
– anstelle einer Umgebung verwendet. Gemäß dem Vorschlag von Ulrike in einem Kommentar speichert der Code zuerst die Originalversionen von \arg
usw. \bar
und die neuen Makros erhalten „Musik“-Präfixe. Dann \mypackageON
aktiviert die musikbezogenen Versionen der Makros und \mypackageOFF
aktiviert die Originalversionen der Makros. ( \LetLtxMacro
wird anstelle von verwendet \let
, nur für den Fall, dass einige der neu definierten Befehle optionale Argumente annehmen und/oder als „robust“ deklariert wurden.)
\documentclass{article}
\usepackage[T1]{fontenc} % Enable "\k" macro ("ogonek")
% Save the old versions of the macros
\usepackage{letltxmacro} % for "\LetLtxMacro" command
\LetLtxMacro\origarg\arg
\LetLtxMacro\origbar\bar
\LetLtxMacro\origk\k
% Define some new macros
\newcommand\musicarg[1]{#1} % "#1" just regurgitates the argumenet
\newcommand\musicbar[1]{#1}
\newcommand\musick[1]{#1}
\newcommand\mypackageON{% enable the music-related versions
\LetLtxMacro\arg\musicarg
\LetLtxMacro\bar\musicbar
\LetLtxMacro\k\musick}
\newcommand\mypackageOFF{% enable the original versions
\LetLtxMacro\arg\origarg
\LetLtxMacro\bar\origbar
\LetLtxMacro\k\origk}
\begin{document}
$\arg a$, $\bar{b}$, \k{c}
\mypackageON
\arg a, \bar{b}, \k{c}
\mypackageOFF
$\arg a$, $\bar{b}$, \k{c}
\end{document}