From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/noconflict/README | 65 +++++++++++ macros/latex/contrib/noconflict/noconflict.sty | 154 +++++++++++++++++++++++++ 2 files changed, 219 insertions(+) create mode 100644 macros/latex/contrib/noconflict/README create mode 100644 macros/latex/contrib/noconflict/noconflict.sty (limited to 'macros/latex/contrib/noconflict') diff --git a/macros/latex/contrib/noconflict/README b/macros/latex/contrib/noconflict/README new file mode 100644 index 0000000000..9614d8721e --- /dev/null +++ b/macros/latex/contrib/noconflict/README @@ -0,0 +1,65 @@ + +Conflict Resolver +Resolves Macro Name Conflict among Packages +Copyright 2013 M. Zahid Hossain + +This package resolves macro name conflict among packages with concise +approaches and user-friendly syntaxes. + +This program may be distributed and/or modified under the conditions +of the LaTeX Project Public License, either version 1.2 of this +license or (at your option) any later version. + +A macro name can be defined by many packages. In LaTeX, macro name need +to be unique for a document and thus using the packages with same macro +name causes conflict among them. In order to avoid macro name conflict +this package defines several commands to save, restore and rename macros +defined by other packages. + +PACKAGE COMMANDS +================ + +\prefix{} +\save{} + {} +\save*{} +\restore{} +\restore* +\reinstate{} + {} +\rename{}{} + + +USAGE EXAMPLE +============= + +If package A, B and C define three macro names X, Y and Z. To avoid macro +name conflict: + +\usepackage{noconflict} +\usepackage{A} +\prefix{First} is optional +\save{X,Y,Z} + +\usepackage{B} +\save{Second}{X,Y,Z} +The above line can also be written as: \prefix{Second} and \save*{X,Y,Z} + +\usepackage{C} +\save{Third}{X,Y,Z} + +Now macro X, Y and Z of +Package A: \FirstX, \FirstY, \FirstZ +Package B: \SecondX, \SecondY, \SecondZ +Package C: \ThirdX, \ThirdY, \ThirdZ + +\restore{First} +Macros \FirstX, \FirstY and \FirstZ become \X, \Y and \Z +\restore{Second} +The above line can also be written as: \prefix{Second} and \restore* +The above line can also be written as: \reinstate{Second}{X,Y,Z} +Macros \SecondX, \SecondY and \SecondZ become \X, \Y and \Z +\restore{Third} +Macros \ThirdX, \ThirdY and \ThirdZ become \X, \Y and \Z +\rename{X}{CofX} +Macro \X becomes \CofX \ No newline at end of file diff --git a/macros/latex/contrib/noconflict/noconflict.sty b/macros/latex/contrib/noconflict/noconflict.sty new file mode 100644 index 0000000000..a99bbf97f7 --- /dev/null +++ b/macros/latex/contrib/noconflict/noconflict.sty @@ -0,0 +1,154 @@ +% Conflict Resolver +% Resolves Macro Name Conflict among Packages +% Copyright 2013 M. Zahid Hossain +% +% This package resolves macro name conflict among packages with concise +% approaches and user-friendly syntaxes. +% +% This program may be distributed and/or modified under the conditions +% of the LaTeX Project Public License, either version 1.2 of this +% license or (at your option) any later version. +% +% A macro name can be defined by many packages. In LaTeX, macro name need +% to be unique for a document and thus using the packages with same macro +% name causes conflict among them. In order to avoid macro name conflict +% this package defines several commands to save, restore and rename macros +% defined by other packages. +% +% PACKAGE COMMANDS +% ================ +% +% \prefix{} +% \save{} +% {} +% \save*{} +% \restore{} +% \restore* +% \reinstate{} +% {} +% \rename{}{} +% +% USAGE EXAMPLE +% ============= +% +% If package A, B and C define three macro names X, Y and Z. To avoid macro +% name conflict: +% +% \usepackage{noconflict} +% \usepackage{A} +% \prefix{First} is optional +% \save{X,Y,Z} +% +% \usepackage{B} +% \save{Second}{X,Y,Z} +% The above line can also be written as: \prefix{Second} and \save*{X,Y,Z} +% +% \usepackage{C} +% \save{Third}{X,Y,Z} +% +% Now macro X, Y and Z of +% Package A: \FirstX, \FirstY, \FirstZ +% Package B: \SecondX, \SecondY, \SecondZ +% Package C: \ThirdX, \ThirdY, \ThirdZ +% +% \restore{First} +% Macros \FirstX, \FirstY and \FirstZ become \X, \Y and \Z +% \restore{Second} +% The above line can also be written as: \prefix{Second} and \restore* +% The above line can also be written as: \reinstate{Second}{X,Y,Z} +% Macros \SecondX, \SecondY and \SecondZ become \X, \Y and \Z +% \restore{Third} +% Macros \ThirdX, \ThirdY and \ThirdZ become \X, \Y and \Z +% \rename{X}{CofX} +% Macro \X becomes \CofX +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{noconflict}[2013/04/23 +v1.0 Resolves macro name conflict] + + +\def\@foreach#1#2{% + \@test@foreach{#1}#2,\@end@token% +} + +\def\@swallow#1{} + +\def\@test@foreach#1{% + \@ifnextchar\@end@token% + {\@swallow}% + {\@body@foreach{#1}}% +} + +\def\@body@foreach#1#2,#3\@end@token{% + #1{#2}% + \@test@foreach{#1}#3\@end@token% +} + +\newcommand{\@save}[1]{% + \expandafter\global\expandafter\let\csname \@prefix#1\expandafter\endcsname% + \csname #1\endcsname + \expandafter\let\csname #1\endcsname\relax +} + +\newcommand{\@restore}[1]{% + \expandafter\global\expandafter\let\csname#1\expandafter\endcsname% + \csname \@prefix#1\endcsname% +} + +\newcommand{\@prefix}{First} + +\newcommand{\prefix}[1]{% + \gdef\@prefix{#1}% +} + +\newcommand{\save}{\@ifstar + \save@star% + \save@nostar% +} + +\newcommand{\save@star}[1]{ + \expandafter\gdef\csname list@conflict\@prefix\endcsname{#1}% + \@foreach{\@save}{#1}% +} + +\newcommand{\save@nostar}[2]{ + \prefix{#1} + \expandafter\gdef\csname list@conflict\@prefix\endcsname{#2}% + \@foreach{\@save}{#2}% +} + +\newcommand{\restore}{\@ifstar + \restore@star% + \restore@nostar% +} + +\newcommand{\restore@star}{ + \edef\expand@command{\csname list@conflict\@prefix\endcsname}% + \expandafter\@foreach\expandafter{\expandafter\@restore\expandafter}% + \expandafter{\expand@command}% +} + +\newcommand{\restore@nostar}[1]{ + \prefix{#1} + \edef\expand@command{\csname list@conflict\@prefix\endcsname}% + \expandafter\@foreach\expandafter{\expandafter\@restore\expandafter}% + \expandafter{\expand@command}% +} + +\newcommand{\reinstate}[2]{ + \prefix{#1} + \@foreach{\@restore}{#2}% +} + +\newcommand{\rename}[2]{ + \expandafter\global\expandafter\let\csname #2\expandafter\endcsname% + \csname #1\endcsname + \expandafter\let\csname #1\endcsname\relax +} + +\endinput + + -- cgit v1.2.3