Ich habe eine Reihe von Tikz-Stilen, die ich für mehrere tikzpicture
Schriften 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\sffamily
Zeile führt zu undefinierten Steuersequenzen in beiden \node [inner] ...
Zeilen. Die Verwendung von eg font=\small\sffamily
funktioniert 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 tikzpicture
diesem Setup ein großer Fehler.
nodestyle.tex
Es ist in Ordnung, das Allgemeine in die Präambel zu laden und die \renewcommand
Definitionen für \trnodesize
und \trnodefontsize
innerhalb vorzunehmen tikzpicture
. Solche Neudefinitionen erfolgen innerhalb einer Gruppe undnichtexterne Einstellungen ändern.
Das Setzen von \trnodesize
führt nicht zu einer Änderung von, mnodesize
sofern nicht \setlength
verwendet. Da Längen in Registern verwendet werden, dringt eine Längenänderung innerhalb einer Gruppe nicht nach außen!
\providecommand
Einstellungen 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 \setupmytikz
Befehl:
\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}