tikz 字体样式中的字体大小宏

tikz 字体样式中的字体大小宏

我有一组 tikz 样式,用于tikzpicture文档中的多个 s。这些样式位于 中。我可以选择通过在之前nodestyle.tex执行 来修改这些样式中的大小。我想对字体大小执行相同操作,但无法使其工作(见下文)。\newcommand{\trnodesize}{1em}\input{nodestyles}

文档.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}

节点样式.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

取消注释该font=\trnodefontsize\sffamily行会导致两\node [inner] ...行的控制序列均未定义。使用 egfont=\small\sffamily可以正常工作,但显然我做错了什么。我该如何修复此问题?

我想会有很多实现我想要的功能的更好方法,并且很乐意接受替代方案作为答案 - 但我仍然想知道为什么上述方法不起作用。

答案1

在我看来,最大的错误是使用\input{...}这种tikzpicture设置。

可以将一般性内容载入nodestyle.tex序言中,并在 内进行和\renewcommand的定义 。此类重新定义发生在组内,并且不会\trnodesize\trnodefontsizetikzpicture不是更改外部设置。

的设置\trnodesize不会导致的改变,mnodesize除非\setlength使用。由于长度是在寄存器中使用的,因此组内的长度变化不会泄漏到组外!

\providecommand如果命令已经定义,则设置会被忽略。

\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

为了使重新定义生效,请使用\setupmytikz命令:

\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}

在此处输入图片描述

相关内容