summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/expl3/l3xref.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/expl3/l3xref.dtx')
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3xref.dtx377
1 files changed, 0 insertions, 377 deletions
diff --git a/Master/texmf-dist/source/latex/expl3/l3xref.dtx b/Master/texmf-dist/source/latex/expl3/l3xref.dtx
deleted file mode 100644
index 00245b085bb..00000000000
--- a/Master/texmf-dist/source/latex/expl3/l3xref.dtx
+++ /dev/null
@@ -1,377 +0,0 @@
-% \iffalse
-%% File: l3xref.dtx Copyright (C) 2006,2009 LaTeX3 project
-%%
-%% 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
-%%
-%% This file is part of the ``expl3 bundle'' (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% The released version of this bundle is available from CTAN.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% The development version of the bundle can be found at
-%%
-%% http://www.latex-project.org/svnroot/experimental/trunk/
-%%
-%% for those people who are interested.
-%%
-%%%%%%%%%%%
-%% NOTE: %%
-%%%%%%%%%%%
-%%
-%% Snapshots taken from the repository represent work in progress and may
-%% not work or may contain conflicting material! We therefore ask
-%% people _not_ to put them into distributions, archives, etc. without
-%% prior consultation with the LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%
-%<*driver|package|testfile>
-\RequirePackage{l3names}
-%</driver|package|testfile>
-%\fi
-\GetIdInfo$Id: l3xref.dtx 2223 2011-04-09 12:57:14Z will $
- {L3 Experimental cross referencing}
-%\iffalse
-%<*testfile>
-\ProvidesFile{\jobname.tex}
- [\filedate\space v\fileversion\space\filedescription]
-%</testfile>
-%<*driver>
-%\fi
-\ProvidesFile{\filename.\filenameext}
- [\filedate\space v\fileversion\space\filedescription]
-%\iffalse
-\documentclass[full]{l3doc}
-\begin{document}
-\DocInput{\filename.\filenameext}
-\end{document}
-%</driver>
-% \fi
-%
-%
-% \title{The \textsf{l3xref} package\thanks{This file
-% has version number \fileversion, last
-% revised \filedate.}\\
-% Cross references}
-% \author{\Team}
-% \date{\filedate}
-% \maketitle
-%
-% \begin{documentation}
-%
-% \begin{function}{\xref_set_label:n}
-% \begin{syntax}
-% "\xref_set_label:n" \Arg{name}
-% \end{syntax}
-% Sets a label in the text. Note that this function does not do
-% anything else than setting the correct labels. In particular, it
-% does not try to fix any spacing around the write node; this is a
-% task for the \textsf{galley2} module.
-% \end{function}
-%
-% \begin{function}{\xref_new:nn}
-% \begin{syntax}
-% "\xref_new:nn" \Arg{type} \Arg{value}
-% \end{syntax}
-% Defines a new cross reference type <type>. This defines the token
-% list variable |\l_xref_curr_|<type>|_tl| with default value
-% <value> which gets written fully expanded when |\xref_set_label:n|
-% is called.
-% \end{function}
-%
-%
-% \begin{function}{\xref_deferred_new:nn}
-% \begin{syntax}
-% "\xref_deferred_new:nn" \Arg{type} \Arg{value}
-% \end{syntax}
-% Same as |\xref_new:n| except for this one, the value written
-% happens when \TeX\ ships out the page. Page numbers use this one
-% obviously.
-% \end{function}
-%
-% \begin{function}{\xref_get_value:nn / (EXP)}
-% \begin{syntax}
-% "\xref_get_value:nn" \Arg{type} \Arg{name}
-% \end{syntax}
-% Extracts the cross reference information of type <type> for the
-% label <name>. This operation is expandable.
-% \end{function}
-%
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3xref} implementation}
-%
-% \subsection{Internal functions and variables}
-%
-% \begin{variabledoc}{ \g_xref_all_curr_immediate_fields_prop |
-% \g_xref_all_curr_deferred_fields_prop }
-% What they say they are ":)"
-% \end{variabledoc}
-%
-% \begin{variabledoc}{ \xref_write }
-% A stream for writing cross references, although they are not required
-% to be in a separate file.
-% \end{variabledoc}
-%
-% \begin{function}{\xref_define_label:nn}
-% \begin{syntax}
-% "\xref_define_label:nn" \Arg{name} \Arg{plist contents}
-% \end{syntax}
-% Define the property list for each label; used internally by
-% "\xref_set_label:n".
-% \end{function}
-%
-% \subsection{Module code}
-%
-% We start by ensuring that the required packages are loaded.
-% \begin{macrocode}
-%<*package>
-\ProvidesExplPackage
- {\filename}{\filedate}{\fileversion}{\filedescription}
-\package_check_loaded_expl:
-%</package>
-%<*initex|package>
-% \end{macrocode}
-%
-% There are two kinds of information, namely information which is
-% \emph{immediate} like a section title and then there's \emph{deferred}
-% information like page numbers. Each reference type belong to one of
-% these categories, which we save internally as the property lists
-% |\g_xref_all_curr_immediate_fields_prop| and
-% |\g_xref_all_curr_deferred_fields_prop| and the reference type
-% \meta{xyz} exists as the key-info pair |\xref_|\meta{xyz}|_key|
-% |{\l_xref_curr_|\meta{xyz}|_tl}| on one of these lists. This way each
-% new entry type is just added as another key-info pair.
-%
-% When the cross references are generated at the beginning of the
-% document each will turn into a control sequence. Thus |\label{mylab}|
-% will internally refer to the property list |\g_xref_mylab_prop|.
-%
-% The extraction of values from this property list can be done in
-% several different ways but we want to keep the operation
-% expandable. Therefore we use a dedicated function for each type of
-% cross reference, which looks like this:
-% \begin{verbatim}
-% \xref_get_value_xyz_aux:w -> #1 \xref_xyz_key #2#3\q_nil{#2}
-% \end{verbatim}
-% This will throw away all the bits we don't need. In case |xyz| is
-% the first on the |mylab| property list |#1| is empty, if it's the
-% last key-info pair |#3| is empty. The value of the field can be
-% extracted with the function |\xref_get_value:nn| where the first
-% argument is the type and the second the label name so here it would
-% be |\xref_get_value:nn| |{xyz}| |{mylab}|.
-%
-% \begin{macro}{\g_xref_all_curr_immediate_fields_prop}
-% \begin{macro}{\g_xref_all_curr_deferred_fields_prop}
-% The two main property lists for storing information. They contain
-% key-info pairs for all known types.
-% \begin{macrocode}
-\prop_new:N \g_xref_all_curr_immediate_fields_prop
-\prop_new:N \g_xref_all_curr_deferred_fields_prop
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\xref_new:nn}
-% \begin{macro}{\xref_deferred_new:nn}
-% \begin{macro}[aux]{\xref_new_aux:nnn}
-% Setting up a new cross reference type is fairly straight forward
-% when we follow the game plan mentioned earlier.
-% \begin{macrocode}
-\cs_new_nopar:Npn \xref_new:nn {\xref_new_aux:nnn{immediate}}
-\cs_new_nopar:Npn \xref_deferred_new:nn {\xref_new_aux:nnn{deferred}}
-\cs_new_nopar:Npn \xref_new_aux:nnn #1#2#3{
-% \end{macrocode}
-% First put the new type in the relevant property list.
-% \begin{macrocode}
- \prop_gput:ccx {g_xref_all_curr_ #1 _fields_prop}
- { xref_ #2 _key }
- { \exp_not:c {l_xref_curr_#2_tl }}
-% \end{macrocode}
-% Then define the key to be a protected macro.\footnote{We could also
-% set it equal to \cs{scan_stop:} but this just feels ``cleaner''.}
-% \begin{macrocode}
- \cs_set_protected_nopar:cpn { xref_#2_key }{}
- \tl_new:cn{l_xref_curr_#2_tl}{#3}
-% \end{macrocode}
-% Now for the function extracting the value of a reference. We could
-% do this with a simple |\prop_if_in| thing put since we want to do
-% things in an expandable way we make a separate grabber for each
-% type---this is also faster. The grabber function can be defined by
-% using an intricate construction of |\exp_after:wN| and other goodies
-% but I prefer readable code. The end result for the input |xyz| is
-% \begin{verbatim}
-% \cs_set_nopar:Npn\xref_get_value_xyz_aux:w #1\xref_xyz_key #2#3\q_nil{#2}
-% \end{verbatim}
-% \begin{macrocode}
- \toks_set:Nx \l_tmpa_toks {
- \exp_not:n { \cs_set_nopar:cpn {xref_get_value_#2_aux:w} ##1 }
- \exp_not:N \q_prop
- \exp_not:c { xref_#2_key }
- \exp_not:N \q_prop
- }
- \toks_use:N \l_tmpa_toks ##2 ##3\q_nil {##2}
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\xref_get_value:nn}
-% Getting the correct value for a given label-type pair is a matter
-% of connecting the correct grabber functions and property list.
-% \begin{macrocode}
-\cs_new_nopar:Npn \xref_get_value:nn #1#2 {
- \cs_if_exist:cTF{g_xref_#2_prop}
- {
-% \end{macrocode}
-% This next expansion may look a little weird but it isn't if you
-% think about it!
-% \begin{macrocode}
- \exp_args:NcNc \exp_after:wN {xref_get_value_#1_aux:w}
- \toks_use:N {g_xref_#2_prop}
-% \end{macrocode}
-% Better put in the stop marker.
-% \begin{macrocode}
- \q_nil
- }
- {??}
-}
-% \end{macrocode}
-% Temporary! We expand the property list and so we can't have the
-% |\q_prop| marker just expand!
-% \begin{macrocode}
-\cs_set_nopar:Npn \exp_after:cc #1#2 {
- \exp_after:wN \exp_after:wN
- \cs:w #1\exp_after:wN\cs_end: \cs:w #2\cs_end:
-}
-\cs_set_protected:Npn \q_prop {\q_prop}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xref_define_label:nn}
-% \begin{macro}[aux]{\xref_define_label_aux:nn}
-% Define the property list for each label. We better do this in two
-% steps because the special catcode regime is in effect and since
-% some of the info fields are very likely to contain actual text,
-% we better make sure spaces aren't ignored! As for the meaning of
-% other characters then it is a possibility to also have a field
-% containing catcode instructions which can then be activated with
-% |\etex_scantokens:D|.
-% \begin{macrocode}
-\cs_new_protected_nopar:Npn \xref_define_label:nn {
- \group_begin:
- \char_set_catcode:nn {`\ }\c_ten
- \xref_define_label_aux:nn
-}
-% \end{macrocode}
-% If the label is already taken we have a multiply defined label and
-% we should do something about it. For now we don't do anything
-% spectacular.
-% \begin{macrocode}
-\cs_new_nopar:Npn \xref_define_label_aux:nn #1#2 {
- \cs_if_free:cTF{g_xref_#1_prop}
- {\prop_new:c{g_xref_#1_prop}}{\WARNING}
- \toks_gset:cn{g_xref_#1_prop}{#2}
- \group_end:
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\xref_set_label:n}
-% Then the generic command for setting a label. We expand the
-% immediate labels fully before calling the write function but make
-% sure the deferred fields aren't expanded just yet. Due to property
-% lists being implemented as token list registers we must expand the
-% `immediate' fields twice.
-% \begin{macrocode}
-\cs_set_nopar:Npn \xref_set_label:n #1{
- \cs_set_nopar:Npx \xref_tmp:w{\toks_use:N\g_xref_all_curr_immediate_fields_prop}
- \exp_args:NNx\iow_shipout_x:Nn \xref_write{
- \xref_define_label:nn {#1} {
- \xref_tmp:w
- \toks_use:N \g_xref_all_curr_deferred_fields_prop
- }
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-% That's it (for now).
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-%
-% \section{\pkg{l3xref} test file}
-%
-% \begin{macrocode}
-%<*testfile>
-\documentclass{article}
-\usepackage{l3xref}
-\ExplSyntaxOn
-\cs_set_nopar:Npn \startrecording {\iow_open:Nn \xref_write {\jobname.xref}}
-\cs_set_nopar:Npn \DefineCrossReferences {
- \group_begin:
- \ExplSyntaxNamesOn
- \InputIfFileExists{\jobname.xref}{}{}
- \group_end:
-}
-\AtBeginDocument{\DefineCrossReferences\startrecording}
-
-\xref_new:nn {name}{}
-\cs_set_nopar:Npn \setname{\tl_set:Nn\l_xref_curr_name_tl}
-\cs_set_nopar:Npn \getname{\xref_get_value:nn{name}}
-
-\xref_deferred_new:nn {page}{\thepage}
-\cs_set_nopar:Npn \getpage{\xref_get_value:nn{page}}
-
-\xref_deferred_new:nn {valuepage}{\number\value{page}}
-\cs_set_nopar:Npn \getvaluepage{\xref_get_value:nn{valuepage}}
-
-\cs_set_eq:NN \setlabel \xref_set_label:n
-
-\ExplSyntaxOff
-\begin{document}
-\pagenumbering{roman}
-
-Text\setname{This is a name}\setlabel{testlabel1}. More
-text\setname{This is another name}\setlabel{testlabel2}. \clearpage
-
-Text\setname{This is a third name}\setlabel{testlabel3}. More
-text\setname{Hello World!}\setlabel{testlabel4}. \clearpage
-
-\pagenumbering{arabic}
-
-Text\setname{Name 5}\setlabel{testlabel5}. More text\setname{Name
- 6}\setlabel{testlabel6}. \clearpage
-
-Text\setname{Name 7}\setlabel{testlabel 7}. More text\setname{Name
- 8}\setlabel{testlabel8}. \clearpage
-
-Now let's extract some values. \getname{testlabel1} on page
-\getpage{testlabel1} with value \getvaluepage{testlabel1}.
-
-Now let's extract some values. \getname{testlabel 7} on page
-\getpage{testlabel 7} with value \getvaluepage{testlabel 7}.
-\end{document}
-%</testfile>
-% \end{macrocode}
-%
-% \end{implementation}
-% \PrintIndex
-%
-% \endinput