Tengo un conjunto de estilos tikz que uso para varios tikzpicture
mensajes 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\sffamily
línea da como resultado secuencias de control indefinidas en ambas \node [inner] ...
líneas. Usar eg font=\small\sffamily
funciona 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 tikzpicture
esta configuración.
Está bien cargar lo general nodestyle.tex
en el preámbulo y hacer las \renewcommand
definiciones para \trnodesize
y \trnodefontsize
dentro tikzpicture
. Tales redefiniciones ocurren dentro de un grupo y nonocambiar la configuración exterior.
La configuración del \trnodesize
no implica ningún cambio mnodesize
a menos que \setlength
se utilice. Dado que las longitudes se utilizan en los registros, un cambio de longitud dentro de un grupo no se filtra fuera del grupo.
\providecommand
Los 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 \setupmytikz
comando:
\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}