Управлять размером шрифта в графике в LaTeX при масштабировании в minipage / subfig?

Я использую графику pgf / tikz, и мне интересно, как можно контролировать масштабирование размеров шрифта в графике при их использовании в средах minipage / subfig?

Есть ли способ вручную установить постоянный размер шрифта для графики pgf / tikz или в латексе в целом, чтобы сделать размер шрифта инвариантным к масштабированию?

В идеале, я хотел бы иметь возможность вручную указывать размер шрифта для каждого изображения или для всей графики или сред subfig / minipage?

Вот пример предлагаемого использования. Спасибо за помощь.

\begin{figure}[h]
\centering
\subfloat[Graph 1]{
    \begin{minipage}[h]{0.7\linewidth}
        \centering\beginpgfgraphicnamed{graph1}
        \input{graph1.tex}
        \endpgfgraphicnamed
        \label{fig:graph1}
    \end{minipage}}
\hspace{5pt}
\subfloat[Graph 2]{
    \begin{minipage}[h]{0.5\linewidth}
        \centering\beginpgfgraphicnamed{graph2}
        \input{graph2.tex}
        \endpgfgraphicnamed
        \label{fig:graph2}
    \end{minipage}}
\subfloat[Graph 3]{
    \begin{minipage}[h]{0.5\linewidth}
        \centering\beginpgfgraphicnamed{graph3}
        \input{graph3.tex}
        \endpgfgraphicnamed
        \label{fig:graph3}
    \end{minipage}}
\caption{Three Graphs}
\end{figure}

Возможно, за пределами minipage / subfig я могу использовать предложения из другой публикации, чтобы сделать шрифт большим, поскольку графика масштабируется с шириной страницы? В этом примере я собирался сделать первое собственное изображение, большее, а затем два маленьких изображения справа внизу рядом с их собственными подписями на одном рисунке.

Я видел несколько тегов R в вашем профиле Mica. Графика генерируется с помощью tikzDevice и подобрана в моем латексном документе.

Поэтому я создаю файлы без среды tikzpicture, чтобы я мог вручную установить там параметры. Когда я использую \begin{tikzpicture} \end{tikzpicture}, я получаю сообщение об ошибке «Размер слишком велик, я не могу работать с размерами больше примерно 19 футов. Продолжайте, и я буду использовать самое большое значение, которое я могу».. Мне нужно использовать \beginpgfgraphicnamed{} .. \endpgfgraphicnamed{}, чтобы он заработал? Не уверен, какой именно удар.

Вот образец автоматически созданного файла:

\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}

........

\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\definecolor[named]{fillColor}{rgb}{1.00,1.00,1.00}

\draw[fill=fillColor,draw opacity=0.00,] (  0.00,  0.00) rectangle (794.97,614.29);
\end{scope}

........

\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\definecolor[named]{drawColor}{rgb}{0.00,0.00,0.00}

\node[rotate= 90.00,color=drawColor,anchor=base,inner sep=0pt, outer sep=0pt, scale=  1.00] at ( 15.92,310.59) {Mackenzie Net Sales};
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (794.97,614.29);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}

Надеюсь, это будет полезно, так как весь файл составляет ~ 1000 строк, поэтому я попытался вырезать представление уникальных битов. Пожалуйста, дайте мне знать, если вам что-нибудь понадобится.

Большое спасибо,

Джей


person Jay    schedule 10.02.2010    source источник
comment
фактический код все равно будет полезен. зачем масштабируете рисунок тикз / пгф? почему бы просто не нарисовать его до нужного размера?   -  person Mica    schedule 11.02.2010


Ответы (1)


Я не совсем уверен, какова ваша цель. Чтобы изменить размер шрифта или размер остальной части изображения? Есть несколько возможностей достичь любого из них:

Мой пример коробки с большой коробкой 1 см x 1 см:

\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

Масштабируйте графические элементы, но НЕ текст:

\begin{tikzpicture}[scale=0.5]
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

\begin{tikzpicture}[scale=0.5]
    \draw (0,0) rectangle (1cm,1cm) -- +(-1,-1);
    \node(text) at (0.5cm,0.5cm) {Text};
