[NTG-context] Cross references to column numbers

Taco Hoekwater taco at elvenkind.com
Fri Nov 15 16:31:01 CET 2019


Hi,

> On 15 Nov 2019, at 15:44, Oliver von Criegern <oliver.v.criegern at badw-muenchen.de> wrote:
> 
> Could someone please take a look at this?

Well, I can tell you what is wrong …

The definition of \referencecolumnnumber is like this:

\def\referencecolumnnumber
  {\numexpr \dimexpr \clf_referenceposx -\cutspace \relax /
            \dimexpr \makeupwidth /\nofcolumns \relax 
   +\plusone \relax }

But that outer \numexpr rounds instead of truncates. so anything that
is past halfway of the column is rounded too far up. This fixes it
(but not very elegantly)

\unprotect
\def\referencecolumnnumber
  {\numexpr \dimexpr \clf_referenceposx -\cutspace - \makeupwidth /(2*\nofcolumns) \relax /
            \dimexpr \makeupwidth /\nofcolumns \relax 
   +\plusone \relax }
\protect
 

Best wishes,
Taco

> 
> Am 12.11.19 um 13:02 schrieb Oliver von Criegern:
>> Am 10.09.19 um 13:16 schrieb Hans Hagen:
>>> On 9/9/2019 10:05 PM, Henri Menke wrote:
>>>> Bump
>>>> 
>>>> On 9/3/19 4:46 AM, Oliver von Criegern wrote:
>>>>> Dear list members,
>>>>> 
>>>>> is there any way to get a cross reference to a column in a two column layout?
>>> 
>>> yes and no:
>>> 
>>> no : there is not something buil tin
>>> yes: one can write some hack in a few lines
>>> 
>>> but instead of posting such a hack (which then will a live of its own) i'll add a feature:
>>> 
>>> \pagereference[column:#1]
>>> 
>>> \doifelsereferencefound{column:#1}{\number\referencecolumnnumber}{}
>>> 
>>> in the next beta,
>>> 
>>> Hans
>> 
>> Thanks for implementing this, but I am afraid it does not work properly, at least not if there are several targets following one after another.
>> 
>> Consider this example:
>> 
>> 
>> \setupcolumns[
>>     n=2,
>> ]
>> \setuplinenumbering[
>>     step=5,
>>     method=page,
>> ]
>> 
>> \def\Lab#1{%
>> \pagereference[#1]%
>> \pagereference[column:#1]%
>> \someline[#1]%
>> }
>> 
>> \def\Ref#1{
>> page \at[#1],
>> column \doifelsereferencefound{column:#1}{\number\referencecolumnnumber}{},
>> line \inlinerange[#1].
>> }
>> 
>> \starttext
>> \startcolumns
>> \startlinenumbering
>> 
>> REFERENCES:\par
>> A: \Ref{A}\par
>> B: \Ref{B}\par
>> C: \Ref{C}\par
>> D: \Ref{D}\par
>> E: \Ref{E}\par
>> F: \Ref{F}\par
>> \input lorem
>> TARGETS:
>> \Lab{A} A,
>> \Lab{B} B,
>> \Lab{C} C.
>> \input lorem
>> TARGETS:
>> \Lab{D} D,
>> \Lab{E} E,
>> \Lab{F} F.
>> \input lorem
>> 
>> \stoplinenumbering
>> \stopcolumns
>> \stoptext
>> 
>> As you will see, targets A, B and C are all in the first column, and targets D, E and F are all in the second column. But the references read as follows:
>> 
>> A: page 1, column 1, line 29.
>> B: page 1, column 1, line 29.
>> C: page 1, column 2, line 29.
>> D: page 1, column 2, line 14.
>> E: page 1, column 3, line 14.
>> F: page 1, column 3, line 14.
>> 
>> 
>> Best regards,
>> Oliver
>> 
>> 
>>> 
>>>>> At least, I would need to get some value that tells me whether the target is in the left or in the right column. How to achieve this?
>>>>> 
>>>>> This is the more simplified version of the my previous question cited below.
>>>>> 
>>>>> Best regards,
>>>>> Oliver.
>>>>> 
>>>>> 
>>>>> Am 12.08.19 um 15:26 schrieb Oliver von Criegern:
>>>>>> Dear list members,
>>>>>> 
>>>>>> how can I create cross references to column numbers?
>>>>>> 
>>>>>> I have a two column layout with column numbers in the header instead of page numbers (actually, these column numbers are calculated from the page numbers). Now I want to create a cross reference that returns the column number of the target. How can I achieve this?
>>>>>> 
>>>>>> Of course, I can get the page number with \pagereference (for the target) and \at (for the reference), but for calculating the column number (according to what I did in the header), I would also need to know whether the target is in the left or in the right column, and I can't see how I can get this information.
>>>>>> 
>>>>>> For an example, see the question posted by me at stackexchange:
>>>>>> https://tex.stackexchange.com/questions/502944/context-cross-references-to-column-numbers 
>>>>>> 
>>>>>> Besides, I am wondering, regarding the generally very regular and consistent naming of commands in ConTeXt, why this is not so in the case of references. For example, to refer to a page, I need \pagereference (for the target) and \at (for the reference); to refer to a line, I need \someline (for the target) and \inline (for the reference), but only if I want it to automatically add the word "line" or something else before the number, otherwise I have to use \inlinerange. It took me some time to find that out. Wouldn't it be easier to have just one command for the target and another one for the reference, and everything else, as counters and headers to be returned, text to be added etc. to be configured by options?
>>> Because all these \in \at \about ... give back different things (a title, a number, a range, a ...) and packaging all that in one macro doens't make it cleaner so soon users will then wrap complex calls in a macro of their own (which then can clash with some existing name).
>>> 
>>> Also, the ref mechanism evolved over decades and we're not going to drop compatibility.
>>> 
>>> Hans
>>> 
>>> -----------------------------------------------------------------
>>>                                           Hans Hagen | PRAGMA ADE
>>>               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
>>>        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
>>> -----------------------------------------------------------------
>>> ___________________________________________________________________________________ 
>>> If your question is of interest to others as well, please add an entry to the Wiki!
>>> 
>>> maillist : ntg-context at ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
>>> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
>>> archive  : https://bitbucket.org/phg/context-mirror/commits/
>>> wiki     : http://contextgarden.net
>>> ___________________________________________________________________________________ 
>> 
> -- 
> Dr. Oliver von Criegern
> Referat für IT und Digital Humanities
> Bayerische Akademie der Wissenschaften
> Alfons-Goppel-Str. 11
> 80539 München
> Tel.: 089-23031-1310
> 
> ___________________________________________________________________________________
> If your question is of interest to others as well, please add an entry to the Wiki!
> 
> maillist : ntg-context at ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
> webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
> archive  : https://bitbucket.org/phg/context-mirror/commits/
> wiki     : http://contextgarden.net
> ___________________________________________________________________________________

Taco Hoekwater
Elvenkind BV






More information about the ntg-context mailing list