用于丢失文本样式的脚注的Indesign脚本

Indesign Script for footnotes losing text styles

本文关键字:脚注 脚本 Indesign 样式 文本 用于      更新时间:2023-11-24

我正在InDesign 5中处理脚注。我设法将文本转换为脚注,但我的问题是在这个过程中它们失去了风格。

这是我正在使用的脚本:

Application.prototype.main = function(){
if ( this.documents.length <= 0 ) return;
var tg = this.selection[0] || this.activeDocument;
if( 'appliedFont' in tg ) tg = tg.parent;
if( tg.constructor == TextFrame ){ tg = tg.parentStory ; }
if(! ('findGrep' in tg) ) return;
var fnPatterns = ["@FOOTNOTES_BEGIN@([''s''S]*?)@FOOTNOTES_END@", "@footnotes_begin@([''s''S]*?)@footnotes_end@"];
var count = 0;
for(patterCounter = 0; patterCounter < fnPatterns.length; patterCounter++){ 
    fnPattern = fnPatterns[patterCounter]; 
    var fnFinds = (function(){              
        this.findGrepPreferences = this.changeGrepPreferences = null;
            this.findGrepPreferences.findWhat = fnPattern;            
            var ret = tg.findGrep();
            this.findGrepPreferences = this.changeGrepPreferences = null;
        return ret;
    }).call(this);

    var fnFind, fnText, rg = new RegExp(fnPattern), ip, fnParent, fn, count;
    while( fnFind=fnFinds.pop() ){
        fnText = fnFind.contents.match(rg)[1];

        fnParent = fnFind.parent.getElements()[0];
        ip = fnFind.insertionPoints[0].index;
        try {
            fnFind.remove();
            fn = fnParent.footnotes.add(LocationOptions.BEFORE, fnParent.insertionPoints[ip]);
            fn.texts[0].insertionPoints[-1].contents = fnText;
            ++count;
        }
            catch(_){}
    }
}
alert((count)? (count+" footnote(s) successfully added."): "No footnote added. Make sure you use the relevant pattern.");

}

app.doScript('app.main();', ScriptLanguage.javascript,
undefined, UndoModes.entireScript, app.activeScript.displayName);

脚注添加正确,只是失去了风格。在使用脚本之前,文本显示得很完美,但在使用脚本之后,脚注样式就消失了。

这是xml输入的一个示例:

....text@FOOTNOTES_BEGIN@<italic>Text</italic> More text@FOOTNOTES_END@

我是InDesign脚本的新手。。。我一直在寻找答案,尝试了很多东西,但不知怎么的,我就是做不到有什么帮助吗?感谢:)

这是您的问题:

fn.texts[0].insertionPoints[-1].contents = fnText;

contents只为您提供纯文本:一个String或SpecialCharacters枚举器,其中"String"将被视为Javascript字符串。

改为使用move方法(您还必须重写match行,因为它也适用于并返回纯Javascript字符串)。move移动本地InDesign文本,包括所有格式。