summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/copyedit
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/copyedit
Initial commit
Diffstat (limited to 'macros/latex/contrib/copyedit')
-rw-r--r--macros/latex/contrib/copyedit/README50
-rw-r--r--macros/latex/contrib/copyedit/copyedit.dtx757
-rw-r--r--macros/latex/contrib/copyedit/copyedit.ins39
-rw-r--r--macros/latex/contrib/copyedit/copyedit.pdfbin0 -> 262380 bytes
-rw-r--r--macros/latex/contrib/copyedit/example/test-copy.pdfbin0 -> 46878 bytes
-rw-r--r--macros/latex/contrib/copyedit/example/test-copy.tex165
-rw-r--r--macros/latex/contrib/copyedit/manifest.txt16
7 files changed, 1027 insertions, 0 deletions
diff --git a/macros/latex/contrib/copyedit/README b/macros/latex/contrib/copyedit/README
new file mode 100644
index 0000000000..e1b6a4963f
--- /dev/null
+++ b/macros/latex/contrib/copyedit/README
@@ -0,0 +1,50 @@
+Readme for copyedit package (copyedit.sty)
+
+Copyedit implements copyediting support for LaTeX documents. Authors
+can enjoy the freedom of using, for example, words with US or UK or
+Canadian or Australian spelling in a mixed way, yet, they can choose
+any one of the usage form for their entire document irrespective of
+kinds of spelling they have adopted. In the same fashion, the users
+can have the benefit of following features available in the package:
+
+1. Localization --- British-American-Australian-Canadian
+
+2. Close-up, Hyphenation, and Spaced words
+
+3. Latin abbreviations
+
+4. Acronyms and Abbreviations
+
+5. Itemization, nonlocal lists and labels
+
+6. Parenthetical and serial commas
+
+7. Non-local tokenization in language through Abbreviations and
+ pronouns.
+
+
+Installation:
+
+Create a directory $TEXMF/tex/latex/copyedit and copy copyedit.sty to
+this directory. Update the file database of your TeX system.
+
+Documentation:
+
+Composite documentation and code is available in copyedit.dtx. Run
+TeX/LaTeX on copyedit.ins to extract copyedit.sty from copyedit.dtx.
+If you [pdf]LaTeX copyedit.dtx, you will get copyedit.pdf which is the
+human readable documentation.
+
+The example directory has source and output of an example document and
+the doc directory has an article written by authors on the subject.
+
+Licence:
+
+The package is released under LaTeX Project Public Licence.
+
+Authors:
+
+CV Radhakrishnan <cvr@cvr.cc>
+CV Rajagopal <cvr3@cvr.cc>
+SK Venkatesan <skvenkat@tnq.co.in>
+
diff --git a/macros/latex/contrib/copyedit/copyedit.dtx b/macros/latex/contrib/copyedit/copyedit.dtx
new file mode 100644
index 0000000000..b0741c8de4
--- /dev/null
+++ b/macros/latex/contrib/copyedit/copyedit.dtx
@@ -0,0 +1,757 @@
+% \iffalse meta-comment
+%
+%%
+%% This is file 'copyedit.dtx'
+%% ...........................
+%%
+%% (c) 2014,2015,
+%% CV Radhakrishnan <cvr@cvr.cc>, JWRA 34, Jagathy,
+%% Trivandrum 695014, India
+%% CV Rajagopal <cvr3@cvr.cc>, SRA 34C, Elipode,
+%% Vattiyoorkavu, Trivandrum 695013, India
+%% SK Venkatesan <skvenkat@tnq.co.in>, TNQ Books and Journals
+%% Pvt Ltd, Kottivakkam, Chennai 600041, India
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% The list of all files belonging to the 'copyedit' is
+%% given in the file `manifest.txt'.
+%%
+%
+%<*driver|package>
+% The version of expl3 required is tested as early as possible, as
+% some really old versions do not define \ProvidesExplPackage.
+\RequirePackage{expl3}[2014/07/20]
+%<package>\@ifpackagelater{expl3}{2014/07/20}
+%<package> {}
+%<package> {%
+%<package> \PackageError{copyedit}{Support package l3kernel too old}
+%<package> {%
+%<package> Please install an up to date version of l3kernel\MessageBreak
+%<package> using your TeX package manager or from CTAN.\MessageBreak
+%<package> \MessageBreak
+%<package> Loading copyedit will abort!%
+%<package> }%
+%<package> \endinput
+%<package> }
+\RequirePackage{acronym,l3str,l3keys2e,xparse}
+%%%% $Id: copyedit.dtx,v 1.6 2015/07/21 07:27:11 cvr Exp cvr $
+\GetIdInfo$Id: copyedit.dtx,v 1.6 2015-07-21 07:27:11 cvr Exp cvr $
+ {TeX and Copyediting (CVR)}
+%</driver|package>
+%<*driver>
+\documentclass[full]{l3doc}
+\usepackage{xcolor}
+\colorlet{vcolor}{magenta}
+\usepackage{array}
+\usepackage[lat=0]{copyedit}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{ \TeX{} and Copyediting }
+%
+% \author{ CV Radhakrishnan\thanks
+% { \textsc{jwra} 34, Jagathy, Trivandrum 695014, India, E-mail:
+% \href{mailto:cvr@cvr.cc}{\ttfamily<cvr@cvr.cc>} },
+% ~CV Rajagopal\thanks{\textsc{sra} 34c, Elipode, Trivandrum 695013,
+% India, E-mail: \href{mailto:cvr3@cvr.cc}
+% {\ttfamily<cvr3@cvr.cc>}}
+% ~and SK Venkatesan\thanks{\textsc{tnq b}ooks and Journals, Kottivakkam,
+% Chennai 600041, India, E-mail: \href{mailto:skvenkat@tnq.co.in}
+% {\ttfamily<skvenkat@tnq.co.in>}}
+% }
+%
+% \date{Released \ExplFileDate}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \pkg{Copyedit} implements copyediting support for \LaTeX{}
+% documents. Authors can enjoy the freedom of using, for example,
+% using words with \textsc{us} or \textsc{uk} or Canadian or Australian
+% spelling in a mixed way, yet, they can choose any one of the usage
+% form for their entire document irrespective of kinds of spelling
+% they have adopted. In the same fashion, the users can have the
+% benefit of following features available in the package:
+%
+% \begin{enumerate}
+% \item Localization --- British-American-Australian-Canadian
+% \item Close-up, Hyphenation, and Spaced words
+% \item Latin abbreviations
+% \item Acronyms and Abbreviations
+% \item Itemization, nonlocal lists and labels
+% \item Parenthetical and serial commas
+% \item Non-local tokenization in language through Abbreviations and
+% pronouns.
+% \end{enumerate}
+%
+% \section{Package Loading}
+%
+% The \pkg{copyedit} package can be loaded with the command:
+% \begin{verbatim}
+% \usepackage[<options>]{copyedit}
+% \end{verbatim}
+%
+% \begin{function}{\ceset,\cesetup}
+% \begin{syntax}
+% \cs{ceset} \Arg{options}\\
+% \cs{cesetup} \Arg{options}
+% \end{syntax}
+% There is a user-friendly function, namely, \cs{ceset} or
+% \cs{cesetup} available which can be used anywhere in the document
+% to change the options or behaviour of the package from that point
+% onwards. The usage of the function is:
+%
+% The \meta{options} shall be provided as a comma separated list.
+% \end{function}
+%
+% \section{Using the Features}
+%
+% \subsection{Localization --- British, American, Australian and Canadian}
+%
+% \begin{function}{\definevariant}
+% The package provides a database of commonly used English language
+% words in all the above four variant spelling. One can add new
+% entries to the list with the command:
+% \begin{syntax}
+% \cs{definevariant}\Arg{uk}\Arg{us}\Arg{au}\Arg{ca}
+% \end{syntax}
+% The variants, \meta{uk}, \meta{us}, \meta{au} and \meta{ca} denote
+% British, American, Australian and Canadian spelling respectively.
+% \end{function}
+%
+% \begin{function}{\vara}
+% \begin{syntax}
+% \cs{vara} \Arg{variant}
+% \end{syntax}
+% In the document, one can use the macro \cs{vara}\marg{variant}.
+% The user is free to use a combination of words of various spelling,
+% but output will totally be dependent on the option of locale chosen
+% for the document. For the sake of distinction and to prove our
+% point, let us assume that the word \meta{color} has the following
+% four different spelling in four different locale:
+% \end{function}
+% \begin{enumerate}[itemsep=0pt]
+% \item UK: colour
+% \item US: color
+% \item AU: COLOUR
+% \item CA: COLOR
+% \end{enumerate}
+% By using the four words in the following manner:
+% \begin{verbatim}
+% \vara{colour} \vara{color} \vara{COLOUR} \vara{COLOR}
+% \end{verbatim}
+% and by using various language option with different values for the
+% option \marg{lang}, we can switch across different languages for
+% all four words, no matter, whatever locate spelling one has adopted
+% for the word in the document instance.
+% \begin{enumerate}[itemsep=0pt]
+% \item |lang=uk| $\longrightarrow$ colour colour colour colour
+% \item |lang=us| $\longrightarrow$ color color color color
+% \item \dots
+% \end{enumerate}
+%
+% \begin{function}{starred \vara}
+% If for any reason, the user chooses to retain the word as it is then
+% it is possible by using the starred version of the macro:
+% \begin{syntax}
+% \cs{vara*}\Arg{word}
+% \end{syntax}
+% \end{function}
+%
+% \subsection{Close-up, Hyphenation, Spaced Words}
+%
+% \begin{function}{\hyp,\closeup,\sword}
+% \begin{syntax}
+% \cs{hyp}\Arg{word}\Arg{word}\\
+% \cs{closeup}\Arg{word}\Arg{word}\\
+% \cs{sword}\Arg{word}\Arg{word}
+% \end{syntax}
+% \end{function}
+% \noindent There are three commands that make the above possible:
+% \begin{enumerate}[itemsep=0pt]
+% \item |\hyp{anti}{body}| $\longrightarrow$ anti-body (hyphenate)
+% \item |\closeup{anti}{body}| $\longrightarrow$ antibody (close up)
+% \item |\sword{Civil}{War}| $\longrightarrow$ Civil War (space our)
+% \end{enumerate}
+%
+% \subsection{Latin Abbreviation}
+%
+% \begin{function}{\definelat,\lat}
+% \begin{syntax}
+% \cs{definelat} \Arg{abbr} \Arg{abbr without dots} \Arg{English form}\\
+% \cs{lat} \Arg{abbr}
+% \end{syntax}
+% \end{function}
+% \noindent Latin abbreviations can be used in different ways. The
+% option |lat=0| will keep the Latin abbreviation as such in form in
+% italic shape. |abbr=italic| will make the abbreviation italicized
+% (which is also default). |abbr=rm| will make it upshape. |lat=1|
+% will take away the periods in the abbreviated Latin forms while
+% |lat=2| will replace the abbreviation with its English language
+% equivalents.
+%
+% The package comes with a default list of abbreviations. Users shall
+% use the command \cs{lat}\Arg{abbr} to invoke the desired format of
+% abbeviation in the document instance.
+%
+%
+% \subsection{Acronyms}
+%
+% \begin{function}{\newacro,\ac}
+% \begin{syntax}
+% \cs{newacro} \Arg{short form} \Arg{long form}\\
+% \cs{ac} \Arg{short form}
+% \end{syntax}
+% \end{function}
+% \noindent The highly aclaimed package, namely, \pkg{acronym} has
+% been made use of to achieve the extensive features available
+% therein. Kindly refer to its documentation for getting an
+% understanding of the usage.
+%
+% \subsection{Itemization and Non-local Lists}
+%
+% A list environment, namely, |eitem| has been defined which can be
+% used for a variety of purposes as enlisted below by changing its
+% options.
+%
+% \begin{flushleft}
+% \begin{tabular}{@{}ll}
+% \bfseries Option & \bfseries Rendering\\[3pt]
+% |eitem=0| & normal list: Firstly, Secondly, Thirdly, \dots\\
+% |eitem=1| & normal list: First, Second, Third, \dots\\
+% |eitem=2| & enumerated list: 1, 2, 3, \dots\\
+% |eitem=3| & itemized bulletted list\\
+% |eitem=4| & para list: Firstly, secondly, thirdly, \dots\\
+% |eitem=5| & para list: First, second, third, \dots\\
+% \end{tabular}
+% \end{flushleft}
+%
+% In the para list forms, each item will be separated by semicolon
+% (|;|) and the penultimate item will be connected to the last one by
+% the `|and|' automatically.
+%
+% \begin{function}{\elist}
+% \begin{syntax}
+% \cs{elist} \Arg{comma separated list}
+% \end{syntax}
+% \end{function}
+% \noindent
+% There is also a convenient command, ``|elist|'' that helps to format
+% a comma separated list in a proper way with proper spacing. For
+% example,
+% \begin{verbatim}
+% \elist{warblers,tits,wrens,hummingbirds}
+% \elist{warblers , tits, wrens ,hummingbirds}
+% \end{verbatim}
+% will be formatted in the proper way with right spacing and correct
+% punctuation:
+% \begin{quote}\color{vcolor}
+% warblers, tits, wrens and hummingbirds
+% \end{quote}
+%
+% \subsection{Parenthetical and Serial Comma}
+%
+% \begin{function}{\pc}
+% \begin{syntax}
+% \cs{pc} \Arg{text to be included}
+% \end{syntax}
+% \end{function}
+% \noindent This is accomplished with the command \cs{pc} and the text
+% to be distiguished shall be its argument. Different values for
+% option with the same name, |pc|, provide different functionality as
+% detailed below:
+%
+% \begin{flushleft}
+% \begin{tabular}{@{}ll}
+% \bfseries Option & \bfseries Rendering\\[3pt]
+% |pc=0| & argument is separated by parenthetical commas\\
+% |pc=1| & separated by parenthesis\\
+% |pc=2| & separated by emdashes\\
+% |pc=3| & formatted as a footnote \\
+% |pc=4| & formatted as a sidenote (marginpar)
+% \end{tabular}
+% \end{flushleft}
+%
+% \subsection{Non-local Tokenization}
+%
+% \begin{function}{\definetoken,\tkn}
+% \begin{syntax}
+% \cs{definetoken} \Arg{label} \Arg{full tokens} \Arg{less tokens}
+% \Arg{least tokens} \\
+% \cs{tkn} \Arg{label}
+% \end{syntax}
+% \end{function}
+% \noindent A sequence of minimization operation can be brought out by
+% first defining the tokens to be minimized and then using the same
+% consecutively will typeset the tokens in differently and minimized
+% manner each time it is called. We define a token as:
+% \begin{verbatim}
+% \definetoken{mango}{His Holyness, the Prince of Mangoistan}
+% {The Prince of Mangoistan}{He}
+% \end{verbatim}
+% will have different output as given below:
+%
+% \begin{flushleft}
+% \begin{tabular}{@{}ll}
+% \bfseries Command & \bfseries Rendering\\[3pt]
+% First instance: \cs{tkn}|{mango}| & His Holyness, the Prince of Mangoistan\\
+% Second: \cs{tkn}|{mango}|& The Prince of Mangoistan\\
+% Third: \cs{tkn}|{mango}|& He \\
+% Fourth: \cs{tkn}|{mango}|& He
+% \end{tabular}
+% \end{flushleft}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{copyedit} implementation}
+%
+% \begin{macrocode}
+%<*initex|package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=cedt>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ProvidesExplPackage
+ {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
+% \end{macrocode}
+%
+%\begin{macro}{\@@_load_check:n}
+% There are also a number of packages that are incompatible with
+% \pkg{copyedit}. These are all checked for next. Some of the
+% incompatible packages will not raise an error if loaded after
+% \pkg{copyedit}. So a test is made at the beginning of the
+% document as well. The message for this may be needed immediately, so
+% it is created here not with the other messages.
+% \begin{macrocode}
+\msg_new:nnnn { copyedit } { incompatible-package }
+ { Package~'#1'~incompatible. }
+ { The~#1~package~and~copyedit~are~incompatible. }
+\cs_new_protected:Npn \@@_load_check:n #1
+ {
+ \group_begin:
+ \@ifpackageloaded {#1}
+ { \msg_error:nnx { copyedit } { incompatible-package } {#1} }
+ { }
+ \group_end:
+ }
+\clist_map_function:nN
+ { Array , MyPackage }
+ \@@_load_check:n
+\AtBeginDocument {
+ \clist_map_function:nN { Array , MyPackage }
+ \@@_load_check:n
+ }
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macro}{\wrAux}
+% \begin{macrocode}
+\NewDocumentCommand \wrAux { m }
+ { \iow_now:Nx \@auxout { #1 } }
+% \end{macrocode}
+% A simple scratch macro to write out stuff to the auxiliary file.
+% There should be some elegant way or macro for the job.
+%
+% \end{macro}
+%
+% \begin{macro}{\l@@_lat_int,\l@@_pc_int,\l@@_lang_int,\l@@_eitem_int}
+% Needed counters and functions to use the counters are defined in advance.
+% \begin{macrocode}
+\int_new:N \l@@_lat_int
+\NewDocumentCommand \setlat { m }
+ { \int_set:Nn \l@@_lat_int { #1 } }
+
+\int_new:N \l@@_pc_int
+\NewDocumentCommand \setpc { m }
+ { \int_set:Nn \l@@_pc_int { #1 } }
+
+\int_new:N \l@@_lang_int
+\NewDocumentCommand \setlang { m }
+ { \int_set:Nn \l@@_lang_int { #1 } }
+
+\int_new:N \l@@_eitem_int
+\NewDocumentCommand \seteitem { m }
+ { \int_set:Nn \l@@_eitem_int { #1 } }
+\int_new:N \l@@_abbr_int
+
+\NewDocumentCommand \setabbr { m }
+ {
+ \str_if_eq:nnTF { #1 } { italic }
+ { \int_set:Nn \l@@_abbr_int { 0 } }
+ { \int_set:Nn \l@@_abbr_int { 1 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_lang_check:n}
+%
+% Define a function to check language code
+% and set the language numeric counter.
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_lang_check:n #1
+ {
+ \str_if_eq:nnT { #1 } { uk } { \setlang { 0 } }
+ \str_if_eq:nnT { #1 } { us } { \setlang { 1 } }
+ \str_if_eq:nnT { #1 } { ca } { \setlang { 2 } }
+ \str_if_eq:nnT { #1 } { au } { \setlang { 3 } }
+ }
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{}
+%
+% Define key-values as per expl3 syntax:
+% \begin{macrocode}
+\keys_define:nn { copyedit }
+ {
+ lang .code:n = \@@_lang_check:n { #1 } ,
+ lat .code:n = \setlat { #1 } ,
+ abbr .code:n = \setabbr{ #1 } ,
+ pc .code:n = \setpc { #1 } ,
+ draft .bool_set:N = \l@@_draft_bool ,
+ last .bool_set:N = \l@@_last_bool ,
+ eitem .code:n = \seteitem { #1 } ,
+ key-unknown .code:n =
+ {
+ \msg_error:nnx { copyedit } { unknown-option }
+ { \exp_not:V \l_keys_key_tl }
+ }
+ }
+% \end{macrocode}
+%
+% Set key-values and process key-value options.
+%
+% \begin{macrocode}
+\keys_set:nn { copyedit }
+ {
+ lang = { uk } ,
+ lat = { 0 } ,
+ abbr = { italic } ,
+ pc = { 0 } ,
+ draft = { false } ,
+ last = { false } ,
+ eitem = { 0 } ,
+ }
+
+\ProcessKeysOptions { copyedit }
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\ceset,\cesetup}
+%
+% A macro, \cs{ceset} has been defined to invoke any option at any
+% point in the document instance. A variant, \cs{cesetup}, has also
+% been defined.
+%
+% \begin{macrocode}
+\NewDocumentCommand \ceset { m }
+ {
+ \keys_set:nn { copyedit } { #1 }
+ \@@_lang_check:n { \l@@_lang_tl }
+ }
+\cs_set_eq:NN \cesetup \ceset
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\switchvariant,\definevariant,\vara}
+% \cs{swtchvariant} is an internal function that will help to switch
+% between different locale as per the language option chosen.
+% \cs{definevariant} is the one for defining different locale and
+% \cs{vara} is the user level command for using in document
+% instance.
+%
+% \begin{macrocode}
+\NewDocumentCommand \switchvariant { m m m m }
+ {
+ \int_case:nn { \l@@_lang_int }
+ {
+ { 0 } { #1 }
+ { 1 } { #2 }
+ { 2 } { #3 }
+ { 3 } { #4 }
+ }
+ }
+
+\NewDocumentCommand \definevariant { m m m m }
+ {
+ \tl_set:cn { g_vara_#1_tl }
+ { \switchvariant { #1 } { #2 } { #3 } { #4 } }
+ \tl_set:cn { g_vara_#2_tl }
+ { \switchvariant { #1 } { #2 } { #3 } { #4 } }
+ \tl_set:cn { g_vara_#3_tl }
+ { \switchvariant { #1 } { #2 } { #3 } { #4 } }
+ \tl_set:cn { g_vara_#4_tl }
+ { \switchvariant { #1 } { #2 } { #3 } { #4 } }
+ }
+
+\DeclareDocumentCommand \vara { s m }
+ {
+ \IfBooleanTF {#1}
+ { #2 }
+ { \normalvara {#2} }
+ }
+
+\NewDocumentCommand \normalvara { m }
+ {
+ \use:c { g_vara_#1_tl }
+ }
+% \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\hyp,\closeup,sword}
+%
+% \cs{hyp}, \cs{closeup} and \cs{sword} are three simple macros to
+% hyphenate, close up and separate two words respectively.
+% \begin{macrocode}
+\NewDocumentCommand \hyp { m m } { #1-#2 }
+\NewDocumentCommand \closeup { m m } { #1#2 }
+\NewDocumentCommand \sword { m m } { #1~#2 }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%\begin{macro}{\definelat,\lat}
+%
+% Latin abbreviation and its variant forms can be brought in by these
+% macros.
+% \begin{macrocode}
+\NewDocumentCommand \definelat { m m m }
+ {
+ \tl_set:cn { g_@@_lat_#1_tl }
+ {
+ \group_begin:
+ \int_case:nn { \l@@_abbr_int}
+ {
+ { 0 } { \itshape }
+ { 1 } { \upshape }
+ }
+ \int_case:nn { \l@@_lat_int }
+ {
+ { 0 } { #1 }
+ { 1 } { #2 }
+ { 2 } { #3 }
+ }
+ \group_end:
+ }
+ }
+
+\NewDocumentCommand \lat { m } { \use:c { g_@@_lat_#1_tl } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pc,\elist}
+%
+% Parenthetical comma (pc) and its variants are chosen with this macro
+% in combination with different options.
+% \begin{macrocode}
+\NewDocumentCommand \pc { m }
+ {
+ \int_case:nn { \l@@_pc_int }
+ {
+ { 0 } { \unskip,~#1,~ }
+ { 1 } { (#1) }
+ { 2 } { ---~#1~--- }
+ { 3 } { \unskip\footnote{#1} }
+ { 4 } { \marginpar{ \footnotesize\raggedright#1} }
+ }
+ }
+\clist_new:N \l@@_clist
+\NewDocumentCommand \elist { m }
+ {
+ \clist_set:Nn \l@@_clist { #1 }
+ \clist_use:Nnnn \l@@_clist { ~and~ } { ,~ } { ~and~ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\definetoken,\tkn,\Token}
+%
+% Non-local tokenization
+%
+% \begin{macrocode}
+\NewDocumentCommand \definetoken { m m m m }
+ {
+ \tl_gset:cn { #1num } { 0 }
+ \tl_gset:cn { g_toks_#1_0_tl } { #2 \tl_gset:cn { #1num } { 1 } }
+ \tl_gset:cn { g_toks_#1_1_tl } { #3 \tl_gset:cn { #1num } { 2 } }
+ \tl_gset:cn { g_toks_#1_2_tl } { #4 \tl_gset:cn { #1num } { 2 } }
+ }
+\NewDocumentCommand \tkn { m }
+ { \use:c { g_toks_#1_\use:c{#1num}_tl } }
+\cs_set_eq:NN \Token \tkn
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{environment}{eitem}
+% \env{eitem} is defined to switch between non-local list of
+% different types. We make use of the package \pkg{enumitem} for
+% this purpose.
+%
+% \begin{macrocode}
+\RequirePackage{enumitem}
+\chardef\thre@=3
+\newenvironment{enumerate*}[1][]%
+ {\@nameuse{enit@enumerate*}\enitdp@enumerate{enum}\thre@{#1}}
+ {\@nameuse{enit@endenumerate*}}
+% \end{macrocode}
+%
+% A few macros like, \cs{lastlabel}, \cs{mysep}, \cs{myseplast},
+% \cs{elistcnt}, \cs{LastItem} are defined to make the job easier.
+%
+% \begin{macrocode}
+\int_new:N \l@@_elistcnt_int
+\NewDocumentCommand \lastlabel { } { \tex_xdef:D\@itemlabel{Lastly}}
+\NewDocumentCommand \mysep { } { ;\hskip .5em plus .1em minus .1em }
+\NewDocumentCommand \myseplast { } {\space and \space }
+\NewDocumentCommand \elistcnt { } { \int_use:N \l@@_elistcnt_int }
+\NewDocumentCommand \LastItem { m m }
+ { \tl_gset:cn { l@@_tmpa_#1_tl } { #2 } }
+% \end{macrocode}
+%
+% \begin{macro}{\checklast}
+% \cs{checklast} is the macro that finds the last item number and
+% substitutes with |Last| or |Lastly| depending upon the option
+% chosen.
+%
+% \begin{macrocode}
+\NewDocumentCommand \checklast { m }
+ {
+ \tl_if_exist:cTF { l@@_tmpa_ \elistcnt _tl }
+ { \int_set:Nn \l_tmpa_int { \use:c{ l@@_tmpa_\elistcnt _tl }} }
+ { \int_set:Nn \l_tmpa_int { 0 } }
+ \int_set:Nn \l_tmpb_int { \the\c@enumi }
+ \int_compare:nNnTF { \l_tmpa_int } = { \l_tmpb_int }
+ {
+ \bool_if:NTF \l@@_last_bool
+ {
+ \int_case:nn { \l@@_eitem_int }
+ {
+ { 0 } { Lastly, }
+ { 1 } { Last, }
+ { 4 } { lastly, }
+ { 5 } { last, }
+ }
+ }
+ { #1 }
+ }
+ { #1 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Smallish set up changes are made to the \pkg{enumitem} to suit the
+% requirements.
+%
+% \begin{macro}{\ctext,\@ctext,\ltext,\@ltext,\paratext,\@paractext,\paraltext,\@paraltext}
+%
+% These macros act as variables to hold textual values for each item number.
+%
+% \begin{macrocode}
+\makeatletter
+\def\ctext#1{\expandafter\@ctext\csname c@#1\endcsname}
+\def\@ctext#1{\ifcase#1\or \checklast{First,}\or
+ \checklast{Second,}\or \checklast{Third,}\or
+ \checklast{Fourth,}\or \checklast{Fifth,}\or
+ \checklast{Sixth,}\or \checklast{Seventh,}\or
+ \checklast{Eigth,}\or \checklast{Nineth,}\or
+ \checklast{Tenth,}\fi}
+\AddEnumerateCounter{\ctext}{\@ctext}{Second,}
+
+\def\ltext#1{\expandafter\@ltext\csname c@#1\endcsname}
+\def\@ltext#1{\ifcase#1\or \checklast{Firstly,}\or
+ \checklast{Secondly,}\or \checklast{Thirdly,}\or
+ \checklast{Fourthly,}\or \checklast{Fifthly,}\or
+ \checklast{Sixthly,}\or \checklast{Seventhly,}\or
+ \checklast{Eigthly,}\or \checklast{Ninethly,}\or
+ \checklast{Tenthly,}\fi}
+\AddEnumerateCounter{\ltext}{\@ltext}{Secondly,}
+
+\def\paractext#1{\expandafter\@paractext\csname c@#1\endcsname}
+\def\@paractext#1{\ifcase#1\or \checklast{First,}\or
+ \checklast{second,}\or \checklast{third,}\or
+ \checklast{fourth,}\or \checklast{fifth,}\or
+ \checklast{sixth,}\or \checklast{seventh,}\or
+ \checklast{eigth,}\or \checklast{nineth,}\or
+ \checklast{tenth,}\fi}
+\AddEnumerateCounter{\paractext}{\@paractext}{second,}
+
+\def\paraltext#1{\expandafter\@paraltext\csname c@#1\endcsname}
+\def\@paraltext#1{\ifcase#1\or \checklast{Firstly,}\or
+ \checklast{secondly,}\or \checklast{thirdly,}\or
+ \checklast{fourthly,}\or \checklast{fifthly,}\or
+ \checklast{sixthly,}\or \checklast{seventhly,}\or
+ \checklast{eigthly,}\or \checklast{ninethly,}\or
+ \checklast{tenthly,}\fi}
+\AddEnumerateCounter{\paraltext}{\@paraltext}{secondly,}
+% \end{macrocode}
+% \end{macro}
+%
+% At last \env{eitem} has been defined.
+%
+% \begin{macrocode}
+\NewDocumentEnvironment { eitem } { }
+ {
+ \int_gincr:N \l@@_elistcnt_int
+ \int_case:nn { \l@@_eitem_int }
+ {
+ { 0 } { \begin{enumerate}
+ [label=\ltext*,align=left,itemjoin=\mysep,itemjoin*=\myseplast] }
+ { 1 } { \begin{enumerate}
+ [label=\ctext*,align=left,itemjoin=\mysep,itemjoin*=\myseplast] }
+ { 2 } { \begin{enumerate}[label=\arabic*.] }
+ { 3 } { \begin{enumerate}[label=\textbullet] }
+ { 4 } { \begin{enumerate*}
+ [label=\paraltext*,itemjoin=\mysep,itemjoin*=\myseplast] }
+ { 5 } { \begin{enumerate*}
+ [label=\paractext*,itemjoin=\mysep,itemjoin*=\myseplast] }
+ }
+ }
+ {
+ \wrAux { \token_to_str:N \LastItem
+ { \int_use:N \l@@_elistcnt_int } {\the\c@enumi} }
+ \int_case:nn { \l@@_eitem_int }
+ {
+ { 0 } { \end{enumerate} }
+ { 1 } { \end{enumerate} }
+ { 2 } { \end{enumerate} }
+ { 3 } { \end{enumerate} }
+ { 4 } { \end{enumerate*} }
+ { 5 } { \end{enumerate*} }
+ }
+ }
+%
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%%
+% \end{implementation}
+%
+% \PrintIndex
+%
+% \endinput
+
diff --git a/macros/latex/contrib/copyedit/copyedit.ins b/macros/latex/contrib/copyedit/copyedit.ins
new file mode 100644
index 0000000000..79b399b23e
--- /dev/null
+++ b/macros/latex/contrib/copyedit/copyedit.ins
@@ -0,0 +1,39 @@
+\iffalse meta-comment
+
+File copyedit.ins Copyright (C) 2014, 2015 CVRs and SKV. See copyedit.dtx
+full details of names and addresses.
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+\fi
+
+\let\jobname\relax
+\input l3docstrip.tex
+\askforoverwritefalse
+
+\preamble
+---------------------------------------------------------------
+The copyedit package --- Copyediting support in LaTeX documents
+Maintained by CV Radhakrishnan, CV Rajagopal and SK Venkatesan
+E-mail: <cvr@cvr.cc>, <cvr3@cvr.cc> and <skvenkat@tnq.co.in>
+Released under the LaTeX Prlject Public Licence v1.3c or later
+See http://www.latex-project.org/lppl.txt
+---------------------------------------------------------------
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+
+\keepsilent
+
+\generate{\file{copyedit.sty} {\from{copyedit.dtx} {package}}}
+
+
+\endbatchfile
+
diff --git a/macros/latex/contrib/copyedit/copyedit.pdf b/macros/latex/contrib/copyedit/copyedit.pdf
new file mode 100644
index 0000000000..5c497830c1
--- /dev/null
+++ b/macros/latex/contrib/copyedit/copyedit.pdf
Binary files differ
diff --git a/macros/latex/contrib/copyedit/example/test-copy.pdf b/macros/latex/contrib/copyedit/example/test-copy.pdf
new file mode 100644
index 0000000000..035d9bbd15
--- /dev/null
+++ b/macros/latex/contrib/copyedit/example/test-copy.pdf
Binary files differ
diff --git a/macros/latex/contrib/copyedit/example/test-copy.tex b/macros/latex/contrib/copyedit/example/test-copy.tex
new file mode 100644
index 0000000000..b791122fad
--- /dev/null
+++ b/macros/latex/contrib/copyedit/example/test-copy.tex
@@ -0,0 +1,165 @@
+\documentclass[a4paper]{article}
+
+\usepackage[lat=2,lang=ca,abbr=italic,last=true,eitem=4]{copyedit}
+
+%
+% all the options can be changed in the middle of the document or
+% anywhere in the document with the command:
+%
+% \cesetup{c<comma separated list of options>}
+%
+
+\usepackage[sc,osf]{mathpazo}
+\usepackage{lipsum}
+
+\begin{document}
+
+\parindent 0pt
+\parskip 12pt
+\advance\baselineskip by 3pt
+
+\newacro{H2O}[$\mathrm{H_2O}$]{Dihygrogen Monoxide}
+\newacro{WHO}[W.H.O.]{World Health Organization}
+
+\subsubsection*{Language Variants}
+
+\lipsum[1]
+
+\definevariant{colour}{color}{COLOR}{Color}
+
+\cesetup{lang=uk}
+
+\vara{colour}
+\vara{color}
+\vara{COLOR}
+\vara{Color}
+
+\cesetup{lang=us}
+
+\vara{colour}
+\vara{color}
+\vara{COLOR}
+\vara{Color}
+
+\cesetup{lang=ca}
+
+\vara{colour}
+\vara{color}
+\vara{COLOR}
+\vara{Color}
+
+\cesetup{lang=au}
+
+\vara{colour}
+\vara{color}
+\vara{COLOR}
+\vara{Color}
+
+\subsubsection*{Hyphenate, etc}
+
+\closeup{anti}{body} and for that matter \hyp{anti}{body}.
+\sword{Civil}{War}.
+
+\subsubsection*{Latin abbreviation}
+
+\definelat{e.g.}{eg}{for example}
+
+First option keeps the abbreviation as such:
+\cesetup{lat=0} \lat{e.g.}.
+
+The second option remove all dots:
+\cesetup{lat=1,abbr=rm} \lat{e.g.}.
+
+The third one switches to English equivalent:
+\cesetup{lat=2} \lat{e.g.}.
+
+\subsubsection*{Acronym}
+
+\ac{H2O}
+
+\ac{WHO}
+
+\lipsum[2]
+
+\ac{H2O}
+
+\ac{WHO}
+
+\medskip
+
+\subsubsection*{Parenthetical Comma}
+
+\cesetup{pc=0}
+The enthusiastic young ducks flying in front of the group
+\pc{led by the sugecious older ones at the back, make a lot of noise
+ and turbulence} which are used by older ones at the back to warm
+their heart and the wing.
+
+\cesetup{pc=1}
+The enthusiastic young ducks flying in front of the group
+\pc{led by the sugecious older ones at the back, make a lot of noise
+ and turbulence} which are used by older ones at the back to warm
+their heart and the wing.
+
+\cesetup{pc=2}
+The enthusiastic young ducks flying in front of the group
+\pc{led by the sugecious older ones at the back, make a lot of noise
+ and turbulence} which are used by older ones at the back to warm
+their heart and the wing.
+
+\cesetup{pc=3}
+The enthusiastic young ducks flying in front of the group
+\pc{led by the sugecious older ones at the back, make a lot of noise
+ and turbulence} which are used by older ones at the back to warm
+their heart and the wing.
+
+\cesetup{pc=4}
+The enthusiastic young ducks flying in front of the group
+\pc{led by the sugecious older ones at the back, make a lot of noise
+ and turbulence} which are used by older ones at the back to warm
+their heart and the wing.
+
+
+\elist{warblers,tits,wrens,hummingbirds}
+
+No problems even if the space is not cared for in the list:
+
+\elist{warblers , tits, wrens,hummingbirds }
+
+\definetoken{mango}{His Holyness, the Prince of Mangoistan}{The Prince of
+ Mangoistan}{He}
+
+Full: \Token{mango}
+
+Part: \Token{mango}
+
+Short: \Token{mango}
+
+Short: \Token{mango}
+
+\subsubsection*{Eitem}
+
+% \cesetup{eitem=0,last}
+% \cesetup{eitem=1,last}
+% \cesetup{eitem=2,last}
+% \cesetup{eitem=3,last}
+% \cesetup{eitem=4,last}
+ \cesetup{eitem=5,last}
+
+
+\begin{eitem}
+
+\item one
+\item two
+\item three
+\item four
+\item five
+\item six
+\item seven
+%\item eight
+%\item nine
+%\item ten
+
+\end{eitem}
+
+\end{document}
diff --git a/macros/latex/contrib/copyedit/manifest.txt b/macros/latex/contrib/copyedit/manifest.txt
new file mode 100644
index 0000000000..5bac16aa0b
--- /dev/null
+++ b/macros/latex/contrib/copyedit/manifest.txt
@@ -0,0 +1,16 @@
+Contents of 'copyedit' package
+------------------------------
+
+README Readme file
+
+copyedit.ins installer file
+copyedit.dtx documented source file
+
+copyedit.pdf pdf output of documented source
+
+example/test-copy.tex example LaTeX source file
+example/test-copy.pdf pdf output of example
+
+
+
+