\end{tikzpicture}

Масштабируйте только координаты (то есть, если единица измерения не указана, использовались умножения указанных векторов x, y и z):

\begin{tikzpicture}[x=5mm,y=5mm]
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

Явные длины при этом не меняются:

\begin{tikzpicture}[x=5mm,y=5mm]
    \draw (0,0) rectangle (1cm,1cm) -- +(-1cm,-1cm);
    \node(text) at (0.5cm,0.5cm) {Text};
\end{tikzpicture}

Масштабируйте все, даже текст (согласно pgfmanual, это не рекомендуется):

\begin{tikzpicture}[transform canvas={scale=0.5}]
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

Тот же эффект с использованием команд LaTeX:

\scalebox{0.5}{
\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}
}

Измените размер шрифта локально, но размер графических элементов не изменится:

\begin{tikzpicture}[font=\scriptsize]
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

Измените размер шрифта во всех последующих средах tikzpicture (\tikzset также можно использовать для установки параметров выше):

\tikzset{font=\scriptsize}
\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

\tikzset остается локальным в группах:

\begin{minipage}{\linewidth}
\tikzset{font=\scriptsize}
\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}
\end{minipage}

{
\tikzset{font=\scriptsize}
\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}
}

\begin{tikzpicture}
    \draw (0,0) rectangle (1,1) -- +(-1,-1);
    \node(text) at (0.5,0.5) {Text};
\end{tikzpicture}

Я не знаю, можете ли вы редактировать файлы graph?.tex, или они создаются? Возможно, вы сможете передать параметры программе, которая генерирует tikzpicture среду. В противном случае просто установите желаемый вариант в желаемой области, используя \tikzset.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ: если параметры (например, font=) определены локально в graph?.tex, они имеют приоритет над параметрами, определенными вне. В таком случае их просто нельзя перезаписать снаружи. Вам придется отредактировать файлы.

РЕДАКТИРОВАТЬ: этот "минимальный" пример мне подходит (показывает действительно большие "чистые продажи Маккензи", которые превышают ширину подфигуры)

\documentclass{article}

\usepackage{fix-cm}
\usepackage{subfig}
\usepackage{tikz}

\begin{document}
\tikzset{every picture/.append style={font=\fontsize{100}{120}\selectfont}}

\begin{figure}[h]
\centering
\subfloat[Graph 1]{
    \begin{minipage}[h]{0.7\linewidth}
        \centering\beginpgfgraphicnamed{graph1}
%        \input{graph1.tex}
        \endpgfgraphicnamed
        \label{fig:graph1}
    \end{minipage}}
\hspace{5pt}
\subfloat[Graph 2]{
    \begin{minipage}[h]{0.5\linewidth}
        \centering 
        \resizebox{\textwidth}{!}{

            %\beginpgfgraphicnamed{graph2}  
\begin{tikzpicture}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (79.497,61.429);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (79.497,61.429);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (79.497,61.429);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\definecolor[named]{fillColor}{rgb}{1.00,1.00,1.00}
\draw[fill=fillColor,draw opacity=0.00,] (  0.00,  0.00) rectangle (79.497,61.429);
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (79.497,61.429);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\definecolor[named]{drawColor}{rgb}{0.00,0.00,0.00}
\node[rotate= 90.00,color=drawColor,anchor=base,inner sep=0pt, outer sep=0pt, scale=  1.00] at ( 1.592,31.059) {Mackenzie Net Sales};
\end{scope}
\begin{scope}
\path[clip] (  0.00,  0.00) rectangle (79.497,61.429);
\definecolor[named]{drawColor}{rgb}{0.13,0.76,0.43}
\definecolor[named]{fillColor}{rgb}{0.31,0.94,0.66}
\end{scope}
\end{tikzpicture}
}
        %\endpgfgraphicnamed

        \label{fig:graph2}
    \end{minipage}}
\subfloat[Graph 3]{
    \begin{minipage}[h]{0.5\linewidth}
        \centering\beginpgfgraphicnamed{graph3}
%        \input{graph3.tex}
        \endpgfgraphicnamed
        \label{fig:graph3}
    \end{minipage}}
