Copy link to clipboard
Copied
Hi!
I have a script about index that works as the following.
After running the script, I found that some index markers's location were shifted.
But this script doesn't change the pagereference of index in the step 2 above.
In the another web site I found that says it is a bug.
It says that when inserting index marker using script, the index markers's location are shifted under a certain condition.
The condition are the following:
In my indesign document sample,  it is sure that a table in accord with the above condition exists.
So, I want to know
The fix on HDS is here:
http://www.hilfdirselbst.ch/foren/Script_f%FCr_Index_in_InDesign_CS5_P449901.html
It is more verbose than necessary. But the idea is simple and fairly easy to implement: before placing a page reference, note the index of the insertionPoint where it (the page reference) should go. Then place it. Then check if it actually landed where it was supposed to. If it didn't, move it. Here's a sample script:
...if (app.documents[0].indexes.length == 0) app.documents[0].indexes.add();
addR
Copy link to clipboard
Copied
When say "Collect all the index", do you mean the generated index only, or the generated index and the topics and page references in the Index panel? If all you want to do is to change the sortOrder field, then there's no need to delete the topics and page references: you can change the sortOrder fields of existing topics.
As to the table problem, yes, that's a real bug. There is an existing solution (search the forum, the solution was posted in the Swiss HDS forum). Another method is to move all tables into a different story (or into different text frames), add the page references, then return the tables to their correct position.
But as I said, to update the sortOrder field there's no need to delete the page references. Just change the exising topics and update your index.
Peter
Copy link to clipboard
Copied
Hi, Peter.
Thank you for your replay.
I am sorry that I didn't explain clearly and something was wrong.
1.Collect the all index from the opened indesign document.
This means collect all topics's name, sortorder, page reference in the index panel.
2.Change the sortby string of the collected index.
This means change the topics's name and sortorder field of the top level only.
I want the result like the following. From image1 to image2.
Image1
Image2
3.Delete all index of the opened indesign document.
This was wrong. This is deleting all the topics.
If I only change the sort order field of a topic, then the other topics with the same parent will also be changed.
So I delete all the topics and then add new topic which the sort order field and name field changed(page reference not changed).
In my case, is it possible only change the sort order field?
Best regard.
Copy link to clipboard
Copied
Changing a topic's sort order field has the same effect as deleting topic with its page reference and adding the same topic and setting its sort order field.
If you change the sort order field you see the effect straight away. Just try it.
Peter
Copy link to clipboard
Copied
Hi, Peter.
I have tried to changed the sort order field using the following source.
---------------------------------------------------------------------------------------
for i = 1 to myIndex.Topics.Count
set myTopic = myIndex.Topics.Item(i)
For j= myTopic.Topics.count to 1 step -1
Set myChdTopic = myTopic.Topics.Item(j)
sortBy = Left(myChdTopic.SortOrder,1)
myChdTopic.Parent.SortOrder = sortBy <-------(1)
next
next
----------------------------------------------------------------------------------------
After executing (1), myChdTopic moved to the objective position(position a).
But, the other topic also moved within myChdTopic.Parent to position a.
I have no idea to prevent the other topics''s movement.
How should I do to prevent the other topics''s movement.?
Best regard.
Copy link to clipboard
Copied
In your outer for-loop you need to go back to front, just as you do with the inner for-loop. Is your code AppleScript? Looks a bit funny with the inconsistency in capitalisation.
Copy link to clipboard
Copied
Hi, Peter.
My code is not AppleScript. I'm using word VBA.
I have changed outer for-loop as the inner for -loop,
but the result is same as befor changing outer for-loop.
---------------------------------------------------------------------- -----------------
for i = myIndex.Topics.Count to1 step -1
set myTopic = myIndex.Topics.Item(i)
For j= myTopic.Topics.count to 1 step -1
Set myChdTopic = myTopic.Topics.Item(j)
sortBy = Left(myChdTopic.SortOrder,1)
myChdTopic.Parent.SortOrder = sortBy
next
next
---------------------------------------------------------------------- ------------------
image1 before changing the last child topic sort order within last topic
image2 After changing the last child topic sort order, it moved to topic "X".
But other child topic like "USB..." also moved to topic "X". Just I want them
remain within topic "Z".
Copy link to clipboard
Copied
Hi, Peter.
Could you tell me the page that showing the solution about the table problem?
I have searched the page in the Swiss HDS forum, but I couldn't found it
because this site is written in German.
Best regard
Copy link to clipboard
Copied
The fix on HDS is here:
http://www.hilfdirselbst.ch/foren/Script_f%FCr_Index_in_InDesign_CS5_P449901.html
It is more verbose than necessary. But the idea is simple and fairly easy to implement: before placing a page reference, note the index of the insertionPoint where it (the page reference) should go. Then place it. Then check if it actually landed where it was supposed to. If it didn't, move it. Here's a sample script:
if (app.documents[0].indexes.length == 0) app.documents[0].indexes.add();
addRef ('distribution');
addRef ('information');
function addRef (str){
var pref, topic = app.documents[0].indexes[0].topics.add(str);
app.findGrepPreferences.findWhat = str;
var found = app.documents[0].findGrep();
for (var i = found.length-1; i > -1; i--){
pref = addPageRef (topic, found.insertionPoints[0]);
// Do whatever else you want to do with the page reference
}
}
function addPageRef (topic, ip) {
var target = ip.index; // The new page ref should go here
var pRef = topic.pageReferences.add (ip); // Add the page ref
if (Math.abs(pRef.sourceText.index - target) > 0){ // Did it land where it was supposed to?
try { // No, it didn't: move it
ip.parentStory.characters[pRef.sourceText.index].move (LocationOptions.after, ip);
} catch(_){
}
}
return pref;
}
Peter
Copy link to clipboard
Copied
Hi, Peter.
The table problem has been solved.
Thank you for your reply very much!!
Best regard.