# [texhax] in-section references

martin f krafft madduck at madduck.net
Tue Oct 2 16:00:26 CEST 2007

Replying to the list...

also sprach Donald Arseneau <asnd at triumf.ca> [2007.10.01.0009 +0100]:
> > So you mean \edef\curpart{\thepart}?
>
> Yes, but that is not guaranteed to give the same result as
> \let\curpart\thepart, which is another possibility for
> what you meant.  (Also, you must use \protected at edef in
> LaTeX for safety.)

Hm, if only I had a way of reading about this stuff. LaTeX is one
big mystery to me...

> but your best test is to insert
> \show\curref
> \show\refpart
> and note the differences.

If I do that, I just get a runaway argument error. But I can use
standard "printf" debugging with \typeout, read on...

> >   \def\curref{#2}%
>
> I'm not sure what you are giving as #2,...

\rrefx{section}{\ref{some-term}}{page~\pageref{some-term}}

So
#1 section
#2 3.1.1
#3 page~42

The theory is that I find out whether #2 matches the current
chapter, and the way to do that is basically:

if #2 == \thechapter or ... or #2 == \thesubsubsection
then
print 'page~42'
else
print section~3.1.1
fi

Now here is the function again, this time with \hbox{} (which Tom
originally included), which appears to be necessary as \ref{}
outputs it when it expands the reference:

\newcommand{\rrefx}[3]{%
\protected at edef\curchapter{\thechapter\hbox{}}%
\protected at edef\cursection{\thesection\hbox{}}%
\protected at edef\cursubsection{\thesubsection\hbox{}}%
\protected at edef\cursubsubsection{\thesubsubsection\hbox{}}%
\protected at edef\curref{#2}%
\def\refsame{#3}%
\def\refother{#1~#2}%
\ifx\curchapter\curref\refsame%
\else\ifx\cursection\curref\refsame%
\else\ifx\cursubsection\curref\refsame%
\else\ifx\cursubsubsection\curref\refsame%
\else\refother%
\fi%
\fi%
\fi%
\fi%
}%

And I finally got it working *iff* I disable the hyperref package.
If it's enabled, I guess \ref{} generates something else and the
match fails. In fact, typeout outputs:

DEBUG: \ref {section:deb-term-nonfree}A\hbox {}A.2\hbox {}A.2.0\hbox {}A.2.0.0\hbox {}

so the \ref is substituted later, which breaks my approach. Am
I missing something? Is there anything I can do to fix it and make
it work with hyperref?

--
martin;              (greetings from the heart of the sun.)
\____ echo mailto: !#^."<*>"|tr "<*> mailto:" net at madduck

"in diving to the bottom of pleasure
we bring up more gravel than pearls."
-- honoré de balzac

spamtraps: madduck.bogus at madduck.net
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature (see http://martin-krafft.net/gpg/)
Url : http://tug.org/pipermail/texhax/attachments/20071002/459dc1e8/attachment.bin


More information about the texhax mailing list