tikzpicture
내 문서의 여러 에 사용하는 tikz 스타일 세트가 있습니다 . 이러한 스타일은 에 있습니다 nodestyle.tex
. \newcommand{\trnodesize}{1em}
before를 수행하여 해당 스타일의 크기를 선택적으로 수정할 수 있습니다 \input{nodestyles}
. 글꼴 크기에 대해서도 동일한 작업을 수행하고 싶지만 제대로 작동할 수 없습니다(아래 참조).
document.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}
nodestyle.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] ...
. eg를 사용하면 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}