将动态生成的 tikz 矩阵的特定单元格设为粗体

将动态生成的 tikz 矩阵的特定单元格设为粗体

我想制作动态生成的 tikz 矩阵的特定单元大胆的。我尝试了很多方法:,,,,,\bfseries在...中使用\mathbf\textbf\bfassume 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}

\textbfJohn 的答案中不起作用的原因是它\pgfmathprintnumber默认\ensuremath内置了数字打印机制。因此\textbf不会渗透到数学环境中。您可以通过提供选项将其关闭assume math mode=true

在此处输入图片描述

相关内容