Macro de tamanho de fonte no estilo de fonte tikz

Macro de tamanho de fonte no estilo de fonte tikz

Eu tenho um conjunto de estilos tikz que uso para vários tikzpicturearquivos no meu documento. Esses estilos estão em nodestyle.tex. Opcionalmente, posso modificar o tamanho desses estilos fazendo \newcommand{\trnodesize}{1em}before \input{nodestyles}. Quero fazer o mesmo com o tamanho da fonte, mas não consigo fazer funcionar (veja abaixo).

documento.tex:

\documentclass{article}

\usepackage{tikz}

% For use in nodestyle.tex
\newlength{\mnodesize}

\begin{document}

% Default node styling.
\begin{tikzpicture}
\input{nodestyle}
\node [inner] at (0, 0) {1};
\end{tikzpicture}

% Smaller nodes (and text).
\begin{tikzpicture}
\newcommand{\trnodesize}{1em}
% This currently has no effect:
\newcommand{\trnodefontsize}{\tiny}
\input{nodestyle}
\node [inner] at (0, 0) {2};
\end{tikzpicture}

\end{document}

nodestyle.tex:

% Want a default value; most of the time 1.5em is ideal.
\providecommand{\trnodesize}{1.5em}
\setlength{\mnodesize}{\trnodesize}
% Again, usually \normalsize is fine.
\providecommand{\trnodefontsize}{\normalsize}

\tikzset{
  inner/.style = {
    align=center,
    inner sep=0pt,
    white,
    solid,
    fill=red,
    text centered,
    text width=\mnodesize,
    minimum height=\mnodesize,
    font=\sffamily,
    % Doesn't work:
    % font=\trnodefontsize\sffamily,
  },
}
% So the next \newcommand{\trnodesize}{...} and
% \newcommand{\trnodefontsize}{...} will work.
\let\trnodesize\undefined
\let\trnodefontsize\undefined

Remover o comentário da font=\trnodefontsize\sffamilylinha resulta em sequências de controle indefinidas em ambas \node [inner] ...as linhas. Usar, por exemplo, font=\small\sffamilyfunciona bem, mas claramente estou fazendo algo errado. Como posso consertar isso?

Imagino que haverámuitomelhores maneiras de alcançar o tipo de funcionalidade que procuro e aceitarei alegremente alternativas como respostas - mas ainda gostaria de saber por que o procedimento acima não funciona.

Responder1

No meu ponto de vista o grande erro é usar \input{...}with tikzpicturecom esta configuração.

Não há problema em carregar o general nodestyle.texno preâmbulo e fazer as \renewcommanddefinições for \trnodesizee \trnodefontsizeinside tikzpicture. Tais redefinições ocorrem dentro de um grupo e nãonãoalterar configurações externas.

A configuração de \trnodesizenão leva à alteração de mnodesizea menos que \setlengthseja usado. Como comprimentos são usados ​​em registros, uma mudança de comprimento dentro de um grupo não vaza para fora do grupo!

\providecommandas configurações serão ignoradas se o comando já estiver definido.

\providecommand{\trnodesize}{1.5em} 
\setlength{\mnodesize}{\trnodesize}
% Again, usually \normalsize is fine.
\providecommand{\trnodefontsize}{\normalsize}

\tikzset{
  inner/.style = {
    align=center,
    inner sep=0pt,
    white,
    solid,
    fill=red,
    text centered,
    text width=\mnodesize,
    minimum height=\mnodesize,
    font=\sffamily,
    % Doesn't work:
    font={\trnodefontsize\ttfamily},
  },
}
% So the next \newcommand{\trnodesize}{...} and
% \newcommand{\trnodefontsize}{...} will work.
%\let\trnodesize\undefined
%\let\trnodefontsize\undefined

Para tornar as redefinições efetivas, use um \setupmytikzcomando:

\documentclass{article}

\usepackage{tikz}

% For use in nodestyle.tex
\newlength{\mnodesize}

\input{nodestyle}

\newcommand{\setupmytikz}[2]{%
  \renewcommand{\trnodesize}{#1}%
  \setlength{\mnodesize}{\trnodesize}%
  \renewcommand{\trnodefontsize}{#2}%
}


\begin{document}


% Default node styling.
\begin{tikzpicture}
\node [inner] at (0, 0) {1};
\end{tikzpicture}

% Smaller nodes (and text).
\begin{tikzpicture}
  \setupmytikz{1em}{\tiny}
  \node [inner] at (0, 0) {2};
\end{tikzpicture}

\begin{tikzpicture}
  \node [inner] at (0, 0) {1};
\end{tikzpicture}


\end{document}

insira a descrição da imagem aqui

informação relacionada