diff options
author | Karl Berry <karl@freefriends.org> | 2014-11-14 22:47:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-11-14 22:47:57 +0000 |
commit | 249e552ebd09e227a51ac95098b1fe42d1ab3cff (patch) | |
tree | 38a334f66e37f15d8fe22c9634f4bb2e3d3b292e /Master/texmf-dist/source/xelatex | |
parent | a609091c33fb354c7f50ff5d39124b03bae91fbd (diff) |
xespotcolor (14nov14)
git-svn-id: svn://tug.org/texlive/trunk@35585 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/xelatex')
-rw-r--r-- | Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.dtx | 279 | ||||
-rw-r--r-- | Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.ins | 54 |
2 files changed, 333 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.dtx b/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.dtx new file mode 100644 index 00000000000..847374f9785 --- /dev/null +++ b/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.dtx @@ -0,0 +1,279 @@ +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%% +%\iffalse +% +% (c) Copyright 2014 Apostolos Syropoulos +% This program can be redistributed and/or modified under the +% terms of the LaTeX Project Public License Distributed from +% http://www.latex-project.org/lppl.txt; either +% version 1.3c of the License, or any later version. +% +% This work has the LPPL maintenance status `maintained'. +% +% Please report errors or suggestions for improvement to +% +% Apostolos Syropoulos (asyropoulos@yahoo.com) +% +%\fi +% \CheckSum{98} +% \iffalse This is a Metacomment +% +%<xespotcolor, >\ProvidesFile{xesporcolor.sty} +% +%<xespotcolor, > [2014/11/12 v1.0 Package `xespotcolor.sty'] +% +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\GetFileInfo{xspotcolor.drv} +\usepackage{xltxtra} +\usepackage{fullpage} +\begin{document} +\setmainfont[Mapping=tex-text,Script=Greek]{Arno Pro} +\setmonofont{UM Typewriter} +\setsansfont[Mapping=tex-text]{GFS Neohellenic} + \DocInput{xespotcolor.dtx} +\end{document} +%</driver> +% \end{macrocode} +% \fi +%\MakeShortVerb{\|} +%\StopEventually{} +%\title{The \textsf{xespotcolor} package} +%\author{Apostolos Syropoulos\\ +% Xanthi, Greece\\ +% \texttt{asyropoulos@yahoo.com}} +% \date{2014/11/12} +%\maketitle +% \begin{abstract} +% A spot color is one that is printed with its own ink. Typically, printers use spot colors +% in the production of books or other printed material. The \textsf{spotcolor} package +% by Jens Elstner is a first attempt to introduce the use of spot colors with pdfLaTeX. +% The \textsf{xespotcolor} package is a reimplementation of this package so to be usable with +% \XeLaTeX. As such, it has the same user interface and the same capabilities. +%\end{abstract} +% +%\section{Introduction} +% +% Using spot colors with \XeLaTeX\ is very important since most printers use spot colors in the +% production of books and magazines. The \textsf{spotcolor} package makes it possible to use +% spot colors with pdf\LaTeX\ but it cannot be used with \XeLaTeX. In the following I first +% describe how to translate certain pdf\TeX\ code snippets into \XeTeX\ and then I present the +% code of the package. Thus one can view this text as a short tutorial on how to port pdf\TeX\ +% code to \XeTeX\ as well as a description of the functionality of the \textsf{xespotcolor} package. +% Since the package is a port of a pdf\TeX\ package, it has the same functionality as the original +% package. +% +% \section{Porting pdf\TeX\ code to \XeTeX} +% +% Translating pdf\TeX\ code, which adds PDF code to the output file, to \XeTeX\ is not a straightforward exercise +% since pdf\TeX\ provides primitive commands that directly access and modify the structure of the resulting PDF file. +% In the case of \XeTeX\ one has to use |\special| commands that pass code to the driver. In this particular case, +% I had to translate code snippets like the following one: +% \begin{center} +% |1. \newcount\theCNTa |\\ +% |2. \newcount\theCNTb |\\ +% |3. \def\obj{ 0 R}% |\\ +% |4. \pdfobj{Raw PDF code 1}% |\\ +% |5. \theCNTa=\the\pdflastobj% |\\ +% |6. \pdfobj{Raw PDF code \the\theCNTa \obj}% |\\ +% |7. \theCNTb=\the\pdflastobj% |\\ +% |8. \pdfrefobj\theCNTa% |\\ +% |9. \pdfrefobj\theCNTb% |\\ +% \end{center} +% Here pdf\TeX\ creates two PDF objects, where the second contains a reference to the first one. The two counters +% defined in lines 1 and 2 are used to reference these two objects. The macro on line 3 is used to create code +% that references an object. The commands on lines 5 and 7 assign the object reference numbers and these numbers are +% used by the |\pdfrefobj| primitive. After some experimentation and some… Googling, I have found out that the following +% \XeTeX\ code is a reasonable translation of the previous code snipper: +% \begin{center} +% |\newcount\CNT |\\ +% |\newtoks\TOK |\\ +% |\TOK={@TOK \the\CNT}% |\\ +% |\advance\CNT by1% |\\ +% |\edef\A{\the\TOK Raw PDF code 1}%|\\ +% |\edef\B{Raw PDF code \the\TOK}% |\\ +% |\special{pdf:obj \A}% |\\ +% |\special{pdf:obj \B}% |\\ +% \end{center} +% The two |\edef|initions are used to do the work done by |\pdfobj|. Note that here there I introduce only +% one unique object and the first two lines define a counter and a token variable. The token variable uses +% the counter to create a unique identifier, which is passed to the driver. This way the driver will +% create a number of different objects, if required to do so. The last two commands pass the raw PDF +% code and the unique identifier to the driver. +% +% The original package contains a definition identical to the following one: +% \begin{center} +% |\def\R#1{% |\\ +% | \edef\act{\noexpand\pdfpageresources={\the\pdfpageresources\space |\\ +% | /ColorSpace<<#1>>}} |\\ +% | \act} |\\ +% \end{center} +% The net effect of this command is to add a specific color space to the page resources of all subsequent pages. +% Unfortunately, when the following code is executed, it adds the particular color space to the current page only: +% \begin{center} +% |\def\R#1{% |\\ +% | \special{pdf:put @resources <</ColorSpace <<#1>>>>}}|\\ +% \end{center} +% In order to add the color space to all subsequent pages, I had to use the |\AddEverypageHook| command of +% package \textsf{everypage}. This command modifies the contents of the ship-out box by adding to it its argument. +% And this is done for every single page. Also, one should note how the page resources are augmented by the two +% systems. In the case of \XeTeX\ we have to create a PDF dictionary that is merged with the current page resources, +% while in the case of pdf\TeX\ one just ``appends'' what is supposed to be included in the page resources dictionary. +% Let me now proceed with the description of the source code of the package. +% +% \section{The Source Code and Package Usage} +% The first part of the code is the identification part. +% \begin{macrocode} +%<*xespotcolor> +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{xespotcolor} + [2014/11/12 v.1.0, Package for adding Spot Color support to XeLaTeX.] +% \end{macrocode} +% The package needs three packages in to operate properly: \textsf{graphics}, \textsf{color}, and \textsf{everypage}. +% The first two packages must be loaded with the \texttt{xetex} option, since auto-detection does not work in this case. +% \begin{macrocode} +\RequirePackage[xetex]{graphics} +\RequirePackage[xetex]{color} +\RequirePackage{everypage} +% \end{macrocode} +% The original package defines two ``boolean'' variables that are set when the package is loaded with the \texttt{hks} and +% the \texttt{pantone} options, respectively. When these variables are true, then the package pre-loads color values in the +% corresponding color space (i.e., ``hks'' and ``pantone''). These color values are stored in two separate source files. +% These files are part of the original package distribution. +% \begin{macrocode} +\newif\ifhks\hksfalse +\newif\ifpantone\pantonefalse +\DeclareOption{hks}{\hkstrue} +\DeclareOption{pantone}{\pantonetrue} +\ProcessOptions +% \end{macrocode} +% +% The |\NewSpotColorSpace| command should be used to define a new color space for spot colors. The new color space can be +% any imaginable word! This color space is the place where a new spot color will live. The \texttt{hks} and +% the \texttt{pantone} options create two color spaces where the corresponding colors live. +% \begin{macrocode} +\def\NewSpotColorSpace#1{% + \expandafter\newtoks\csname #1\endcsname% + \csname #1\endcsname{}% +} +% \end{macrocode} +% The |\AddSpotColor| macro should be used to introduce a new spot color. Thus it is one of the first commands on should play +% with when using this package. This command takes four parameters---the name of a new color +% space, which has been declared with |\NewSpotColorSpace|, the name of a new color, a name which will be used internally, and a +% CMYK representation of the new color. For example, here is a typical use of this macro: +% \begin{center} +%|\AddSpotColor{NEWCS}{NEWCOLOR}{Name\SpotSpace in\SpotSpace PDF}{0.5 1.0 0.51 0}| +% \end{center} +% Macro |\SpotSpace| is used to introduce blanks in names. According to the PDF standard a blank is denoted by the +% character sequence |#20| and this is the reason why |\SpotSpace| is defined as follows: +% \begin{macrocode} +\catcode`\#=12% +\def\SpotSpace{#20} +\catcode`\#=6% +% \end{macrocode} +%The macro |\csgrab| is quite unsual---it takes two arguments and creates a sequence of them. +% \begin{macrocode} +\gdef\csgrab#1#2{#2\expandafter{\the#2 #1}}% +% \end{macrocode} +%Note that this command should never be used by an ordinary package user. +% +% The following variables are used in the definition of macro |\AddSpotColor|. Their functionality has been +% described in the previous section. +% \begin{macrocode} +\newcount\colorprofilecnt +\newtoks\mycolorprofilename +% \end{macrocode} +% Macro |\AddSpotColor| first defines a new color profile by assigning a value to |\mycolorprofilename|. The name +% consists of the word |@mycolorprofile| followed by an integer. And since all names must be distinct +% the macro increments the value of the |\colorprofilecnt| counter by one. +% \begin{macrocode} +\def\AddSpotColor#1#2#3#4{% + \mycolorprofilename={@mycolorprofile\the\colorprofilecnt}% + \advance\colorprofilecnt by1% +% \end{macrocode} +% The following two macros expand to PDF instructions that define the spot color. The PDF instructions are copied verbatim from +% the original \textsf{spotcolor} package. +% \begin{macrocode} + \edef\mycolorprofile{\the\mycolorprofilename + <</C0[0 0 0 0]/FunctionType 2/C1[#4]/Domain[0 1]/N 1>>}% + \edef\mycolor{[/Separation/#3 /DeviceCMYK \the\mycolorprofilename]}% +% \end{macrocode} +% The next two lines have been copied verbatim from the original macro definition. +% \begin{macrocode} + \edef\tempcs{/#2 \mycolor}% + \expandafter\csgrab\expandafter{\tempcs}{\csname #1\endcsname}% +% \end{macrocode} +% In the last part of the macro definition, the driver is instructed to build two objects which should contain the definition of +% the new spot color. +% \begin{macrocode} + \special{pdf:obj \mycolorprofile}% + \special{pdf:obj \mycolor}% +} +% \end{macrocode} +% +% Command |\SetPageColorResource| is used by command |\SetPageColorSpace| to set the color space. +% The |\special| command below sets the page resources only for the current page. Since the color +% space should be visible to every subsequent page, I have opted to use command |\AddEverypageHook| of the +% \textsf{everypage} package. +% \begin{macrocode} +\def\SetPageColorResource#1{% + \AddEverypageHook{\special{pdf:put @resources <</ColorSpace <<#1>>>>}}% +}% +\def\SetPageColorSpace#1{% + \expandafter\SetPageColorResource\expandafter{\the\csname #1\endcsname}% +}% +% \end{macrocode} +% If a user wants to set a spot color as the default color, she should use the |\SpotColor| command: +% \begin{macrocode} +\def\SpotColor#1#2{% + \special{pdf:literal /#1 cs /#1 CS #2 sc #2 SC}% + \aftergroup\reset@color% +}% +% \end{macrocode} +% The commands |\color@spotcolor| and |\c@lor@@spotcolor| are ``low-level'' commands and should never be used by +% anyone. These commands are used to define new spot colors. They are automatically +% executed everytime a someone uses a command that defines a new spot color: +% \begin{center} +% |\definecolor{Spots}{spotcolor}{SPCOLOR,1.0}| +% \end{center} +% Note that the second argument must always be |spotcolor|. In addition, this command is meaningful only when +% one has defined a few things using command like the following ones: +%\begin{center} +%\begin{tabular}{l} +%|\NewSpotColorSpace{SPCOLORSPACE}|\\ +%|\AddSpotColor{SPCOLORSPACE}{SPCOLOR}{Some\SpotSpace Name}{0.5 1.0 0.51 0}|\\ +%|\SetPageColorSpace{SPCOLORSPACE}|\\ +%\end{tabular} +%\end{center} +% The code that follows has been taken and subsequently modified from \texttt{xetex.def}, +% which is {\em not yet} part of the Standard LaTeX ``Graphics Bundle.'' Note that these command work only +% if the \texttt{xdvipdfm-x} driver has been patched to recognize the \texttt{spot} command. +% \begin{macrocode} +\def\color@spotcolor#1#2{\c@lor@@spotcolor#2\@@#1} +\def\c@lor@@spotcolor#1,#2\@@#3{% + \c@lor@arg{#2}% + \edef#3{spot #1 #2}% +} +% \end{macrocode} +% If pantone or hks option specified then load corresponding color tables +% \begin{macrocode} +\ifhks\input{spotcolorhks}\fi +\ifpantone\input{spotcolorpantone}\fi +%</xespotcolor> +% \end{macrocode} +% \Finale diff --git a/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.ins b/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.ins new file mode 100644 index 00000000000..a801d2ddafb --- /dev/null +++ b/Master/texmf-dist/source/xelatex/xespotcolor/xespotcolor.ins @@ -0,0 +1,54 @@ +%% Copyright 2014 Apostolos Syropoulos +%% +%% This file is part of the `decimal' package. +%% You are not allowed to modify its contents. +%% +\def\filedate{2014/11/13} +\def\batchfile{xespotcolor.ins} +\input docstrip.tex + +{\ifx\generate\undefined +\Msg{**********************************************} +\Msg{*} +\Msg{* This installation requires docstrip} +\Msg{* version 2.3c or later.} +\Msg{*} +\Msg{* An older version of docstrip has been input} +\Msg{*} +\Msg{**********************************************} +\errhelp{Move or rename old docstrip.tex.} +\errmessage{Old docstrip in input path} +\batchmode +\csname @@end\endcsname +\fi} + +\preamble + + (c) Copyright 2007—2013 Apostolos Syropoulos + This program can be redistributed and/or modified under the + terms of the LaTeX Project Public License Distributed from + http://www.latex-project.org/lppl.txt; either + version 1.3c of the License, or any later version. + + This work has the LPPL maintenance status `maintained'. + + Please report errors or suggestions for improvement to + + Apostolos Syropoulos (asyropoulos@yahoo.com) + + +\endpreamble + + +\keepsilent + +\generate{\generateFile{xespotcolor.sty}{f}{\from{xespotcolor.dtx}{xespotcolor}}} +\postamble +\endpostamble +\Msg{**********************************************************} +\Msg{* To finish installation you have to copy} +\Msg{* the generated .sty file in the appropriate} +\Msg{* directory and then to rehash your TeX system} +\Msg{* Happy XeTeXing!} +\Msg{**********************************************************} +\endinput |