From 38b404935da1517d414a99cb996804cb778fa887 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sat, 27 Apr 2013 22:20:47 +0000 Subject: noconflict (27apr13) git-svn-id: svn://tug.org/texlive/trunk@30140 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/noconflict/README | 65 +++++++++ .../texmf-dist/tex/latex/noconflict/noconflict.sty | 154 +++++++++++++++++++++ Master/tlpkg/bin/tlpkg-ctan-check | 2 +- Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 + Master/tlpkg/tlpsrc/noconflict.tlpsrc | 0 5 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 Master/texmf-dist/doc/latex/noconflict/README create mode 100644 Master/texmf-dist/tex/latex/noconflict/noconflict.sty create mode 100644 Master/tlpkg/tlpsrc/noconflict.tlpsrc diff --git a/Master/texmf-dist/doc/latex/noconflict/README b/Master/texmf-dist/doc/latex/noconflict/README new file mode 100644 index 00000000000..9614d8721e9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/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/Master/texmf-dist/tex/latex/noconflict/noconflict.sty b/Master/texmf-dist/tex/latex/noconflict/noconflict.sty new file mode 100644 index 00000000000..a99bbf97f77 --- /dev/null +++ b/Master/texmf-dist/tex/latex/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 + + diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 26d9d8f65f6..7e5662a9b8e 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -307,7 +307,7 @@ my @TLP_working = qw( newtx newunicodechar newvbtm newverbs nextpage nfssext-cfr niceframe nicefilelist nicetext nih nkarta nlctdoc - noitcrul nolbreaks + noconflict noitcrul nolbreaks nomencl nomentbl nonfloat nonumonpart nopageno nostarch notes notes2bib notoccite nowidow nrc ntgclass ntheorem ntheorem-vn nuc diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index c0ec18070fa..e16e18d4970 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -542,6 +542,7 @@ depend nicefilelist depend niceframe depend nicetext depend nlctdoc +depend noconflict depend noitcrul depend nolbreaks depend nomencl diff --git a/Master/tlpkg/tlpsrc/noconflict.tlpsrc b/Master/tlpkg/tlpsrc/noconflict.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d -- cgit v1.2.3