Les hasards de notre métier nous conduisent parfois à manœuvrer des objets excentriques, mordant allègrement sur la table de montage. InDesign magnanime nous laisse apercevoir les régions inscrites dans le cadre blanc, mais tout au-delà est froidement censuré.

Bien sûr on peut encore s'emparer de tels objets, contempler leur cadre de sélection :

Sélection d'objets franchissant dangereusement la table de montage.

…deviner leur contenu reste néanmoins un sport d'élite !

La première solution qui traverse l'esprit d'un utilisateur raisonnablement averti consiste à augmenter les marges de la table de montage. Après tout, tel est le propos de la rubrique « Options de la table de montage » dans le panneau Préférences > Repères et table de montage. Bon, d'accord, mais tout cela ne manque-t-il pas d'originalité ?

InDesign CS5 et ultérieur ouvre la voie à d'autres sorcelleries : sitôt que nous positionnons un repère au-delà du bornage officiel de la table de montage — opération infaisable manuellement, mais scriptable — InDesign réajuste comme par enchantement l'espace visible :

Table de montage étendue.

Cette propriété aussi remarquable que méconnue m'a fourni l'ingrédient du script PasteboardExpander, qui révèle toutes les zones invisibles de la planche active lorsque des objets se déploient dans les confins de la table de montage. La partition tient en quelques lignes quand on s'amuse à la compacter :

// InDesign CS5/CS5.5/CS6
// =====================================
(function(s,a,m,f,i,x)
{
    (s=s[a][f+'Window'])&&
    (s=s[a][f+'Spread'])&&
    (
        // Prevent 'locked guides' issues!
        // ---
        app.documents[x]().preferences[x]().
            properties={guidesLocked:false},
 
        // Retrieve the page bounds
        // ---
        a=s.pages[x]().bounds,
 
        // Min-max algo on page bounds
        // ---
        m=[m,m,-m,-m],
        (f=function(v,t)
        {
            while(t=a.pop(i=4))
            while(i--)
            (t[i]<m[i])^(i>>1)&&(m[i]=t[i],m[~i]=v)
        })(),
 
        // Min-max algo on page items bounds
        // ---
        a=s.pageItems[x]().visibleBounds,f(1)
    )
 
    // OK, create the guides where needed
    // ---
    while(i--)m[~i]&&
    s.guides.add({location:m[i],
        orientation:1&i?1986359924:1752134266})
 
})(app,'properties',1/0,'active',0,'everyItem');
 
 

Que la lumière soit !