tikz 字體樣式中的字體大小宏

tikz 字體樣式中的字體大小宏

我有一組 tikz 樣式,用於tikzpicture文檔中的多個 s 。這些樣式位於nodestyle.tex.我可以選擇透過\newcommand{\trnodesize}{1em}before修改這些樣式的大小\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\trnodefontsize內部進行定義tikzpicture。這種重新定義發生在一個群組內並且確實不是更改外部設定。

除非使用,否則 的設定\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}

在此輸入影像描述

相關內容