无法使用 TikZ 绘制与 \delimsize 匹配的线条

无法使用 TikZ 绘制与 \delimsize 匹配的线条

这个答案@egreg 提出了一种在集合符号中使用虚线的方法。

类似地,我想使用 TiZ 画出分割线。思路也是先测量高度$\delimsize\vert$。但是最后结果不对:

在此处输入图片描述

这里出了什么问题?

\documentclass{article}

\usepackage{tikz}
\usepackage{amssymb,mathtools}

\ExplSyntaxOn

\providecommand\given{}
\newcommand\setsymbol[1][]{%
    \nonscript\:
    \vbox_set:Nn \l_tmpa_box {$#1\vert$}
    \dim_set:Nn \l_tmpa_dim { \box_ht:N \l_tmpa_box }
    \tikz[baseline=.5\l_tmpa_dim,very~thick] \draw (0,0) -- (0,\l_tmpa_dim);
    \allowbreak
    \nonscript\:
    \mathopen{}}
\DeclarePairedDelimiterX\set[1]\{\}{%
    \renewcommand\given{\setsymbol[\delimsize]}
    #1
}

\ExplSyntaxOff

\begin{document}

\[
    \set{a \given \exists n \in \mathbb{N}, a^n = 1}
\]

\[
    \set[\bigg]{a \given \exists n \in \mathbb{N}, a^n = 1}
\]

\end{document}

答案1

  1. \the\dimexpr\ht\mybox+\dp\mybox给出正确的线条高度(如果\newbox\mybox \setbox\mybox=\vbox{$#1\vert$}设置则相当于非 latex3 代码)
  2. 为 tikz 绘图设置正确的基线(在baseline=\the\dp\mybox,非 latex3 中)

奖励:使用tikz绘制简单的可变宽度规则似乎有点过头了(除非应用花哨的样式)。更有效的解决方案是

  • latex2e 命令\rule,如\rule[-\box_dp:N\l_tmpa_box]{1.2pt}{\box_ht_plus_dp:N \l_tmpa_box}
  • 简单来说就是原始的\vrule,就像这样\vrule width 1.2pt height \box_ht:N\l_tmpa_box depth \box_dp:N\l_tmpa_box。不幸的是,似乎还没有(公共)latex3 函数包装\vrule
\documentclass{article}

\usepackage{tikz}
\usepackage{amssymb,mathtools}

\ExplSyntaxOn

\providecommand\given{}
\newcommand\setsymbol[1][]{%
    \nonscript\:
    \vbox_set:Nn \l_tmpa_box {$#1\vert$}
    \tikz[baseline=\dim_eval:n {\box_dp:N \l_tmpa_box}, very~thick]
      \draw (0,0) -- (0,\dim_eval:n {\box_ht_plus_dp:N \l_tmpa_box});
    \allowbreak
    \nonscript\:
    \mathopen{}
}

\DeclarePairedDelimiterX\set[1]\{\}{
    \renewcommand\given{\setsymbol[\delimsize]}
    #1
}

\ExplSyntaxOff

\begin{document}

\[
    \set{a \given \exists n \in \mathbb{N}, a^n = 1}
\]

\[
    \set[\bigg]{a \given \exists n \in \mathbb{N}, a^n = 1}
\]

\end{document}

在此处输入图片描述

相关内容