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 ___________________________________________________________________________________