我有一組 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}