Я хотел бы использовать затенение в своей графике TikZ вместе с standalone
пакетом и XeLaTeX, но по какой-то причине это не работает, если я пытаюсь использовать новую версию 3.0.0 (Скачать здесь). Любая другая комбинация, которую я пробовал, работает для меня (например, используйте article
class/ pdflatex
/ lualatex
/ TikZ
2.10).
(Я использую полностью обновленную версию TeX Live 2013.)
МВЭ
\documentclass{standalone}
%\documentclass{article} % would work
\usepackage{tikz}
\usetikzlibrary{shadings}
\begin{document}
\tikz \draw[top color=red] (0,0) rectangle (2,1);
\end{document}
Выход
Ожидаемый результат
Вопрос
Как избежать этой проблемы и какой пакет/класс ее вызывает?
решение1
Я подтверждаю, что это регрессия и я могу ее воспроизвести.
PGF 3.0.0 поставляется с большим количеством изменений в области затенения и xelatex. Эти изменения активируют полный набор функций затухания, затенения и т. д., как это делает pdflatex. Тот факт, что он работает только для определенных классов документов, является плохим сюрпризом.
РЕДАКТИРОВАТЬ
Я исправил ошибку в версии PGF для разработчиков; она войдет в состав следующей стабильной версии.
Кандидата можно загрузить по адресуhttp://pgf.sourceforge.net/
Следующее, вероятно, лучше подойдет для системы тикетов, но поскольку я начал изучать баг, я могу задокументировать свои шаги здесь. Возможно, какой-нибудь эксперт по водителям низкого уровня возьмется за это.
Я обнаружил, что это вызвано кодом, полученным в результате \pgfsys@vertshading
, а точнее, полученным сегментом кода PDF
7 0 obj
<<
/Matrix [1 0 0 1 72 -72]
/Subtype /Form
/Length 15
/Resources 8 0 R
/FormType 1
/Type /XObject
/BBox [-72 72 28 172]
>>
stream
0 G 0 g /Sh sh
endstream
PGF 2.10 произвел еще одну отрицательную трансформацию (часть с 1 0 0 1.. cm
).
<<
/Matrix [1 0 0 1 72 -72]
/Subtype /Form
/Length 37
/Resources 7 0 R
/FormType 1
/Type /XObject
/BBox [-72 72 28 172]
>>
stream
0 G 0 g q 1 0 0 1 -72 72 cm /Sh sh Q
endstream
Я вручную пропатчил полученный pdf; если я ввожу эти отрицательные сдвиги, результат будет правильным. В качестве альтернативы, если я пропатчу /Matrix
и/BBox
7 0 obj
<<
/Matrix [1 0 0 1 0 0]
/Subtype /Form
/Length 15
/Resources 8 0 R
/FormType 1
/Type /XObject
/BBox [0 0 100 100]
>>
stream
0 G 0 g /Sh sh
endstream
это тоже работает. Интересно, что значение 100 100
доступно как размер в \pgfsys@vertshading
; это ограничивающий прямоугольник в координатах pgf где-то глубоко в системе. Я экспериментировал некоторое время, но так и не понял проблему; я не знаю, как сюда входит "72".
Обратите внимание, что pdflatex генерирует 0 0 100 100
как ограничивающий прямоугольник с матрицей идентичности (правильной). Использование article
класса и xelatex
также создает это значение.
Возможно, какой-нибудь гуру в разработке драйверов устройств сможет пролить свет на этот вопрос; я уверен, что это как-то связано с чем-то глубоко в специфической для Latex программе pgfutil ( pgfutil-latex.def
).