ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Jim <zlists+context@jdvb.ca>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: [NTG-context] Re: mtx-synctex.lua question
Date: Fri, 8 Dec 2023 14:51:04 -0400	[thread overview]
Message-ID: <ZXNlmM+pMYKZt0Je@x360.localdomain> (raw)
In-Reply-To: <ZXM4g2tLjELaqDSv@x360.localdomain>

Hi Hans (and anyone else interested in synctex),

On Fri, Dec  8, 2023 at 11:38 (-0400), Jim wrote:

> Hi Hans,

> On Fri, Dec  8, 2023 at 15:03 (+0100), Hans Hagen wrote:

>> On 12/7/2023 7:23 PM, Jim wrote:
>>> Hi,

>>> In mtx-synctex.lua, inside
>>> local function findlocation(filename,page,xpos,ypos,tolerance)
>>> there is the following code:
>>> for s=1,tolerance,max(tolerance//10,1) do
>>> locate( s, 0) if fi ~= 0 then tl = s ; goto done end
>>> locate(-s, 0) if fi ~= 0 then tl = s ; goto done end
>>> locate( s, s) if fi ~= 0 then tl = s ; goto done end
>>> locate( s,-s) if fi ~= 0 then tl = s ; goto done end
>>> locate(-s, s) if fi ~= 0 then tl = s ; goto done end
>>> locate(-s,-s) if fi ~= 0 then tl = s ; goto done end
>>> end

>>> Is the omission of the
>>> locate(0, s) ...
>>> and
>>> locate(0, -s) ...
>>> cases intentional, or is that an oversight?

>>> If intentional, can someone explain the rationale to me?

>> it's too long ago to remember the reason ... did you test with and without?

> I did not.  Yet.

> But on your suggestion, I will give it a try and get back to you.

I modified mtx-synctex.lua as follows:
% diff /usr/local/context/tex/texmf-context/scripts/context/lua/mtx-synctex.lua mtx-synctex-jd.lua 
279a280
>                 -- JD added (0, +/-s) cases for testing
282a284,285
>                     locate( 0, s) if fi ~= 0 then tl = s ; goto done end
>                     locate( 0,-s) if fi ~= 0 then tl = s ; goto done end

and then wrote the following quick and dirty shell script to create log
files for comparison:

---------------------------------------------------------------------
#! /bin/zsh

# File:		    compare-my-synctex-version
# Author:	    Jim Diamond
# Created:	    2023/12/08 13:27:23
#
# Purpose:	    Run some tests to compare ConTeXt's mtx-synctex-lua to
#		    my own version, vis-a-vis the backward-search
#		    functionality.
#
# Notes:	    Assumes $1 is a valid ConTeXt synctex file,
#		    $2 is a valid page within that file, and
#		    $3, if present, is a valid 

DEFAULT_TOLERANCE=300

if [[ $# < 2 || $# > 3 || ! -r $1 ]]
then
    echo >&2 "Usage: $0 <synctex file> <page> [tolerance]"
    echo >&2 "       tolerance default is $DEFAULT_TOLERANCE."
    exit 1
fi

st_file=$1
page=$2
if [[ $3 != "" ]]
then
    tolerance=$3
else
    tolerance=$DEFAULT_TOLERANCE
fi

x_vals=`seq 100 50 550`
y_vals=`seq 100 50 700`

old_results=${st_file}_page_${page}_tol_${tolerance}_using_current.out
new_results=${st_file}_page_${page}_tol_${tolerance}_using_new.out

if [[ -e $old_results || -e $new_results ]]
then
    printf >&2 "$0: at least one of\n\t%s\nor\n\t%s\nexists; quitting.\n" \
	$old_results $new_results
    exit 1
fi

# Get rid of the extra newline from mtxrun as done below.
for x in $=x_vals
do
    for y in $=y_vals
    do
	printf "%3d, %3d: " $x $y
	out=`mtxrun --script synctex --goto --direct \
	    --page=$page --x=$x --y=$y --tolerance=$tolerance $st_file`
	echo $out
    done
done | tee $old_results

echo

for x in $=x_vals
do
    for y in $=y_vals
    do
	printf "%3d, %3d: " $x $y
	out=`mtxrun --script mtx-synctex-jd.lua --goto --direct \
	    --page=$page --x=$x --y=$y --tolerance=$tolerance $st_file`
	echo $out
    done
done | tee $new_results
---------------------------------------------------------------------

and ran it on one page of one synctex file for a few different values of
tolerance (300, 200, 100 and 50).  To briefly summarize, the modified
script found a small number of matches that the original script didn't,
occasionally the line number was different (almost always by 1, but a few
times more), and the tolerance returned by this test version was also <= the
tolerance returned by the current version.

Admittedly, with the other two directions added in, a more extensive test
(a total of a bit under 14 minutes CPU time on a Ryzen 4700U) showed the
new version is about 0.5% slower, so there is a very minor downside.  (I'd
happily spend the extra matches for the minuscule amount of CPU time, but
others may not.)

Cheers.
                                Jim
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl
webpage  : https://www.pragma-ade.nl / https://context.aanhet.net (mirror)
archive  : https://github.com/contextgarden/context
wiki     : https://wiki.contextgarden.net
___________________________________________________________________________________

  reply	other threads:[~2023-12-08 18:52 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-07 18:23 [NTG-context] " Jim
2023-12-08 14:03 ` [NTG-context] " Hans Hagen via ntg-context
2023-12-08 15:38   ` Jim
2023-12-08 18:51     ` Jim [this message]
2023-12-08 20:18       ` Hans Hagen
2023-12-08 21:36         ` Jim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZXNlmM+pMYKZt0Je@x360.localdomain \
    --to=zlists+context@jdvb.ca \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).