我想制作动态生成的 tikz 矩阵的特定单元大胆的。我尝试了很多方法:,,,,,\bfseries
在...中使用\mathbf
\textbf
\bf
assume math mode=false
\pgfmathprintnumberto
这是我的 MWE。(请注意,我已经用替换了我的计算,\pgfmathparse{exp 2}
并且这个 MWE 只是我原始代码的一小部分。我没有添加确定哪些单元格将加粗的代码。)
\documentclass{article}
\usepackage[active, tightpage]{preview}
\usepackage{etoolbox}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{pgfplots}
\begin{document}
\let\mymatrixcontent\empty
\newcommand{\calculate}[1]{
\pgfkeys{/pgf/fpu=true}%
\pgfmathparse{exp 2}%
\pgfkeys{/pgf/fpu=false}%
\global\let\totsum\pgfmathresult%
\foreach \i in {0,...,5} {
\gappto\mymatrixcontent{A}
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{\&}%
\pgfmathprintnumberto[/pgf/number format/.cd,fixed,precision=2]{\totsum}{\fsum}%
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{\fsum}%
\gappto\mymatrixcontent{\\}
}
}
\calculate{1}
\begin{preview}
\begin{tikzpicture}
\matrix (mat) [matrix of nodes,ampersand replacement=\&]{
\mymatrixcontent
};
\end{tikzpicture}
\end{preview}
\end{document}
我需要一行这样的代码:
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{\textbf\fsum}
这使得\fsum
大胆的。
答案1
只要添加一些\expandafter
命令就可以做到。
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{%
\expandafter$\expandafter\mathbf\expandafter{\fsum}$}%
如果您\expandafter
暂时忽略这些命令,那么这基本上与 相同$\mathbf{\fsum}$
。更简单的版本\textbf{\fsum}
似乎不起作用,我不知道为什么,但也许有知识的人会发表评论:-)
。
输出
完整代码
\documentclass{article}
\usepackage[active, tightpage]{preview}
\usepackage{etoolbox}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usepackage{pgfplots}
\begin{document}
\let\mymatrixcontent\empty
\newcommand{\calculate}[1]{
\pgfkeys{/pgf/fpu=true}%
\pgfmathparse{exp 2}%
\pgfkeys{/pgf/fpu=false}%
\global\let\totsum\pgfmathresult%
\foreach \i in {0,...,5} {
\gappto\mymatrixcontent{A}
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{\&}%
\pgfmathprintnumberto[/pgf/number format/.cd,fixed,precision=2]{\totsum}{\fsum}%
\expandafter\gappto\expandafter\mymatrixcontent\expandafter{%
\expandafter$\expandafter\mathbf\expandafter{\fsum}$}%
\gappto\mymatrixcontent{\\}
}
}
\calculate{1}
\begin{preview}
\begin{tikzpicture}
\matrix (mat) [matrix of nodes,ampersand replacement=\&]{
\mymatrixcontent
};
\end{tikzpicture}
\end{preview}
\end{document}
答案2
我不知道为什么当前构造具有特定的顺序,但可以通过稍微简单的附加方法实现相同的功能。此外,fpu
此类计算不需要库,因为您要截断到两位小数,而 TeX 精度足以满足此要求。
\documentclass[tikz]{standalone}
\usetikzlibrary{matrix}
\makeatletter
\newcommand{\calculate}[1]{
\let\mymatrixcontent\empty
\pgfmathparse{exp(#1)}%
\pgfmathprintnumberto[fixed,precision=2,zerofill,
assume math mode=true]{\pgfmathresult}{\fsum}%
\let\ea\expandafter%
\foreach \i in {0,...,5} {%
\g@addto@macro\mymatrixcontent{A\&}%
\ea\g@addto@macro\ea\mymatrixcontent\ea{\ea$\ea\mathbf\ea{\fsum}$}%
%\ea\g@addto@macro\ea\mymatrixcontent\ea{\ea\textbf\ea{\fsum}}% <- For \textbf{}
\g@addto@macro\mymatrixcontent{\\}%
}%
}
\makeatother
\begin{document}
\begin{tikzpicture}
\calculate{1}
\matrix (mat) [matrix of nodes,ampersand replacement=\&]{
\mymatrixcontent
};
\calculate{4}
\matrix (mat2) at(mat.east)[anchor=west,matrix of nodes,ampersand replacement=\&]{
\mymatrixcontent
};
\end{tikzpicture}
\end{document}
\textbf
John 的答案中不起作用的原因是它\pgfmathprintnumber
默认\ensuremath
内置了数字打印机制。因此\textbf
不会渗透到数学环境中。您可以通过提供选项将其关闭assume math mode=true
。