
Из документации пакета 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