summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/noconflict
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/noconflict
Initial commit
Diffstat (limited to 'macros/latex/contrib/noconflict')
-rw-r--r--macros/latex/contrib/noconflict/README65
-rw-r--r--macros/latex/contrib/noconflict/noconflict.sty154
2 files changed, 219 insertions, 0 deletions
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 <noconflict.sty>
+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{<prefix added to the macro name>}
+\save{<prefix added to the macro name>}
+ {<comma separated list of macro name>}
+\save*{<comma separated list of macro name>}
+\restore{<prefix added to the macro name>}
+\restore*
+\reinstate{<prefix added to the macro name>}
+ {<comma separated partial list of macro name>}
+\rename{<old name>}{<new name>}
+
+
+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 <noconflict.sty>
+% 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{<prefix added to the macro name>}
+% \save{<prefix added to the macro name>}
+% {<comma separated list of macro name>}
+% \save*{<comma separated list of macro name>}
+% \restore{<prefix added to the macro name>}
+% \restore*
+% \reinstate{<prefix added to the macro name>}
+% {<comma separated partial list of macro name>}
+% \rename{<old name>}{<new name>}
+%
+% 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
+
+