tikz: относительное расположение прирезанных областей - PullRequest
2 голосов
/ 22 октября 2019

Я пытаюсь составить несколько диаграмм Тикса в большую обзорную диаграмму, но у меня возникают трудности с выравниванием подизображений относительно их родительских объектов и друг с другом.

Суб-изображения обрезаютсяв форме прямоугольника из другого рисунка тикз, используя scope и clip:

red-blue rectangles

\documentclass[crop,tikz]{standalone}
\usepackage{relsize, xcolor, tikz}

\begin{document}

\begin{tikzpicture}[x=0.04cm,y=-0.04cm]

    \begin{scope}[xshift=0, yshift=0, local bounding box=scopeAouter]
        \fill [black!40, rounded corners=5] (0, 0) rectangle ++(60, 70);  % bounding rectangle
        \begin{scope}[xshift=0, yshift=0, scale=.5, local bounding box=scopeAinner]
            \clip [rounded corners=3] (-30, -5) rectangle ++(100, 50);  % cannot change this line
            % dummy pattern
            \fill [red!60] (-100,-100) rectangle (100, 100);
            \fill [blue!60] (-100, -100) -- (100, -100) -- (100, 100) -- cycle;
        \end{scope}
    \end{scope}

    \begin{scope}[xshift=80, yshift=0, local bounding box=scopeBouter]
        \fill [black!40, rounded corners=5] (0,0) rectangle ++(60, 70);  % bounding rectangle
        \begin{scope}[xshift=0, yshift=0, scale=1, local bounding box=scopeBinner]
            \clip [rounded corners=3] (4, 2) rectangle ++(50, 25);  % cannot change this line
            % dummy pattern
            \fill [red!60] (-100,-100) rectangle (100, 100);
            \fill [blue!60] (-100, -100) -- (100, -100) -- (100, 100) -- cycle;
        \end{scope}
    \end{scope}

\end{tikzpicture}

\end{document}

Цель состоит в том, чтобы выровнять красно-синийпрямоугольники приятно внутри соседних серых ограничивающих рамок (то есть равные поля слева, справа и сверху, с местом для текста внизу).

«граничные условия»: внутренние команды отсечения имеют потенциально различные смещения x / y иразмеры и нельзя изменить , но они имеют известное соотношение (в примере 2: 1). Я пытался компенсировать xshift, yshift и scale внутренних областей, но это не сработало, как ожидалось.

Объекты внутренней области необходимы для обрезки и предположенияв том, что они не могут быть изменены. Внешние области были моей попыткой решить проблему, но они не обязательно должны быть там.

Поиск в Интернете Я нашел следующие релевантные ссылки, но не смог адаптировать ни одну из них к своему варианту использования. с внутренней областью действия.


Редактировать

Уточнение: причина, по которой я используюОбрезка во внутренних областях - по сути, потому что я хочу обрезать подизображения определенным образом, а не менять их положение. На самом деле я хочу обрезать и масштабировать изображения, но без какого-либо смещения.

В настоящее время я достигаю желаемого результата, сохраняя подизображения в виде png и включая их позже (возможно, это объясняет, почему я не могу изменитькоординаты внутренних клипов, потому что если бы я это сделал, мне пришлось бы изменить все подизображения)

enter image description here

1 Ответ

5 голосов
/ 23 октября 2019

Вы можете выровнять их, сдвинув вкладки к некоторой привязке внедренного изображения, например shift={(scopeAouter.north)}. Я бы тоже не вкладывал эти локальные ограничительные рамки.

\documentclass[crop,tikz]{standalone}

\begin{document}

\begin{tikzpicture}[x=0.04cm,y=-0.04cm]

    \begin{scope}[xshift=0, yshift=0, local bounding box=scopeAouter]
        \fill [black!40, rounded corners=5] (0, 0) rectangle ++(60, 70);  % bounding rectangle
    \end{scope}
    \begin{scope}[shift={(scopeAouter.north)}, scale=.5, local bounding box=scopeAinner]
        \clip [rounded corners=3] (-50, 10) rectangle ++(100, 50);
        % dummy pattern
        \fill [red!60] (-100,-100) rectangle (100, 100);
        \fill [blue!60] (-100, -100) -- (100, -100) -- (100, 100) -- cycle;
    \end{scope}

    \begin{scope}[xshift=80, yshift=0, local bounding box=scopeBouter]
        \fill [black!40, rounded corners=5] (0,0) rectangle ++(60, 70);  % bounding rectangle
    \end{scope}
    \begin{scope}[shift={(scopeBouter.north)}, scale=1, local bounding box=scopeBinner]
        \clip [rounded corners=3] (-25, 5) rectangle ++(50, 25);
        % dummy pattern
        \fill [red!60] (-100,-100) rectangle (100, 100);
        \fill [blue!60] (-100, -100) -- (100, -100) -- (100, 100) -- cycle;
    \end{scope}

\end{tikzpicture}

\end{document}

enter image description here

Конечно, мне пришлось компенсировать относительные масштабные коэффициенты, удваивая координаты. Почему вы используете разные масштабные коэффициенты?

...