我希望有一种样式,使我的绘图与大写字母的高度完全相同,以便在文本行中绘制内容,即使绘图命令用于具有不同字体或大小的文本块(例如,脚注或目录)。我希望避免使用或之类的度量,em
因为ex
它们相对于大写字母的定义在字体之间不一致(请参阅大写字母的局部高度是多少?)。
获取大写字母的高度适用于\settoheight
,但不适用于 内部\tikz[<styles>]
。我猜这是因为 TikZ 解析器将字体设置为 nullfont 或类似的东西。将整个\tikz
命令包装在宏中是可行的,但使用实际的 TikZ 样式来实现相同效果会更好。可以这样做吗?
\documentclass{article}
\usepackage{tikz}
\newdimen\myLetterHeight
\tikzset{
scale to letter height/.code={%
\settoheight{\myLetterHeight}{#1}%
\pgfkeysalso{/tikz/x=\myLetterHeight, /tikz/y=\myLetterHeight, baseline=0pt}%
},
}
\newcommand*{\TikzScaleToLetterHeight}[2][X]{\begingroup%
\settoheight{\myLetterHeight}{#1}%
\pgfkeysalso{/tikz/x=\myLetterHeight, /tikz/y=\myLetterHeight, /tikz/baseline=0pt}%
#2%
\endgroup}
\begin{document}
WITH KEY: \tikz[scale to letter height=X]
\draw rectangle (1,1) node[right] {\the\myLetterHeight};
WITH MACRO: \TikzScaleToLetterHeight[X]{\tikz
\draw rectangle (1,1) node[right] {\the\myLetterHeight};}
{\Large Large: \TikzScaleToLetterHeight[X]{\tikz
\draw rectangle (1,1) node[right] {\the\myLetterHeight};}}
\end{document}
答案1
尝试此代码进行样式定义。
测量答案后面字母的高度使用盒子的高度pgf
其中解释说,对于pgf
,height("#1")
相当于\heightof{#1}
来自calc
包的 。
\documentclass{article}
\usepackage{tikz}
\newdimen\myLetterHeight
\newlength{\NewLetterHeight}
\tikzset{%
letterheight/.code={%
\pgfmathparse{height("#1")} %From https://tex.stackexchange.com/a/353904/161015
\setlength{\NewLetterHeight}{\pgfmathresult pt}
\pgfkeysalso{/tikz/x=\the\NewLetterHeight, /tikz/y=\the\NewLetterHeight, baseline=0pt}%
},
}
\newcommand*{\TikzScaleToLetterHeight}[2][X]{\begingroup%
\settoheight{\myLetterHeight}{#1}%
\pgfkeysalso{/tikz/x=\myLetterHeight, /tikz/y=\myLetterHeight, /tikz/baseline=0pt}%
#2%
\endgroup}
\begin{document}
WITH KEY: \tikz[letterheight=X]
\draw rectangle (1,1) node[right] {\the\NewLetterHeight};
WITH MACRO: \TikzScaleToLetterHeight[X]{\tikz
\draw rectangle (1,1) node[right] {\the\myLetterHeight};}
{\Large Large: \TikzScaleToLetterHeight[X]{\tikz
\draw rectangle (1,1) node[right] {\the\myLetterHeight};}}
\end{document}
最佳解决方案。样式定义可以进一步简化。
\documentclass{article}
\usepackage{tikz}
\tikzset{
scale to letter height/.style={
x={height("#1")}, y={height("#1")}, baseline=0pt
},
}
\begin{document}
WITH KEY: \tikz[scale to letter height=X]
\draw rectangle (1,1) node[right] {\pgfmathparse{height("X")}\pgfmathresult pt};
\end{document}