hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Indizierung automatisieren

 

« « 1 2 » »  


Doro W.
Beiträge: 165

24. Mai 2005, 16:03

Beitrag #1 von 22
Bewertung:

(10160 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo allerseits,
ich will einen Index erstellen zu einem Text, bei dem die aufzunehmenden Begriffe sämtlichst mit Zeichenformat formatiert sind. Kann man das irgendwie automatisieren? Der gute alte Pagemaker konnte das (auch wenn er keine zuverlässigen Indizes erstellen kann ....).
Für einen anderen Index habe ich eine Themenliste in Word, kann ich die automatisch als Themenliste in ID importieren?
Danke und Grüße
Doro
Top

Martin Fischer  M  p
Beiträge: 9696

29. Mai 2005, 23:43

Beitrag #2 von 22
Beitrag ID: #168388

Bewertung:

(10156 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo Doro,

vielleicht findest Du hier ein Skript, das Dir bei der Automatisierung der Indexerstellung weiterhilft:

http://csscripting.berlios.de/

Index from character style
Creates an index based on keywords in the specified character style.

Index from list
Creates an index from a text-file list by searching in the document for the specified keywords. The text file has one keyword per line, if a line contains two tabseparated keywords, the first is used for searching and the second for indexing.

Grüßle
Martin

als Antwort auf: [#167536] Top

rohrfrei p
Beiträge: 3917

2. Dez 2005, 15:34

Beitrag #3 von 22
Beitrag ID: #198949

Bewertung:

(10066 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo,

kann es sein, daß der Link mittlerweile tot ist? Kennt jemand eine neue URL ?

Gruß

als Antwort auf: [#168388] Top

Martin Fischer  M  p
Beiträge: 9696

2. Dez 2005, 15:43

Beitrag #4 von 22
Beitrag ID: #198952

Bewertung:

(10062 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Der Link scheint tot zu sein.
Eine neue URL kenne ich nicht.
Aber sag mal, was suchst Du?


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#198949] Top

rohrfrei p
Beiträge: 3917

5. Dez 2005, 15:43

Beitrag #5 von 22
Beitrag ID: #199215

Bewertung:

(10015 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo,

ich würde die Scripte einfach mal gerne ausprobieren. Ich lese hier jetzt schon seit zwei Tagen kreuz und quer wegen Infos zur Index-Erstellung. So richtig das wahre habe ich aber für meinen Fall noch nicht gefunden, daher will ich gerne mal über den Tellerrand hinaussschauen.

Per Google gibt es diese Scripte nicht mehr zum Download. Auf einer japanischen Site steht etwas davon in ASCII, aber teilweise mit japanischen Sonderzeichen drin, das wird wohl nicht funzen.

Wenn jemand diese Scripte noch auf der Platte hat, wäre es nett, wenn er sich mal meldet. Danke.

Gruß.

als Antwort auf: [#198952] Top

Martin Fischer  M  p
Beiträge: 9696

5. Dez 2005, 16:07

Beitrag #6 von 22
Beitrag ID: #199225

Bewertung:

(10006 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo Rohrfrei,

hier IndexFromCharacterStyle.js (für InDesign CS, könne auch mit CS2 funktionieren):

Code
/* 
Index from character style

Creates an index based on keywords in the specified character style.

(c) 2005 PM. All rights reserved.
This script is licensed under the Artistic License,
see http://csscripting.berlios.de/license/ for details.

Version: 0.0.1
Date: 2005-03-07

More scripts are available at http://csscripting.berlios.de/
*/


var d = app.dialogs.add( {name: "Index from character style", canCancel: true} );
var deleteOldCB, swapCB, charStyleDD;

var doc = app.activeDocument;
var idx = doc.indexes.length ? doc.indexes.item(0) : undefined;

with ( d.dialogColumns.add() )
{

with ( dialogRows.add() )
{
dialogColumns.add().staticTexts.add( {staticLabel: 'Create index from character style'} );
charStyleDD = dialogColumns.add().dropdowns.add( {minWidth: 300, stringList: app.activeDocument.characterStyles.everyItem().name.slice(1), selectedIndex: 0} );
}

deleteOldCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Delete old index and topics"} );
swapCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Ab Cd ... --> Cd ..., Ab"} );
}

if ( !app.documents.length || !d.show() )
{
d.destroy();
exit();
}


var charStyleIndex = charStyleDD.selectedIndex + 1;
var deleteOld = deleteOldCB.checkedState;
var swap = swapCB.checkedState;

d.destroy();


if ( deleteOld && idx && idx.topics.length > 0 )
idx.topics.everyItem().remove();

if ( !idx )
idx = doc.indexes.add();

app.findPreferences = app.changePreferences = undefined;

for ( var i = 0; i < doc.stories.length; i++ )
{
// Step 1: find ranges of the character style. search() for {appliedCharacterStyle: ...} would
// be alot easier, but it's far too slow to resolve the returned matches.
var tsr = doc.stories.item(i).textStyleRanges;
if ( tsr.length < 1 )
continue;
var acs = [].concat( tsr.everyItem().appliedCharacterStyle );
var matches = new Array();
var j = 0;
for ( ; j < tsr.length; j++ )
if ( acs[j].index == charStyleIndex )
for ( matches.push( [tsr[j].index, tsr[j].length] ), j++; j < tsr.length && acs[j].index == charStyleIndex; j++ )
matches[matches.length - 1][1] += tsr[j].length;

var text = doc.stories.item(i).contents;
for ( var j = 0; j < matches.length; j++ )
{
var entry = text.substr( matches[j][0], matches[j][1] );
var topic = idx.topics.add(swap ? entry.replace( /(\S+)\s+(\S.*)/, '$2, $1' ) : entry )

topic.pageReferences.add( doc.stories.item(i), matches[j][0] + j, PageReferenceType.currentPage );
}
}
idx.update();



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#199215] Top

Martin Fischer  M  p
Beiträge: 9696

5. Dez 2005, 16:10

Beitrag #7 von 22
Beitrag ID: #199226

Bewertung:

(10001 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Und hier IndexFromList.js für InDesign CS:

Code
/* 
Index from list

Creates an index from a text-file list by searching in the document for the
specified keywords. The text file has one keyword per line, if a line
contains two tabseparated keywords, the first is used for searching
and the second for indexing.

(c) 2005 PM. All rights reserved.
This script is licensed under the Artistic License,
see http://csscripting.berlios.de/license/ for details.

Version: 0.0.1
Date: 2005-03-07

More scripts are available at http://csscripting.berlios.de/
*/

var d = app.dialogs.add( {name: "Index from list", canCancel: true} );
var addEntriesEG, deleteOldCB, swapCB, replaceCharStyleEG, charStyleDD, caseSensitiveCB, wholeWordCB;

var doc = app.activeDocument;
var idx = doc.indexes.length ? doc.indexes.item(0) : undefined;

with ( d.dialogColumns.add() )
{
with ( addEntriesEG = dialogRows.add().enablingGroups.add( {staticLabel: "Add entries to index", checkedState: true} ).dialogColumns.add() )
{
deleteOldCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Delete old index and topics"} );
swapCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Ab Cd ... --> Cd ..., Ab"} );
}

with ( replaceCharStyleEG = dialogRows.add().enablingGroups.add( {staticLabel: "Apply character style to entries", checkedState: false} ) )
charStyleDD = dropdowns.add( {minWidth: 300, stringList: [].concat(app.activeDocument.characterStyles.everyItem().name), selectedIndex: 0} );

/*
with ( dialogRows.add().borderPanels.add() )
{
dialogColumns.add().staticTexts.add( {staticLabel: "Search preferences"} );
with ( dialogColumns.add() )
{
caseSensitiveCB = checkboxControls.add( {checkedState: false, staticLabel: "Case sensitive"} );
//wholeWordCB = checkboxControls.add( {checkedState: false, staticLabel: "Match whole words only"} );
}
}
*/
caseSensitiveCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Case sensitive search"} );

}

if ( !app.documents.length || !d.show() )
{
d.destroy();
exit();
}


var addEntries = addEntriesEG.checkedState;
var deleteOld = deleteOldCB.checkedState;
var swap = swapCB.checkedState;
var replaceCharStyle = replaceCharStyleEG.checkedState;
var charStyle = doc.characterStyles.item(charStyleDD.selectedIndex);
var caseSensitive = caseSensitiveCB.checkedState ? true : false;
//var wholeWord = wholeWordCB.checkedState ? true : false;

d.destroy();


var file = File.openDialog( 'Select text file containing index entries.' );

if ( !file )
exit();
else
// XXX: ID bug, File.openDialog().open("r") may fail...
file = new File(file);

file.encoding = "UTF-8";
if ( !file.open( "r" ) )
{
alert( "Failed to open file for reading." );
exit();
}

if ( deleteOld && idx && idx.topics.length > 0 )
idx.topics.everyItem().remove();

var entries = file.read().split( /\r?\n/ );

if ( !idx )
idx = doc.indexes.add();

app.findPreferences = app.changePreferences = undefined;
for ( var oneEntry = 0; oneEntry < entries.length; oneEntry++ )
{
var entry = entries[oneEntry].split( "\t", 2 );

if ( entry[0].length < 1 )
continue;

if ( entry.length < 2 )
{
entry.push( entry[0] );
if ( swap )
entry[1] = entry[1].replace( /(\S+)\s+(\S.*)/, '$2, $1' );
}

// XXX: builtin quote for regex?
var re = new RegExp( entry[0].replace( /[$^\\.*+?(){}[\]|]/g, "\\$&" ), (caseSensitive ? "g" : "ig") );
var topic = idx.topics.add(entry[1]);

for ( var j = 0; j < doc.stories.length; j++ )
{
// Note: We reload the story in every iteration because it's difficult
// to predict exactly where ID inserted the page reference markers.
var text = doc.stories.item(j).contents;
re.lastIndex = 0;
for ( var match, delta = 0; match = re.exec(text); delta++ )
topic.pageReferences.add( doc.stories.item(j), match.index + delta, PageReferenceType.currentPage );
}
if ( replaceCharStyle )
doc.search( entry[0], false, caseSensitive, undefined, undefined, {appliedCharacterStyle: charStyle} );
}
idx.update();



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#199215] Top

Martin Fischer  M  p
Beiträge: 9696

5. Dez 2005, 16:13

Beitrag #8 von 22
Beitrag ID: #199227

Bewertung:

(9999 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Übrigens, hier ein Workaround, fall Du mehrere Register erstellen/verwalten mußt:
http://www.hilfdirselbst.ch/..._P189882.html#189882


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#199226] Top

rohrfrei p
Beiträge: 3917

5. Dez 2005, 16:39

Beitrag #9 von 22
Beitrag ID: #199231

Bewertung:

(9983 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo Martin,

puh, das ist ja excellent, vielen Dank. Damit werde ich erstmal ein wenig Zeit verbringen, denke ich.

Den anderen Tip habe ich schon gesehen, danke. Genau so werde ich es wahrscheinlich auch machen.

Gruß

als Antwort auf: [#199227] Top

cajmere
Beiträge: 8

16. Jan 2007, 14:49

Beitrag #10 von 22
Beitrag ID: #270939

Bewertung:

(8584 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Antwort auf [ Martin Fischer ] Und hier IndexFromList.js für InDesign CS

Leider funktioniert das Skript nicht munter InDesign CS2, das Skript entsprechend zu fixen ist mir nicht gelungen. Kennt jemand ein gleichwertiges Skript für CS2?!

Danke schon mal!
/cajmere

als Antwort auf: [#199226] Top

zaphodbeeblebroxx p
Beiträge: 397

16. Jan 2007, 15:44

Beitrag #11 von 22
Beitrag ID: #270961

Bewertung:

(8559 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo,

im englischen Adobe-InDesign-Forum habe ich mal folgendes Skript von Peter Kahrel gefunden, dass man noch entsprechend abändern müsste:

Code
doc = app.activeDocument;  
if( doc.indexes.length == 0 )
   doc.indexes.add();
app.findPreferences = app.changePreferences = null;
app.findPreferences.fontStyle = 'Bold';
toindex = doc.search();
for( oneItem = toindex.length-1; oneItem > -1; oneItem-- )
   {
   try
      {
      newtopic = doc.indexes[0].topics.add( toindex[oneItem].contents );
      newtopic.pageReferences.add( toindex[oneItem], PageReferenceType.currentPage );
      }
   catch(_)
      {}
   }


Damit kann man einen Index (mit einer Indexstufe) aus allen Wörtern, die mit "Bold" formatiert sind, erstellen.

Wenn nach einem best. Zeichenformat (z.B. "MeinZeichenformat") gesucht werden soll müsste folgende Zeile geändert werden:

Code
app.findPreferences.appliedCharacterStyle = 'MeinZeichenformat'; 



zaphodbeeblebroxx


Matthias

als Antwort auf: [#270939] Top

Bernhard Werner p
Beiträge: 4236

8. Aug 2007, 17:45

Beitrag #12 von 22
Beitrag ID: #307042

Bewertung:

(7786 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo zusammen,

gibt es auch eine Möglichkeit, dieses Script von Peter Kahrel auch auf ein gesammtes Buch anzuwenden?

Dank und Gruß
Bernhard


Solange die Fähigkeit einen Computer einschalten zu können, als Qualifikationsmerkmal herhalten muss, wird das nix!

als Antwort auf: [#270961] Top

zaphodbeeblebroxx p
Beiträge: 397

8. Aug 2007, 17:50

Beitrag #13 von 22
Beitrag ID: #307045

Bewertung:

(7783 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hallo,

ja das geht auch. Per Skript können alle Dokumente eines Buchs "bearbeitet" werden. Such mal im Forum nach "Buch" + "Skript".

Es gibt verschiedene Bsp. für Skripte, die alle Dokumente eines Buchs bearbeiten.

Hier ein Bsp., wie das aussehen könnte:

Code
//DESCRIPTION: Ändert alle Dokumente eines Buchs 
//
if ((app.documents.length == 0) && (app.books.length == 1)) {
var myChoice = confirm("ACHTUNG:\rDas Skript ändert in einem geöffneten Buch alle Dokumente!\rVor Ausführung des Skripts unbedingt eine SICHERUNGSKOPIE aller Dokumente des Buchs anlegen!!\r\rWeiter mit YES, Skript abbrechen mit NO", true,);
if (myChoice != true){
exit();
}
var theDocs = app.books[0].bookContents;
//
for (oneDoc = 0; oneDoc < theDocs.length; oneDoc++) {
myDoc = app.open(File(theDocs[oneDoc].fullName), false);
//
// Hier müssen die Code-Zeilen rein, die in jedem Buch-Dokument ausgeführt werden sollen
//
myDoc.close(SaveOptions.yes);
}
alert("Fertig. " + app.books[0].bookContents.length + " Dokumente bearbeitet!");
exit();
}
alert("Bitte alle InDesign-Dokumente schließen und nur ein Buch öffnen!");
exit();
}


In dem markierten Bereich muss noch rein, was mit den jeweiligen Dokumenten des Buchs passieren soll. Das Skript arbeitet nur, wenn alle InDesign-Dokumente geschlossen sind und nur ein Buch geöffnet ist.


Matthias

als Antwort auf: [#307042]

(Dieser Beitrag wurde von zaphodbeeblebroxx am 8. Aug 2007, 18:03 geändert)
Top

Bernhard Werner p
Beiträge: 4236

8. Aug 2007, 18:43

Beitrag #14 von 22
Beitrag ID: #307060

Bewertung:

(7765 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Hab' nun diese gefunden: http://www.hilfdirselbst.ch/...i?post=228925#228925

Klappt bestens. :-)

[edit]Deines sogar noch besser, wenn man die letzte Klammer weglässt. :-)[/edit]

Vielen Dank!

Gruß
Bernhard


Solange die Fähigkeit einen Computer einschalten zu können, als Qualifikationsmerkmal herhalten muss, wird das nix!

als Antwort auf: [#307045]

(Dieser Beitrag wurde von Bernhard Werner am 8. Aug 2007, 18:44 geändert)
Top

Bernhard Werner p
Beiträge: 4236

8. Aug 2007, 19:14

Beitrag #15 von 22
Beitrag ID: #307065

Bewertung:

(7748 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

Indizierung automatisieren


Mal eine blöde Frage. Kann es hin und wieder vorkommen, das Scripte mal funktionieren und mal nicht? Mal kommen Fehlermeldungen, die nach einem Neustart nicht mehr erscheinen oder es kommen Fehlermeldungen, die nicht sein können oder die Aktion wird nicht ausgeführt/angewendet.

Oder bin ich einfach nur zu doof?

Dank und Gruß
Bernhard


Solange die Fähigkeit einen Computer einschalten zu können, als Qualifikationsmerkmal herhalten muss, wird das nix!

als Antwort auf: [#307045] Top
« « 1 2 » »  


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » Indizierung automatisieren


^