更改 tikzpicture 环境中的字体的正确方法是什么?

更改 tikzpicture 环境中的字体的正确方法是什么?

我希望能够在tikzpicture环境中测量一些尺寸。

以下是 MWE,用来说明我的意图:

\documentclass {article}
\RequirePackage [utf8] {inputenc}

\RequirePackage {tikz}
\RequirePackage {expl3}

\begin {document}
    %\begin {tikzpicture}
        \ExplSyntaxOn
            \dim_new:N \height
            \settoheight {\height} {\fontsize {18} {21.6} \selectfont something}
            \dim_log:N \height
        \ExplSyntaxOff
    %\end {tikzpicture}
\end {document}

tikzpicture被注释掉时,height可以正确测量。
但是,一旦tikzpicture启用环境, 的height值就会为0.0pt

从日志和互联网上的类似问题来看,发生这种情况是因为tikzpicture环境将字体设置为nullfont,其中没有任何字符。
因此,无法测量字形的尺寸。

我尝试tikzpicture通过添加以下内容来更改环境中的字体:

\renewcommand {\encodingdefault} {OT1}
\renewcommand {\familydefault} {\rmdefault}
\renewcommand {\rmdefault} {cmr}
\renewcommand {\seriesdefault} {m}
\renewcommand {\shapedefault} {n}

\fontencoding {\encodingdefault}
\fontfamily {\familydefault}
\fontseries {\seriesdefault}
\fontshape {\shapedefault}
\selectfont

不幸的是,这并没有改变结果。

唯一能改变结果的就是添加\font\nullfont=cmr18
但这种方法有缺点:

  1. 它确实看起来是一个糟糕的、不安全的代码。
  2. heightdisabledtikzpicture和 enabled tikzpicture+ new之间有所不同nullfont
  3. 看起来像重新定义nullfont并且也忽略了这部分代码:\fontsize {18} {21.6}

我怎样才能将字体更改为全局字体,仅在内部执行这些测量时tikzpicture然后再将其更改回来nullfont

答案1

如果其他人觉得当前问题与以下问题太相似,我很乐意将其删除这个问题。有两个问题。首先,tikzpicture 中的文本(不在节点中)将被吞噬。所以你需要中断tikzpicture。然后,如果你测量组内的东西,你需要以某种方式将东西广播到外面。我会在这里使用,\global但当然还有其他选择。

\documentclass{article}
\RequirePackage[utf8]{inputenc}

\RequirePackage{tikz}
\RequirePackage{expl3}

\begin{document}
    \begin{tikzpicture}
    \begin{pgfinterruptpicture}%
        \ExplSyntaxOn
            \dim_new:N \height
            \settoheight{\height}{\fontsize{18}{21.6} \selectfont something}
            \global\height=\height
            \dim_log:N \height          
        \ExplSyntaxOff
    \end{pgfinterruptpicture}%  
    %\node{\the\height}; %<- requires that the height is smuggled out of the    group
    \end{tikzpicture}

    The height of the text inside the \texttt{tikzpicture} is \the\height. Note
    that we had to globalize it because otherwise the height would be local.

\end{document}

在此处输入图片描述

相关内容