tikz フォント スタイルのフォント サイズ マクロ

tikz フォント スタイルのフォント サイズ マクロ

tikzpictureドキュメント内の複数の に使用する tikz スタイルのセットがあります。これらのスタイルは にあります。の前に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で未定義の制御シーケンスが発生します。eg を使用すると問題なく動作しますが、明らかに何か間違っています。どうすればこれを修正できますか?\node [inner] ...font=\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}

ここに画像の説明を入力してください

関連情報