用于在表格单元格中打开或关闭粗体功能的宏

用于在表格单元格中打开或关闭粗体功能的宏

我已经开始查看包裹卡路里,所以我的示例与该包相关。但是,我的问题是通用的,也适用于其他环境。

在文档中(这篇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}

在此处输入图片描述

相关内容