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