Какие аргументы `\includegraphics` нельзя задать заранее?

Какие аргументы `\includegraphics` нельзя задать заранее?

Из документации пакета graphicx:

Большинство ключей, keyvalиспользуемых в graphicxпакете, также можно установить с помощью команды, \setkeysпредоставляемой пакетом keyval.

Например, предположим, что вы хотите, чтобы все файлы, включенные в текущий документ, были масштабированы до 75% ширины строк текста, тогда можно выполнить следующую команду:

\setkeys{Gin}{width=0.75\textwidth} 

Вот ‘Gin’имя, используемое для keyvalклавиш, связанных с «Включением графики». Все последующие \includegraphicsкоманды (в пределах одной группы или среды) будут действовать так, как если бы они [width=0.75\textwidth]были указаны, в дополнение к любым другим настройкам клавиш, фактически заданным в необязательном аргументе.

Я пытаюсь использовать это для создания аргумента, который принимает ключи с помощью пакета pgfkeysи передает те, которые он не распознает, в \includegraphicsкоманду. Вот игрушечный рабочий пример:

\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}

с выходом

введите описание изображения здесь

Обратите внимание, что это работает для клавиш widthи height, но не для scaleклавиши . Это не проблема сама по себе — у меня есть метод для обработки scaleклавиши отдельно — но я хотел бы узнать, какие еще клавиши требуют особой обработки. Отсюда мой вопрос:

Какие клавиши команды \includegraphicsне могут быть установлены глобально?

решение1

Великолепная документация, не правда ли:-)

В общем, настройка ключей — это более или менее просто создание макроопределений, поэтому те, которые вы не можете задать заранее, — это те, которые инициализируются до \includegraphicsобработки ключей. Если взглянуть на код (как ни странно, более показательный, чем документация), то единственная соответствующая инициализация — это

   \@tempswafalse

а ключи, которые используют этот логический флаг, — это просто angleи scale.

Причина флага в том, что большинство бэкендов включения графики могут "нативно" масштабировать изображение, поэтому если масштаб используется сам по себе, он передается в код драйвера бэкенда, но если изображение уже было повернуто, а затем повернутое изображение масштабируется, \includegraphicsпо сути, вставляет \scalebox{}{\rotatebox{...вокруг базового включения изображения. Возможно, это можно было бы обработать по-другому, чтобы ваш пример с масштабированием работал, но это было давно:-)

По несколько иным причинам clipтакже следует перечислить, см.

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

Связанный контент