宏包安装_[LaTeX 尝试] diagbox 宏包 - 为空单元格绘制斜表线

本文介绍了如何使用diagbox宏包在 LaTeX 中绘制斜线表头,详细阐述了该宏包的功能,并提供实例展示如何设置宽度和高度,以及如何通过定义新命令简化操作。
摘要由CSDN通过智能技术生成

本文已加入专栏文章目录,归入「进阶使用」文章系列。

在表格中,有时我们需要以斜表线来表示当前单元格无数据、无需填写等。本文尝试使用 diagbox 宏包绘制这种斜表线。

67a74abff8c2afab7f82a64f6cb5d6fc.png

diagbox 的既有功能

diagbox 是刘海洋实现并维护的, 用于制作斜线表头的宏包。先用两个文档中的例子看看它的「设计使用场景」。

4883c35558da791dff2c6870c996d239.png

3a8a87a4cabdbc2351d0b70963bbc1d1.png

绘制斜表线

经过简单尝试(diagbox{}{}),结合宏包文档阅读,我们大概知道,需要手动设置宽度和高度。

4059af8ff73efa78a8b04b729d1a90c6.png
diagbox 宏包文档第 6 节「已知问题和未来版本」

以下是一个尝试:

d6c4fae06c75d3e6fa0c329cba5230f5.png

上面的尝试,包含斜表线的单元格是空的,不包含任何文字内容。继续尝试,绘制斜表线的同时,保留单元格内容。根据对齐方式,这个尝试包含三个部分。

d93adeb28e6df3261e68eaf0fc50e2f9.png

写成宏包参数

虽然在第一次尝试中已经定义了新命令,但它在第二个尝试中又变得冗长起来。抛开具体实现,我们来给命令 diagbox 设计几个参数,让它可以胜任斜表线的绘制:

innerwidthOf  = <paired text>       建议输入同列中最宽单元格的内容
heightOf      = <dimen>             建议输入同行中最高单元格的高度,默认为 "1line"
text          = <paired text>       单元格包含的内容,默认为空
align         = l|c|r               对齐方式,默认为 "l"(left,靠左对齐)

如果这些参数都加上了,就可以这样绘制斜表线:

307516b33b494fa05832750c5663267d.png

注意,这里的新参数,在设计上有不足(如,widest 接受内容而 highest 接受距离),在功能上也超出了 diagbox 宏包的设计使用场景。新参数的设计和实现,只是一项带有强烈个人偏好的尝试。

最后附上相关的实现。

% usepackage{xpatch}
makeatletter
newififdiagbox@cellEmpty@

define@key{diagbox}{widest}{%
  ifdiagbox@cellEmpty@
    setkeys{diagbox}{innerwidth=widthof{#1}}%
    PackageWarning{diagbox}{innerwidth is set to thediagbox@wd}%
  fi}

define@key{diagbox}{highest}{%
  ifdiagbox@cellEmpty@
    setkeys{diagbox}{height=#1}%
  fi}

define@key{diagbox}{text}{%
  defdiagbox@text{#1}}

define@key{diagbox}{align}{%
  in@{#1}{l, c, r}%
  ifin@
    defdiagbox@align{#1}%
  else
    PackageError{diagbox}%
      {The value of key "text" must be one of "l", "c", and "r".}%
  fi}

xpatchcmd{diagbox@double}{%
  setkeys{diagbox}{dir=NW,#1}%
}{%
  ifrelaxdetokenize{#2}relax
    ifrelaxdetokenize{#3}relax
      diagbox@cellEmpty@true
      setkeys{diagbox}{highest=1line, align=l, text=@empty}%
    fi
  fi
  setkeys{diagbox}{dir=NW, #1}%
  ifdiagbox@cellEmpty@
    rlap{makebox
      [dimexprdiagbox@wd-diagbox@insepl-diagbox@inseprrelax]%
      [diagbox@align]%
      {diagbox@text}}%
  fi
}{}{ddt}
makeatother
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值