8 votes

Pourquoi la police change-t-elle après avoir collé une image dans TextEdit?

Voici une séquence simple d'actions dans TextEdit dans macOS 10.13.6 qui produit un effet secondaire inattendu. Je ne comprends pas pourquoi, et j'aimerais savoir comment l'empêcher.

  1. Créez un nouveau document dans TextEdit (en utilisant -n ou l'élément de menu Fichier Nouveau).
  2. Regardez la barre de style en haut, et notez la police et la taille de police. La police que TextEdit utilise à ce stade est celle que j'ai définie dans mes préférences TextEdit pour "Police de texte enrichi". (Dans mon cas, Roboto 14pt.) description de l'image ici
  3. Capturez une image dans le presse-papiers, par exemple en utilisant la fonctionnalité standard de macOS pour capturer une partie de l'écran en tant qu'image dans le presse-papiers. (N'importe quelle image fera l'affaire.)
  4. Collez l'image dans le document (en utilisant -v ou l'élément de menu Édition Coller).
  5. Regardez à nouveau la barre de style : la police et la taille de police ont changé en Helvetica 12pt. description de l'image ici

Cela affecte le texte que vous tapez dans le document : si vous tapez du texte avant de coller une image, le texte sera dans la police et la taille de police que vous avez définies dans vos préférences ; une fois que vous avez collé une image, tout texte que vous tapez dans le document après l'emplacement de l'image utilisera une police et une taille de police différentes. (Ce n'est pas simplement un bug dans le style affiché dans la barre de style.)

Pourquoi la police change-t-elle ? Quel est le contrôle ce ce comportement ? Et comment puis-je empêcher ce changement, de sorte que le texte tapé après l'étape n°4 continue d'être dans la police définie dans mes préférences de "Police de texte enrichi" au lieu d'être changé en Helvetica 12pt ?

Si cela est pertinent, voici une image de mon panneau Préférences TextEdit :

description de l'image ici

0 votes

Etes-vous sûr que la police de caractères change? Sur mon ordinateur fonctionnant avec High Sierra, le nom de la police change mais la police elle-même est vraiment ma police par défaut. Dès que je déplace le curseur, le nom de la police revient à l'original.

0 votes

Oui, absolument. Taper du texte rend clair qu'il a changé.

0 votes

Ne pas être frivole, mais j'évite délibérément TextEdit en raison de ses particularités en tant qu'éditeur de texte professionnel.

1voto

Nic Points 2908

Je peux reproduire ce comportement de manière cohérente dans TextEdit.app et Notes.app sur macOS Catalina 10.15.3 (19D76). Cela se produit avec n'importe quel type d'insertion d'image (par exemple, presse-papiers, glisser-déposer).

Je ne sais pas comment l'empêcher de se produire lorsque vous ajoutez une image au texte, mais peut-être obtiendrez-vous ce que vous voulez en insérant une image au milieu du texte formaté ; alors le texte avant/après conserve la mise en forme originale. Une chose qui a bien fonctionné pour moi est de taper un espace, puis d'appuyer une fois sur la touche de la flèche gauche avant de coller une image.

Je vais entrer dans plus de détails ci-dessous sur ce que j'ai appris.


La police revient toujours à Helvetica 12 pt après avoir collé une image, quelle que soit la configuration que j'ai essayée. Cela semble être une valeur par défaut du système, impossible à changer. Bien que je n'aie pas encore essayé d'utiliser TinkerTool pour modifier les paramètres de police système.

Regarder dans les fichiers RTFD

Je ne suis pas sûr comment regarder l'état en mémoire de NSTextView mais si nous enregistrons le fichier sur le disque alors nous pouvons inspecter le contenu du fichier RTF. Nous recherchons une directive de taille de police comme \fs12 ou \fs24. En fait, le format de fichier RTF original ne prend pas en charge les images, donc nous parlons vraiment de bundles .rtfd (Répertoire de format de texte enrichi) ici.

Au début, j'ai comparé deux fichiers, l'un où aucune image n'avait encore été collée, et un autre où l'image avait été collée puis retirée. Fait intéressant, les contenus des fichiers étaient identiques ! Cela suggère qu'il n'y a pas de modification intentionnelle des paramètres de mise en forme du texte, et que le retour à Helvetica 12 pt est directement lié à la présence de l'image.

Ensuite, j'ai inspecté un fichier dans lequel j'avais ajouté la même image plusieurs fois. La même directive d'image se répète sans aucune directive de mise en forme du texte. En particulier, \fs12 n'apparaît jamais dans le fichier.

\f0\fs48 \cf0 Bonjour le monde
\fs24 {{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}
{{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}
{{\NeXTGraphic Pasted Graphic.png \width500 \height520 \appleattachmentpadding0 \appleembedtype0 \appleaqc}}

Sur la base de cela, je peux déterminer de manière assez concluante que ce comportement de collage est lié à la manipulation en mémoire du texte formaté. En d'autres termes, cela semble être une particularité de l'implémentation d'Apple de NSTextView.

Il me semble peu probable que ce soit le comportement que les ingénieurs logiciels d'Apple ont intenté de créer. S'il était intentionnel, alors il serait hors sujet de spéculer sur les raisons. Mais comme il semble s'agir d'un bug, je vous dirigerais vers la page d'Apple où vous pouvez envoyer des commentaires pour macOS.

Pistes possibles pour des investigations futures

Comment pouvons-nous inspecter directement le contenu du presse-papiers ? Y a-t-il des informations de mise en forme de texte associées à une image dans le presse-papiers ?

Nous pourrions probablement identifier un cas plus petit pour reproduire ce problème en manipulant directement un NSMutableAttributedString. Cela fait un moment que je n'ai pas développé pour Mac, mais je me concentrerais probablement sur appendAttributedString: ou insertAttributedString:àlindex:.

0 votes

Bon travail d'investigation.

0voto

Je n'ai jusqu'à présent trouvé aucune possibilité de contourner ce bug. Le problème survient indépendamment de la technique utilisée, que je fasse glisser une image ou utilise le presse-papiers, ou retire toute mise en forme du presse-papiers avant de coller. Il semble donc que les utilisateurs ne puissent rien y faire et qu'Apple doit le corriger.

Peut-être que pour certains, le script Apple suivant peut être utile si vous ajoutez des images uniquement à la fin et exécutez ce script avec un raccourci juste après avoir inséré une image, c'est-à-dire tant qu'elle reste sélectionnée et avant de continuer à écrire :

propriété maTailleDePolice : 14 -- Réglez la valeur sur votre taille de police par défaut comme défini dans les préférences de TextEdit
tell application "TextEdit"
    tell front document
        tell son dernier caractère
            set size to myFontSize
        end tell
    end tell
end tell

ou de manière plus générique lors de l'insertion d'images n'importe où dans le document texte et tant que l'image insérée reste sélectionnée (ou que vous la sélectionnez à nouveau vous-même)

propriété maTailleDePolice : 14 -- Réglez la valeur sur votre taille de police par défaut comme définie dans les préférences de TextEdit

en cours d'exécution {}
    dire à l'application "System Events" de régler {ixBeg, ixEnd} sur la valeur de l'attribut "AXSelectedTextRange" de ¬
        la zone de texte 1 de la zone de défilement 1 de la fenêtre avant du processus d'application "TextEdit"
    dire à l'application "TextEdit"
        régler la taille des caractères du document de devant de ixBeg à ixEnd sur maTailleDePolice
    end tell
end run

Ce dernier est inspiré par ccstone @ TextEdit set size only sets current text, not subsequent text

Notez que j'ai trouvé les deux AppleScripts fonctionnant sous macOS 13.6.1 (Ventura) (sur un Mac Silicon).

0voto

benwiggy Points 21125

Si vous avez copié l'image à partir d'une autre application de texte, comme Word ou Pages, vous pouvez également copier la mise en forme du texte à la position de l'image dans ce document.

Pour éviter que cela se produise, utilisez Coller et conserver le style, qui est Shift Alt Command V

Cependant, vous avez raison que cela se produit même lorsque aucune mise en forme de texte n'existe. La réponse la plus probable est qu'il s'agit d'un bug - un aspect indésirable et négligé du code.

1 votes

Cela s'appliquerait à copier à partir d'une application, mais je ne pense pas que cela s'applique à la capture d'une image dans le presse-papiers. Si vous utilisez la méthode standard sur Mac pour capturer une partie de l'écran en tant qu'image puis la coller dans le document TextEdit, l'image ne provient pas d'une application. Cependant, il s'agit d'un bon point.

0 votes

Si j'utilise Coller et Conserver le style, ce qui est collé est le nom du fichier png que j'ai copié dans le presse-papiers. Ou si je prends une capture d'écran directement dans le presse-papiers, cela ne fonctionne pas - seule la fonction Coller est autorisée. Donc cela ne fonctionne pas dans le scénario de mhuka.

0 votes

L'option de menu Coller et conserver le style n'est pas disponible pour moi lorsque le presse-papiers contient uniquement des données d'image. L'option de menu ne devient disponible que lorsque mon presse-papiers contient également du texte, ce qui n'est pas ce qu'a décrit l'OP.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X