
Aus der Dokumentation des graphicx
Pakets:
Die meisten der
keyval
im Paket verwendeten Schlüssel können auch mit dem vom Paket bereitgestelltengraphicx
Befehl festgelegt werden .\setkeys
keyval
Angenommen, Sie möchten beispielsweise, dass alle in das aktuelle Dokument aufzunehmenden Dateien auf 75 % der Breite der Textzeilen skaliert werden. In diesem Fall könnten Sie den folgenden Befehl eingeben:
\setkeys{Gin}{width=0.75\textwidth}
Hier
‘Gin’
ist der Name, der für diekeyval
Tasten verwendet wird, die mit „Grafikeinbindung“ verknüpft sind. Alle folgenden\includegraphics
Befehle (innerhalb derselben Gruppe oder Umgebung) verhalten sich so, als wären sie[width=0.75\textwidth]
angegeben worden, zusätzlich zu allen anderen Tasteneinstellungen, die tatsächlich im optionalen Argument angegeben sind.
Ich versuche, damit ein Argument zu erstellen, das Schlüssel mit dem pgfkeys
Paket akzeptiert und die, die es nicht erkennt, an einen \includegraphics
Befehl weiterleitet. Hier ist ein funktionierendes Beispiel:
\documentclass[convert]{standalone}
\usepackage{graphicx,pgfkeys}
\newcommand{\mykeyset}[1]{\pgfqkeys{/me}{#1}}
\mykeyset{graphic options/.code={}}
\mykeyset{set graphic option/.style={graphic options/.append code=#1}}
%Set up a handler for unknown keys
\mykeyset{.unknown/.code = %
{%
\edef\unknownkey{\pgfkeyscurrentname}%
\mykeyset{set graphic option/.expand once = {\expandafter\setkeys\expandafter{\expandafter G\expandafter i\expandafter n\expandafter}\expandafter{\unknownkey=#1}}}%
}%
}
\newcommand{\myincludegraphics}[2][]{\begingroup%
\mykeyset{#1}%
\mykeyset{graphic options}%
\includegraphics{#2}%
\endgroup%
}
\begin{document}
\myincludegraphics[width = 5cm, height = 8cm]{example-image}
\myincludegraphics[scale=0.5]{example-image}
\myincludegraphics{example-image}
\end{document}
mit Ausgang
width
Beachten Sie, dass dies für die Tasten und funktioniert height
, aber nicht für die scale
Taste. Das ist an sich kein Problem – ich habe eine Methode, um die scale
Taste separat zu behandeln –, aber ich würde gerne wissen, welche anderen Tasten eine besondere Behandlung erfordern. Daher meine Frage:
Welche Tastenkombinationen für den \includegraphics
Befehl können nicht global festgelegt werden?
Antwort1
Geniale Dokumentation, nicht wahr? :-)
Im Allgemeinen ist das Setzen von Schlüsseln mehr oder weniger nur das Erstellen von Makrodefinitionen. Diejenigen, die Sie nicht im Voraus setzen können, sind diejenigen, die initialisiert werden, \includegraphics
bevor die Schlüssel verarbeitet werden. Wenn man sich den Code ansieht (seltsamerweise aufschlussreicher als die Dokumentation), ist die einzige relevante Initialisierung
\@tempswafalse
und die Schlüssel, die dieses Boolesche Flag verwenden, sind einfach angle
und scale
.
Der Grund für das Flag ist, dass die meisten Backends zur Grafikeinbindung das Bild „nativ“ skalieren können. Wenn also die Skalierung allein verwendet wird, wird sie an den Backend-Treibercode weitergegeben. Wenn das Bild jedoch bereits gedreht wurde und dann das gedrehte Bild skaliert wird, \includegraphics
wird im Wesentlichen ein \scalebox{}{\rotatebox{...
um die grundlegende Bildeinbindung herum eingefügt. Vielleicht hätte es anders gehandhabt werden können, damit Ihr Skalierungsbeispiel funktioniert, aber das ist schon lange her:-)
Aus leicht unterschiedlichen Gründen clip
sollten auch aufgeführt werden, siehe
http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=graphics/2890