Quais argumentos de `\includegraphics` não podem ser definidos de antemão?

Quais argumentos de `\includegraphics` não podem ser definidos de antemão?

Da documentação do graphicxpacote:

A maioria das keyvalchaves usadas no graphicxpacote também podem ser definidas usando o comando \setkeysfornecido pelo keyvalpacote.

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 as keyvalteclas 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 pgfkeyspacote e passe aquelas que ele não reconhece para um \includegraphicscomando. 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

insira a descrição da imagem aqui

Observe que isso funciona para as chaves widthe height, mas não para a scalechave. Isso não é um problema em si - tenho um método para lidar com a scalechave separadamente - mas gostaria de saber quais outras chaves requerem tratamento especial. Daí a minha pergunta:

Quais chaves do \includegraphicscomando 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 \includegraphicsantes 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 angleand 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, \includegraphicsessencialmente 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 cliptambém devem ser listadas, consulte

http://www.latex-project.org/cgi-bin/ltxbugs2html?pr=graphics/2890

informação relacionada