我正在建立一個音樂包,為了清楚起見,我希望使用短名稱的新命令...因此,例如我使用\bar
, \k
,\arg
但它們已經在中定義,LaTeX
是否有一些技巧,以便所有這些命令都可以至少在本地以我喜歡的方式使用?
換句話說,是否可以在我的包中定義一些特殊命令\mypackageON
,\mypackageOFF
這樣如果我使用上述開始結束命令封裝文本,則使用\bar
等不會出現問題?有更好的策略嗎?請原諒我問這個一般性問題...
答案1
您可以提供一個名為 的環境,myenv
它會重新定義\arg
、\bar
等\end{myenv}
。
一個簡單的工作範例:
\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}
\mypackageON
這是一個使用“開關”(命名為和\mypackageOFF
)而不是環境的版本。根據 Ulrike 在評論中提出的建議,程式碼首先保存 等的原始版本\arg
,\bar
並且新巨集被賦予「音樂」前綴。然後,\mypackageON
啟動巨集的音樂相關版本,並\mypackageOFF
啟動巨集的原始版本。 (\LetLtxMacro
使用而不是\let
,以防某些被重新定義的命令採用可選參數和/或被聲明為“健壯”。)
\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}