% \iffalse meta-comment % % Copyright (C) 2013 Eduardo C. Lourenço de Lima % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either % version 1.3 of this license or (at your option) any later % version. The latest version of this license is in % % http://www.latex-project.org/lppl.txt % % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % \fi % \iffalse % %\NeedsTeXFormat{LaTeX2e}[1996/06/01] %\ProvidesPackage{copypaste}[2013/01/11 v0.1 Copy and paste] %<*driver> \documentclass{ltxdoc} \usepackage{copypaste} \usepackage{color} \definecolor{orange}{rgb}{0.8,0.4,0.2} \newcommand\announcement[1]{\begin{center}\color{orange}#1\end{center}} \newenvironment{Description} {\par\medskip\noindent\ignorespaces}{} \newenvironment{synopsis} {\begin{list}{} {\setlength\parsep{0pt} \setlength\itemsep{0pt}}} {\end{list}} \newenvironment{Example}[1] {\if#1\else\paragraph{Example.}#1\fi} {} \newenvironment{page} {\begin{center}\begin{minipage}[t]{0.5\linewidth}} {\end{minipage}\end{center}} \newcommand\TODO{\texttt{Todo:}} \begin{document} \DocInput{copypaste.dtx} \end{document} % % \fi % \changes{0.1}{2013/01/11}{Initial version} % \GetFileInfo{copypaste.sty} % \CheckSum{199} % \DoNotIndex{\,,\@addtoreset,\begin,\closeout,\csname,\end,\endcsname} % \DoNotIndex{\expandafter} % \DoNotIndex{\@ifundefined,\immediate,\input,\jobname,\label} % \DoNotIndex{\@makebox,\makebox,\mbox,\MessageBreak,\@namedef,\@nameuse} % \DoNotIndex{\newcommand,\newcounter,\newenvironment,\newwrite,\noindent} % \DoNotIndex{\normalfont,\openout,\PackageError, \par,\parskip,\ref} % \DoNotIndex{\relax,\renewcommand,\setlength,\string} % \DoNotIndex{\write} % \title{The \textsf{copypaste} package\thanks{This document % corresponds to \textsf{copypaste}~\fileversion, % dated~\filedate.}} % \author{Eduardo C. Louren\c{c}o de Lima \\ \texttt{elourenco@phi.pro.br}} % \maketitle % % % \announcement{This package is obsolete and has been superseded by the |clipboard| package.} % % \section*{Introduction} % % This package provides a basic framework for copying and pasting content % into a single document, or across different documents. % % \section{Basic Usage} % \begin{synopsis} % \item |\savecopypaste| \marg{basename} % \item |\yank| \marg{key} \marg{content} % \item |\paste| \marg{key} % \item |\opencopypaste| \marg{basename} % \end{synopsis} % % % \begin{Description} % \DescribeMacro{\savecopypaste} % The first step is to create a copy-and-paste apparatus. % \begin{synopsis} % \item |\savecopypaste| \marg{basename} % \end{synopsis} % \end{Description} % % \begin{Description} % \DescribeMacro{\yank} % The command |\yank| typesets \meta{content} and identifies it as \meta{key}.\footnote % {\texttt{copy} is already defined in {\TeX}.} % \begin{synopsis} % \item |\yank| \marg{key} \marg{content} % \end{synopsis} % \end{Description} % % \begin{Description} % \DescribeMacro{\paste} % And |\paste| just typesets the content identified by \meta{key}. % \begin{synopsis} % \item |\paste| \marg{key} % \end{synopsis} % \end{Description} % % \begin{Description} % \DescribeMacro{\opencopypaste} % Finally, |\opencopypaste| makes available content from |doc1.tex| to |doc2.tex|. In that way, you can paste into |doc2.tex| content from |doc1.tex|. Make sure to use the same \meta{basename} in both documents. % \begin{synopsis} % \item |\opencopypaste| \marg{basename} % \end{synopsis} % \end{Description} % % \section{Example} % % This is how to copy |bar| from |doc1.tex| and paste it into |doc2.tex|:\bigskip % % \noindent |doc1.tex|: % \iffalse %<*example> % \fi \begin{verbatim} \documentclass{article} \usepackage{copypaste} \savecopypaste{myfoo} \begin{document} \yank{foo}{bar} \end{document} \end{verbatim} % \iffalse % % \fi % % \noindent |doc2.tex|: % \iffalse %<*example> % \fi \begin{verbatim} \documentclass{article} \usepackage{copypaste} \opencopypaste{myfoo} \begin{document} \paste{foo} \end{document} \end{verbatim} % \iffalse % % \fi % % \noindent Now, running: % % |$ latex doc1| % % |$ latex doc2| % % \noindent outputs 2 documents with the same content, namely, |bar|. % % \StopEventually % % \section{Implementation} % \begin{macrocode} \newwrite\@copypaste \newcommand\savecopypaste[1]{% \immediate\openout\@copypaste=#1.cpy} \newcommand\opencopypaste[1]{% \input{#1.cpy}} \newcommand\yank[2]{% \defcopy{#1}{#2}% \immediate\write\@copypaste{\noexpand\defcopy{#1}{\unexpanded{#2}}}% #2} \newcommand\defcopy[2]{% \@namedef{@copypaste@#1}{#2}} \newcommand\paste[1]{% \@nameuse{@copypaste@#1}} % \end{macrocode}