tikz 글꼴 스타일의 글꼴 크기 매크로

tikz 글꼴 스타일의 글꼴 크기 매크로

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

여기에 이미지 설명을 입력하세요

관련 정보