![用于在表格单元格中打开或关闭粗体功能的宏](https://linux22.com/image/396547/%E7%94%A8%E4%BA%8E%E5%9C%A8%E8%A1%A8%E6%A0%BC%E5%8D%95%E5%85%83%E6%A0%BC%E4%B8%AD%E6%89%93%E5%BC%80%E6%88%96%E5%85%B3%E9%97%AD%E7%B2%97%E4%BD%93%E5%8A%9F%E8%83%BD%E7%9A%84%E5%AE%8F.png)
我已经开始查看包裹卡路里,所以我的示例与该包相关。但是,我的问题是通用的,也适用于其他环境。
在文档中(这篇TUGboat文章)作者定义了一个方便的宏来打开和关闭单元格中的颜色:
\def\c{\ifx\cals@bgcolor\empty % Colour switch (on of)
\def\cals@bgcolor{gray}
\else \def\cals@bgcolor{} \fi}
看来这个宏的一个先决条件是它cals@bgcolor{}
被定义。如果没有定义,第一次使用宏时,你必须执行它两次,它才能像我预期的那样工作(打开定义的颜色)。
我如何扩展宏来测试未定义(?)和空值?
该宏用在单元格或单元格范围(和/或行)之前和之后:
\brow
\c\cell{G}\c
\cell{H}
\c\cell{I}\c
\erow
它打开单元格 G 的颜色,关闭单元格 H 的颜色,打开单元格 I 的颜色,并在下一行之前关闭。
我设法扩展宏来关闭和打开单元格边框:
\def\bb{\ifx\cals@borderB\relax % Border switch (on of)
\def\cals@borderB{0pt}
\else \let\cals@borderB\relax\fi}
和填充:
\def\rp{\ifdim\cals@paddingR=0.0pt\relax % Right padding switch (off-on)
\cals@setpadding{Ag}
\else \setlength{\cals@paddingR}{0pt}\fi}
我尝试对粗体实施相同的解决方案(在单元格上打开和关闭粗体或其他属性)。但是,我无法找到如何测试是否\bfseries
已设置。
\def\b{\ifx\<bold>\<false> % Is \bfseries on or off?
\bfseries % If its off, turn it on
\else \mdseries\fi} % If its on, turn it off
我该如何编写这个宏来测试是否启用粗体,如果条件为假,则启用粗体。如果条件为真,\mdseries
则启用?
答案1
当前字体系列存储在中\f@series
,您可以测试它是否包含 ab(表示粗体):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand\switchbold{}
{
\tl_if_in:cnTF { f@series } {b}
{
\mdseries
}
{
\bfseries
}
}
\ExplSyntaxOff
\begin{document}
blblblb \switchbold bold \switchbold not bold
\end{document}