Macro de tamaño de fuente en estilo de fuente tikz

Macro de tamaño de fuente en estilo de fuente tikz

Tengo un conjunto de estilos tikz que uso para varios tikzpicturemensajes de correo electrónico en mi documento. Estos estilos están en nodestyle.tex. Opcionalmente puedo modificar el tamaño en esos estilos haciendo \newcommand{\trnodesize}{1em}before \input{nodestyles}. Quiero hacer lo mismo con el tamaño de fuente, pero no puedo hacerlo funcionar (ver más abajo).

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}

estilonodo.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

Descomentar la font=\trnodefontsize\sffamilylínea da como resultado secuencias de control indefinidas en ambas \node [inner] ...líneas. Usar eg font=\small\sffamilyfunciona bien, pero claramente estoy haciendo algo mal. ¿Cómo puedo arreglar esto?

Me imagino que habrámuchomejores formas de lograr el tipo de funcionalidad que busco y aceptaré con gusto alternativas como respuestas, pero aún así me gustaría saber por qué lo anterior no funciona.

Respuesta1

Desde mi punto de vista, el gran error es utilizar \input{...}con tikzpictureesta configuración.

Está bien cargar lo general nodestyle.texen el preámbulo y hacer las \renewcommanddefiniciones para \trnodesizey \trnodefontsizedentro tikzpicture. Tales redefiniciones ocurren dentro de un grupo y nonocambiar la configuración exterior.

La configuración del \trnodesizeno implica ningún cambio mnodesizea menos que \setlengthse utilice. Dado que las longitudes se utilizan en los registros, un cambio de longitud dentro de un grupo no se filtra fuera del grupo.

\providecommandLos ajustes se ignoran si el comando ya está 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 que las redefiniciones sean efectivas, utilice un \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}

ingrese la descripción de la imagen aquí

información relacionada