
Da documentação do graphicx
pacote:
A maioria das
keyval
chaves usadas nographicx
pacote também podem ser definidas usando o comando\setkeys
fornecido pelokeyval
pacote.Por exemplo, suponha que você queira que todos os arquivos incluídos no documento atual sejam dimensionados para 75% da largura das linhas de texto, então pode-se emitir o seguinte comando:
\setkeys{Gin}{width=0.75\textwidth}
Aqui
‘Gin’
está o nome usado para askeyval
teclas associadas à 'Inclusão de gráficos'. Todos os comandos seguintes\includegraphics
(dentro do mesmo grupo ou ambiente) agirão como se[width=0.75\textwidth]
tivessem sido especificados, além de quaisquer outras configurações de chave fornecidas no argumento opcional.
Estou tentando usar isso para criar um argumento que aceite chaves usando o pgfkeys
pacote e passe aquelas que ele não reconhece para um \includegraphics
comando. Aqui está um exemplo de funcionamento de um brinquedo:
\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}
com saída
Observe que isso funciona para as chaves width
e height
, mas não para a scale
chave. Isso não é um problema em si - tenho um método para lidar com a scale
chave separadamente - mas gostaria de saber quais outras chaves requerem tratamento especial. Daí a minha pergunta:
Quais chaves do \includegraphics
comando não podem ser definidas globalmente?
Responder1
Documentação brilhante, não é :-)
Em geral, definir chaves é mais ou menos apenas fazer definições de macro; portanto, aquelas que você não pode definir antecipadamente são aquelas que são inicializadas \includegraphics
antes de processar as chaves. Olhando para o código (estranhamente mais revelador que a documentação), a única inicialização relevante é
\@tempswafalse
e as chaves que usam esse sinalizador booleano são apenas angle
and scale
.
A razão para o sinalizador é que a maioria dos back-ends de inclusão de gráficos podem dimensionar "nativamente" a imagem, portanto, se a escala for usada por si só, ela será passada para o código do driver de back-end, mas se a imagem já tiver sido girada e depois girada a imagem é dimensionada, \includegraphics
essencialmente insere um \scalebox{}{\rotatebox{...
em torno da inclusão básica da imagem. Talvez pudesse ter sido tratado de forma diferente para que seu exemplo de escala funcionasse, mas isso foi há muito tempo :-)
Por razões ligeiramente diferentes clip
também devem ser listadas, consulte
http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=graphics/2890