当我将此图表添加到我的回忆录文档中时
% Requires \usetikzlibrary{shadows,positioning,backgrounds}
\centering
\begin{tikzpicture}[x=11.8mm,y=8mm]
% some colors
\colorlet{even}{cyan!60!black}
\colorlet{odd}{orange!100!black}
\colorlet{links}{red!70!black}
\colorlet{back}{yellow!20!white}
% some styles
\tikzset{
box/.style={
minimum height=5mm,
inner sep=.7mm,
outer sep=0mm,
text width=10mm,
text centered,
font=\small\bfseries\sffamily,
text=#1!50!black,
draw=#1,
line width=.25mm,
top color=#1!5,
bottom color=#1!40,
shading angle=0,
rounded corners=2.3mm,
drop shadow={fill=#1!40!gray,fill opacity=.8},
rotate=0,
},
link/.style={-latex,links,line width=.3mm},
plus/.style={text=links,font=\footnotesize\bfseries\sffamily},
}
% Pascal's triangle
% row #0 => value is 1
\node[box=odd] (p-0-0) at (0,0) {1};
\foreach \row in {1,...,14} {
% col #0 => value is 1
\node[box=odd] (p-\row-0) at (-\row/2,-\row) {1};
\pgfmathsetmacro{\value}{1};
\foreach \col in {1,...,\row} {
% iterative formula : val = precval * (row-col+1)/col
% (+ 0.5 to bypass rounding errors)
\pgfmathtruncatemacro{\value}{\value*((\row-\col+1)/\col)+0.5};
\global\let\value=\value
% position of each value
\coordinate (pos) at (-\row/2+\col,-\row);
% odd color for odd value and even color for even value
\pgfmathtruncatemacro{\rest}{mod(\value,2)}
\ifnum \rest=0
\node[box=even] (p-\row-\col) at (pos) {\value};
\else
\node[box=odd] (p-\row-\col) at (pos) {\value};
\fi
% for arrows and plus sign
\ifnum \col<\row
\node[plus,above=0mm of p-\row-\col]{+};
\pgfmathtruncatemacro{\prow}{\row-1}
\pgfmathtruncatemacro{\pcol}{\col-1}
\draw[link] (p-\prow-\pcol) -- (p-\row-\col);
\draw[link] ( p-\prow-\col) -- (p-\row-\col);
\fi
}
}
\begin{pgfonlayer}{background}
% filling and drawing with the same color to enlarge background
\path[draw=back,fill=back,line width=5mm,rounded corners=2.5mm]
( p-0-0.north west) -- ( p-0-0.north east) --
(p-14-14.north east) -- (p-14-14.south east) --
( p-14-0.south west) -- ( p-14-0.north west) --
cycle;
\end{pgfonlayer}
\end{tikzpicture}
此包不起作用
\usepackage{hyperref}
\hypersetup{colorlinks,linkcolor={blue},citecolor={blue},urlcolor={red}}
当我移除包时,图表看起来不错。我该如何解决这个问题并同时获得它们(参考和图表)?
答案1
别说
\global\let\value=\value
您需要选择除\value
任何其他现有宏之外的其他宏,以便以后隐式或显式地使用。
当你使用 时\pgfmathsetmacro
,TeX 会将宏定义为你所说的任何内容,即使宏已经存在。我不确定
\global\let\value=\value
旨在执行此操作,但它正在执行的操作是将当前值分配给宏全球\value
。这会破坏文档中所有后续的 的使用。由于所有交叉引用都依赖于此,因此它自然会破坏所有后续的交叉引用。
在选择宏名称时 - 尤其是将其设为全局时 -基本的要么以包括检查的方式定义它们,要么自己检查所选择的名称是否安全。
LaTeX 的\newcommand
和\newenvironment
包含检查,所以和 也xparse
包含。、、等不包含,因此也不包含依赖于它们的 PGF 命令。因此,这些需要特别小心,并且只应在无法使用 LaTeX 替代方案时使用。\NewDocumentCommand
\NewDocumentEnvironment
\def
\edef
\xdef
\gdef
更多解释请参阅我对同一问题不同症状的回答。