Schriftgrößenmakro im Tikz-Schriftstil

Schriftgrößenmakro im Tikz-Schriftstil

Ich habe eine Reihe von Tikz-Stilen, die ich für mehrere tikzpictureSchriften in meinem Dokument verwende. Diese Stile befinden sich in nodestyle.tex. Ich kann die Größe in diesen Stilen optional ändern, indem ich \newcommand{\trnodesize}{1em}vorher Folgendes mache \input{nodestyles}. Ich möchte dasselbe für die Schriftgröße tun, bekomme es aber nicht hin (siehe unten).

dokument.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

Das Entfernen der Kommentarzeichen aus der font=\trnodefontsize\sffamilyZeile führt zu undefinierten Steuersequenzen in beiden \node [inner] ...Zeilen. Die Verwendung von eg font=\small\sffamilyfunktioniert einwandfrei, aber ich mache offensichtlich etwas falsch. Wie kann ich das beheben?

Ich kann mir vorstellen, dass esvielbessere Möglichkeiten, die von mir angestrebte Funktionalität zu erreichen, und bin gerne bereit, Alternativen als Antworten zu akzeptieren – aber ich würde trotzdem gern wissen, warum das Obige nicht funktioniert.

Antwort1

Meiner Meinung nach ist die Verwendung \input{...}mit tikzpicturediesem Setup ein großer Fehler.

nodestyle.texEs ist in Ordnung, das Allgemeine in die Präambel zu laden und die \renewcommandDefinitionen für \trnodesizeund \trnodefontsizeinnerhalb vorzunehmen tikzpicture. Solche Neudefinitionen erfolgen innerhalb einer Gruppe undnichtexterne Einstellungen ändern.

Das Setzen von \trnodesizeführt nicht zu einer Änderung von, mnodesizesofern nicht \setlengthverwendet. Da Längen in Registern verwendet werden, dringt eine Längenänderung innerhalb einer Gruppe nicht nach außen!

\providecommandEinstellungen werden ignoriert, wenn der Befehl bereits definiert ist.

\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

Um die Neudefinitionen wirksam zu machen, verwenden Sie einen \setupmytikzBefehl:

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

Bildbeschreibung hier eingeben

verwandte Informationen