\caption{Three Graphs}
\end{figure}

\end{document}

Пожалуйста, проверьте, работает ли это и для вас. Если это так, попробуйте изменить его, пока он не перестанет работать. Что за критическое изменение?

person Meinersbur    schedule 11.02.2010
comment
Спасибо за всю информацию, Майнерсбург, это здорово. Есть несколько параметров, которыми можно управлять, например, я могу создавать файлы, чтобы вручную указать среду tikzpicture, но это вызывает ошибку. Слишком большой размер. Я не могу работать с размерами более 19 футов. - person Jay; 11.02.2010
comment
Было бы предпочтительно не редактировать внутренние части автоматически сгенерированных графических файлов. В файлах нет font =, но установка \ tikzset {font = \ scriptsize}, похоже, не действует? - person Jay; 11.02.2010
comment
Моя цель состоит в том, чтобы иметь размер шрифта 10p, скажем, для различных целей, независимо от того, как изменяется графика hte tikz (subfig, minipage, ...). В частности, в настройке, которую я разместил, шрифт больше на верхнем рисунке и маленький (и нечитаемый) на соседнем нижнем графике ... - person Jay; 11.02.2010
comment
Было бы полезно, если бы вы могли опубликовать такой input?.tex файл. Возможно, вы можете установить размер с помощью стилей. - person Meinersbur; 11.02.2010
comment
попробуйте \tikzset{every picture/.append style={font=\scriptsize}} это работает? - person Meinersbur; 11.02.2010
comment
Сейчас попробую твой пример. Не думаю, что смогу сюда что-нибудь прикрепить? Они довольно длинные, поэтому в почте не пойдут. Любые идеи? Я счастлив отправить один, большое спасибо за вашу помощь. - person Jay; 11.02.2010
comment
Это не обязательно должен быть полный файл. Поскольку он генерируется, многие вещи являются просто повторением сниппетов. Просто покажите отрывок из самых важных частей (включая начало). - person Meinersbur; 11.02.2010
comment
Нет эффекта от второго варианта \ tikzset, разместите код в вопросе сейчас - person Jay; 11.02.2010
comment
Как вам это удалось? Я просто получаю слишком большой размер. Однако после деления всех координат на 10 это сработало. - person Meinersbur; 12.02.2010
comment
И на самом деле после этого у меня все работало нормально, включая изменение размеров; ... но вы удалили / регенерировали graph?.pdf, чтобы изображение обновилось? Если вы обновили их, помните, что все, что находится за пределами \beginpgfgraphicnamed и \endpgfgraphicnamed, игнорируется, включая \tikzset-команды. Попробуйте закомментировать \beginpgfgraphicnamed и \endpgfgraphicnamed. - person Meinersbur; 12.02.2010
comment
Точно сказать не могу? Может ли что-то еще в документе делать это? Как вы разделили все координаты? Я пробовал \ tikzset внутри там безрезультатно? - person Jay; 12.02.2010
comment
Это статические файлы, созданные вне файла latex. Позвольте мне попробовать еще раз, и я сообщу. Спасибо! - person Jay; 12.02.2010
comment
Я сдвинул точку на одну цифру влево (то есть сделал вручную) - person Meinersbur; 12.02.2010
comment
Мне все еще нужно попробовать несколько вещей, может быть, есть место, где я могу опубликовать весь файл, чтобы вы могли попробовать? Вы пробуете их, когда они каким-то образом масштабируются в самом документе? - person Jay; 14.02.2010
comment
Загрузите его на каком-нибудь хостинге в один клик (например, rapidshare.com) и разместите ссылку. - person Meinersbur; 14.02.2010
comment
Немного поздно для вечеринки, но слишком большие ошибки измерения связаны с тем, что TikZ по умолчанию использует единицы измерения для координат 1 см, в то время как вывод tikzDevice предполагает 1 точку. Чтобы исправить ситуацию без сумасшедшего деления, используйте \begin{tikzpicture}[x=1pt, y=1pt] или \begin{scope}[x=1pt, y=1pt] при обработке вывода tikzDevice. - person Sharpie; 05.05.2011