hilfdirselbst.ch
Facebook Twitter gamper-media

Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » VERSAL-Buchstaben

 



Wolfgang J. Kremer
Beiträge: 48

14. Dez 2005, 14:21

Beitrag #1 von 9
Bewertung:

(4948 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo InDesign-User, hallo Script-Profis !

Ich habe immer wieder Bücher, bei denen ich die im Text vorkommenden VERSALIEN markiere, eine Zeichenvorlage zuweise und dann über verschiedene Einstellungen modifiziere. Sinn dieser ganzen Sache ist, dass mir Anhäufungen von Versal-Buchstaben (zwei oder mehr - z.B. AEG, US, CE etc.) zu massiv erscheinen und den Lesefluss behindern. Diese Buchstaben-Kombinationen werden von mir dann etwas kleiner gesetzt und gesperrt, evtl. lege ich auch schon einmal eine Kontur darum, damit die Strichstärke wieder besser zum Rest des Textes passt.
Das Heraussuchen und Markieren mache ich "zu Fuß", will heißen, es dauert ziemlich lange, und leider übersieht man schon einmal Buchstabenpaare.
Diese Arbeit könnte doch der Computer übernehmen. Man müsste ein Script schreiben, in dem man definiert, welche Buchstaben gesucht werden sollen (also jeweils mehr als zwei Versalbuchstaben in Folge aus der Zeichenreihe A-Z,ÄÖÜ usw.) und diesen dann eine Zeichenvorlage zuweisen.
Leider komme ich mit Javascript und den vielen InDesign-Referenzen überhaupt nicht zurecht. Das hier im Forum schon veröffentlichte Script "TextCleanup.jsx" leistet schon ernorm viel. Kann ich dieses Script nicht etwas modifizieren?

Vielen Dank schon einmal für eure Überlegungen
Wolfgang
Top

Martin Fischer  M  p
Beiträge: 9698

14. Dez 2005, 15:07

Beitrag #2 von 9
Beitrag ID: #200691

Bewertung:

(4927 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Wolfgang,

interessant, diese Arbeit lade ich mir seit ein paar Wochen auch auf.
Versalien im Verbund tragen schon etwas dick auf.
Ich habe bei der MT Baskerville z.B. ein Zeichenformat "Versalien" angelegt mit horizontaler und vertikaler Skalierung von 95%; Laufweite: 75.

Zum Zuweisen reicht eine Abwandlung von TextCleanup.js nicht aus.
Leider kann InDesign nur allgemein Buchstaben (^$) oder Zahlen (^9) suchen, jedoch ohne Unterscheidung von Groß- und Kleinschreibung.

Ich glaube, ich hatte mal eine Skript-Lösung mit regulären Ausdrücken gesehen, die aber auf lange Texte recht mühsam war.

Mein Notbehelf ist ein Skript, das nach dem markierten Wort (und nur WORT!) sucht und dieses durch das Zeichenformat ersetzt. Damit spart man sich zumindest Copy & Paste des zu suchenden Worts.

Ersetze inder ersten Zeile den Namen "Versalien" durch Deinen Zeichenformatnamen. Wenn das Format nicht vorhanden ist, dann meckert jemand.

Code
// applyStyle2Capitals.js 
//
myStyleName = "Versalien";
mySel = app.selection[0];
if (mySel.constructor.name == "Word"){
myStyle = app.documents[0].characterStyles.item(myStyleName);
app.findPreferences = null; app.changePreferences = null;
try{
myStyle.name;
app.documents[0].search(mySel.contents, true, true, undefined, {},{appliedCharacterStyle:myStyle})
}
catch (e){
alert("Zeichenformat \""+ myStyleName + "\" nicht vorhanden!")
}
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#200666] Top

Quarz  M  p
Beiträge: 2424

14. Dez 2005, 15:25

Beitrag #3 von 9
Beitrag ID: #200697

Bewertung:

(4918 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Martin,

danke für das Script. Ich werde es gleich mal ausprobieren.
(Wenn du an den Anfang des Scripts Deinen Namen und das Datum schreibst, dann brauche ich das nicht zu tun. Ich meine, dass sollte da schon stehen.)

Ich ersetze die VERSALIEN immer durch Gemeine der SmallCaps.

Gruß
Quarz

als Antwort auf: [#200691] Top

Martin Fischer  M  p
Beiträge: 9698

14. Dez 2005, 15:28

Beitrag #4 von 9
Beitrag ID: #200699

Bewertung:

(4915 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


> Ich ersetze die VERSALIEN immer durch Gemeine der SmallCaps.

Sind die dann nicht etwas zu klein?
Vielleicht könnten die dann ein Zeichenformat mit Skalierung auf 105% brauchen. ;-)


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#200697] Top

Quarz  M  p
Beiträge: 2424

14. Dez 2005, 15:34

Beitrag #5 von 9
Beitrag ID: #200703

Bewertung:

(4901 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Martin,

also ich finde das so sehr schön. Die Kundschaft hat sich auch noch nicht beschwert.
Ich vermeide es nach Möglichkeit eine Schrift zu Skalieren.
Ich werde das mal ausprobieren und mir anschauen.

Gruß
Quarz

als Antwort auf: [#200699] Top

Wolfgang J. Kremer
Beiträge: 48

14. Dez 2005, 16:21

Beitrag #6 von 9
Beitrag ID: #200717

Bewertung:

(4875 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Martin !

Das ging ja wieder wahnsinnig schnell. Das Script ist zwar noch nicht das, was ich mir vorgestellt habe – aber trotzdem, es funktioniert tadellos und superschnell. Vielen Dank für die schnelle Hilfe.

Übrigens nehme ich diese kleineren Versalien natürlich nur bei Schriften, bei denen ich keine Original-Minuskeln habe.

Noch eine Bitte: Schau dir einmal die InDesign-Referenzen unter dem folgenden Link an.

http://wjk.serveftp.net/...CharactersMethod.pdf


Kommt man damit nicht weiter?

Erstmal jedoch vielen Dank für deine schnelle Hilfe

Viele Grüße
Wolfgang

als Antwort auf: [#200691] Top

Martin Fischer  M  p
Beiträge: 9698

14. Dez 2005, 16:59

Beitrag #7 von 9
Beitrag ID: #200732

Bewertung:

(4854 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Wolfgang,

> Das ging ja wieder wahnsinnig schnell.
War ja gewissermaßen noch schreibfrisch.

> Noch eine Bitte: Schau dir einmal die InDesign-Referenzen unter dem folgenden Link an.
Da steckt keine Lösung drin.
Das ist lediglich eine Kopie aus dem Referenzhandbuch mit einer Auflistung der Methoden, die Du auf Zeichen (Plural) anwenden kannst. Du kannst das erste Zeichen herauslesen, oder das letzte oder die Zeichen innerhalb eines bestimmten Bereichs.

Hat aber mit Deinem Versalienproblem gar nix zu tun.

Aber warte mal, soeben habe ich das Script, an das ich mich dunkel erinnerte gefunden. Es ist wieder ein Script dieses namenlosen Scripters, dessen Website (http://csscripting.berlios.de/license/) nicht mehr erreichtbar ist.

Hab's auf die Schnelle in InDesign CS2 getestet.
Es scheint zu funktionieren.

Code
// ApplyCharacterStyleToCapitals.js 
/*
Apply character style to capitals

Applies a certain character style to a sequence of capitals,
possibly separated by padding characters. The characters
used can be specified by the user.

Download script source.

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

Version: 0.2.0
Date: 2005-03-08

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


if ( app.documents.length < 1 )
exit();

if ( !(app.activeDocument.selection[0] instanceof Text) )
{
alert( "Select text to change." );
exit();
}

var d = app.dialogs.add( {name: "Format capitals"} );
var charStyleDD, dontApplyEG, charactersTEB, paddingCharsEG, paddingCharsTEB, keepLogCB;
var dontApplyCBs = new Array();
with ( d.dialogColumns.add() )
{
with ( dialogRows.add() )
{
dialogColumns.add().staticTexts.add( {staticLabel: "Apply character style"} );
charStyleDD = dialogColumns.add().dropdowns.add( {stringList: [].concat( app.activeDocument.characterStyles.everyItem().name ), selectedIndex: 0} );
}

with ( dialogRows.add() )
{
dialogColumns.add().staticTexts.add( {staticLabel: "Characters"} );
charactersTEB = dialogColumns.add().textEditboxes.add( {editContents: "A-Z", minWidth: 300 } );
}

with ( paddingCharsEG = dialogRows.add().enablingGroups.add( {staticLabel: "Allow padding characters", checkedState: true} ) )
paddingCharsTEB = textEditboxes.add( {editContents: "\\u2000-\\u200D\\u00A0\\u0026\\u00AD", minWidth: 300} );

with ( dontApplyEG = dialogRows.add().enablingGroups.add( {staticLabel: "Don't apply to paragraph styles", checkedState: false} ) )
{
var cols = [dialogColumns.add(), dialogColumns.add()];
for ( var k = 0; k < app.activeDocument.paragraphStyles.length; k++ )
dontApplyCBs.push( cols[k % 2].dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: app.activeDocument.paragraphStyles.item(k).name} ) );
}

keepLogCB = dialogRows.add().checkboxControls.add( {checkedState: false, staticLabel: "Save log file"} );
}

var re;
for ( ; ; )
{
if ( !d.show() )
{
d.destroy();
exit();
}

if ( charactersTEB.editContents.length < 1 )
{
alert( "Illegal specification of allowed characters." );
continue;
}

if ( paddingCharsEG.checkedState && charactersTEB.editContents.length > 0 )
re = "[" + charactersTEB.editContents.replace( /(?=[\[\]])/g, "\\" ) + "](?:[" + paddingCharsTEB.editContents.replace( /(?=[\[\]])/g, "\\" ) + "]?[" + charactersTEB.editContents.replace( /(?=[\[\]])/g, "\\" ) + "])+";
else
re = "[" + charactersTEB.editContents.replace( /(?=[\[\]])/g, "\\" ) + "]{2,}";

try { re = new RegExp( re, "g" ); }
catch ( e ) { alert( "Failed to compile regular expression: " + e ); continue; }


break;
}

var log, logFile, keepLog;
if ( keepLog = keepLogCB.checkedState )
{
for ( ; ; )
{
if ( logFile = File.saveDialog( "Select where to save log file." ) )
{
logFile = new File( logFile );
if ( logFile.exists && !confirm( 'Warning: "' + logFile.name + '" already exists. Are you sure you want to append to it?' ) )
continue;

if ( !logFile.open( "e", "TEXT", "????" ) )
alert( "Unable to open log file for editing." );
else
break;
}
else
{
d.destroy();
exit();
}
}
}

if ( keepLog ) log( "Searching for matching words..." );
var charStyle = app.activeDocument.characterStyles.item( charStyleDD.selectedIndex );
var txt = app.activeDocument.selection[0].contents;
var match;
var matches = new Object();
while ( match = re.exec( txt ) )
matches[match[0].replace( /\^/g, "^^" )] = 1;

var nmatches = 0;
for ( match in matches )
nmatches++;

if ( keepLog ) log( nmatches + " match(es) found. Abort execution by removing this file." );

var nreplacements = 0;
var start = new Date();

// Using extra search() rather than modifying characters.itemByRange(...) is far faster.
if ( !dontApplyEG.checkedState )
doReplacements( matches, undefined );
else
{
var n = 0;
for ( var k = 0; k < dontApplyCBs.length; k++ )
if ( !dontApplyCBs[k].checkedState )
n++;

nmatches *= n;
for ( var k = 0; k < dontApplyCBs.length; k++ )
if ( !dontApplyCBs[k].checkedState )
if ( !doReplacements( matches, {appliedParagraphStyle: app.activeDocument.paragraphStyles.item(k)} ) )
break;
}

app.findPreferences = app.changePreferences = null;
d.destroy();
if ( keepLog ) log( "Total search time: " + formatDuration( (new Date()).getTime() - start.getTime() ) );

function log ( str )
{
if ( !logFile.exists )
{
if ( confirm( "Log file removed. Abort execution of script?" ) )
{
d.destroy();
exit();
}
}

// Ignore any errors here... (Poor mans flush().)
if ( logFile.open( "e", "TEXT", "????" ) )
try
{
logFile.lineFeed = "unix";
logFile.seek( 0, 2 );
logFile.writeln( str );
logFile.close();
}
catch ( e ) { ; }
else
alert( "failed to open log." );
}

function doReplacements ( matches, findAttributes )
{
var previous = new Date();

if ( findAttributes != undefined && keepLog )
log( 'Starting replacements for paragraph style "' + findAttributes.appliedParagraphStyle.name + '".' );

for ( match in matches )
{
var replacements;
for ( ; ; )
{
app.findPreferences = app.changePreferences = null;
// XXX: Assumes search() only returns undefined when aborted.
replacements = app.activeDocument.selection[0].search( match, false, true, undefined, findAttributes, {appliedCharacterStyle: charStyle} );
if ( replacements != undefined )
break;
else if ( confirm( "Are you sure you want to abort the script?" ) )
return(false);
}

nreplacements++;
if ( keepLog )
{
var current = new Date();
// Note: Each search() takes about the same, number of replacements doesn't matter.
log( '[' + (nreplacements/nmatches * 100).toFixed(0) + '%] Replaced ' + replacements.length + ' occurrence(s) of "' + match + '" in ' + ((current.getTime() - previous.getTime())/1000).toFixed(3) + 's. ETA ' + formatDuration( (current.getTime() - start.getTime()) * (nmatches-nreplacements)/nreplacements ) );
previous = current;
}
}

return(true);
}

function formatDuration ( ms )
{
var s, m, h, d;
s = ms/1000;
s -= (d = Math.floor( s/(60*60*24) )) * 60*60*24;
s -= (h = Math.floor( s/(60*60) )) * 60*60;
s -= (m = Math.floor( s/60 )) * 60;
s = Math.round(s);

if ( d != 0 )
return( d + "d " + h + "h " + m + "m " + s + "s" );
else if ( h != 0 )
return( h + "h " + m + "m " + s + "s" );
else if ( m != 0 )
return( m + "m " + s + "s" );
else
return( s + "s" );
}



Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#200717]

(Dieser Beitrag wurde von MartinF am 14. Dez 2005, 17:12 geändert)
Top

Wolfgang J. Kremer
Beiträge: 48

14. Dez 2005, 18:28

Beitrag #8 von 9
Beitrag ID: #200755

Bewertung:

(4843 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


Hallo Martin !

Dieses Script ist genau das, was ich gesucht habe. Vielen Dank.
Dein Script werde ich aber trotzdem verstärkt einsetzen. Es ist ja leicht abgewandelt sehr vielfältig nutzbar.

Vielleicht kannst du mir bei Gelegenheit mal etwas unter die Arme greifen mit einer Einweisung in Java-Script. Eventuell verstehe ich es dann ja doch noch mal. Bis bald.

Wolfgang


PS: Deine Beiträge erscheinen auf meinem Rechner in einem zu breiten Rahmen und werden dann stellenweise von Werbung verdeckt. Ist das nur bei mir so?

als Antwort auf: [#200732]

(Dieser Beitrag wurde von Wolfgang J. Kremer am 14. Dez 2005, 18:32 geändert)
Top

Martin Fischer  M  p
Beiträge: 9698

14. Dez 2005, 18:40

Beitrag #9 von 9
Beitrag ID: #200759

Bewertung:

(4839 mal gelesen)
URL zum Beitrag

Beitrag als Lesezeichen

VERSAL-Buchstaben


> Dein Script werde ich aber trotzdem verstärkt einsetzen.
> Es ist ja leicht abgewandelt sehr vielfältig nutzbar.

Stimmt.
Vielleicht sollte man das Skript ausbauen und Formatierungen über eine Dialogbox zuweisen können (z.B. Auflistung aller Zeichenformate).

Ich hatte es schon mal für die Zuweisung von einem Autorenformat (Kapitälchen) verwendet (Autor ausgewählt und schon war er über's Dokument mit dem Zeichenformat ausgezeichnet). Mit der Dialogbox ist halt nochmal eine lästige Bestätigung erforderlich. Und das Skript ist ja gemacht, um schnell erledigen zu können, was man sonst über die Suche-Palette durch x Klicks bewältigen muß.

> Vielleicht kannst du mir bei Gelegenheit mal etwas unter die Arme greifen mit einer
> Einweisung in Java-Script. Eventuell verstehe ich es dann ja doch noch mal. Bis bald.

Gerne.

>PS: Deine Beiträge erscheinen auf meinem Rechner in einem zu breiten Rahmen
> und werden dann stellenweise von Werbung verdeckt. Ist das nur bei mir so?

Nein, das liegt an der CODE-Formatierung, die ein Umbruch der Skriptzeilen verhindert.
Wenn eine lange Linie im Skript steht, dann definiert sie die Breite des Textrahmens (Alternative: Skriptzeile wird abgeschnitten).

Die Skripts könnten auch ohne CODE verschickt werden, dann ist die Struktur aber nicht so deutlich zu erkennen.


Martin Fischer

Skripte für InDesign im Skriptarchiv von HilfDirSelbst.ch

als Antwort auf: [#200755] Top


Forenindex » Programme » Print/Bildbearbeitung » Adobe InDesign » VERSAL-Buchstaben


^