Thank you for the response, my response is below... On Sun, 15 Apr 2012 08:19:28 +0900, S Barmeier wrote:
On 04/15/2012 07:44 AM, Aaron W. Hsu wrote:
Here is an example:
\defchunk{This is a name} Some text /BTEX\chunk{Other stuff}/ETEX goes here. And here. \stopchunk
\defchunk{Other stuff} Something else \stopchunk
\defchunk{This is a name} Some other stuff. \stopchunk
Now, at the end, let's say that each of these appears in sections 1, 2, and 3, respectively. The output I am looking for, in Unicode, might look like this:
⟨This is a name 1⟩≡ Some text ⟨Other stuff 2⟩ goes here. And here. ── See also section 3.
⟨Other stuff 2⟩≡ Something else ── This code is used in section 1.
⟨This is a name 1⟩≡ Some other stuff. ──
So here, there are really three things that I want to achieve. I need to be able to get a list of all of the sections wherein a given chunk is referenced using \chunk, a list of all the sections where a section of the same name is defined, and finally, be able to tell in which section the first occurrence of a chunk is defined.
Have you had a look at the reference manual? Chapter 13 on descriptions will show you how to define something like
\definedescription[chunk][location=serried,titlestyle=\bf]
which you then should be able to use as
\chunk[name1]{This is a name}
For referencing (chapter 12), use \in for pointing to the relevant section, \at[name1] for a page number.
\definedescription[chunk] \starttext \input tufte \section[s1]{One section} \chunk[c1]{A chunk} \input ward \par \input tufte \startchunk[c2]{A long chunk} \input ward \input tufte \stopchunk In section \in[s1] on page \at[c1], we defined the first chunk. \stoptext
You can style this with \setupdesription[chunk][...=...] or directly in the definition.
So, basic cross-referencing with named labels is easy enough to figure out, but I do not know how to go from this to the automatic referencing that I want. Specifically, in my above example, I do not want to explicitly list any labels. Moreover, that example contains two chunks with the same name “This is a name.” I want to somehow be able to talk about all of the chunks that have the same name. So, if I have three chunks of that name, I want to be able to say \refs{This is a name} or something like that, and end up with the set of cross-references to each of those chunks. If I gave each specific instance a specific label that was unique and then manually remembered which labels go together, then I could do the cross-references. I do not want to have to do this manually though, and I want my macros to automatically remember and generate three things: 1) A mapping from a chunk name to the set of references where that chunk is defined; a single chunk name may be defined in multiple places, and I want to be able to talk about all of those references as a group. 2) A mapping from a chunk name to the first reference in the above set, that is, the start of the chunk definitions. 3) A set of references pointing to where a given chunk name is used as a reference. These are links pointing in the opposite direction. A \chunkref{This is a name} should create a reference to which I point in the first definition of the chunk “This is a name.” The above example shows this, where I use chunk 2 in chunk 1, so the reference to chunk 1 shows up in the cross-references under chunk 2. The problem I am having is understanding how to map multiple references onto a single label, for instance, or some other key, while still retaining the ability to say what the first use of that label is. Does this make sense? I hope this clarifies things. I am trying to get the cross-referencing behavior that one gets from systems like CWEB or WEB. In those systems, a preprocessor extracts the links and generates them before outputting the TeX code. -- Aaron W. Hsu | arcfide@sacrideo.us | http://www.sacrideo.us Programming is just another word for the lost art of thinking.