问题

问题

问题

是否可以为命令编写一个条件语句,以根据命令在文档中出现的位置来改变它们?

示例情况

当命令出现在正文中时,它应该是

  • 颜色为粗体和黑色。

当它出现在标题中(分段命令:\section \subsection, \paragraph等)时,

  • 使其加粗并呈红色。

在下面的代码中,我\keyword在标题\section和正文中使用了该命令。我希望根据文本所在的位置更改文本的外观。这意味着我需要访问两个条件:

  1. 对于任何类型的切片命令
  2. 对于身体

示例代码

\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}

\newcommand{\keyword}[1]{\textbf{#1}}

\begin{document}
\section{Product \keyword{rabunza}}
You can find the information about \keyword{rabunza} on our website.
\end{document}

问题扩展

我在这里扩展了这个问题以包括titlesec/titletoc/tocloft兼容性。

答案1

挂接产生章节标题的命令,最简单的方法是使用sectsty

\documentclass{article}
\usepackage{sectsty}
\usepackage{xcolor}

\allsectionsfont{\colorkeywordstrue}
\newif\ifcolorkeywords

\DeclareRobustCommand{\keyword}[1]{%
  \textbf{\ifcolorkeywords\color{red}\fi #1}%
}

\begin{document}
\section{Product \keyword{rabunza}}
You can find the information about \keyword{rabunza} on our website.
\end{document}

在此处输入图片描述

它是如何sectsty工作的?它为分段命令添加了钩子(了解如何添加钩子并不重要)。这些钩子被称为

  • \allsectionsfont,影响所有标题
  • \<level>font这会影响指定的级别(\sectionfont\subsectionfont等等)。

这些名字是由于这个包被认为可以轻松改变标题的格式,但是钩子只是在正确的时刻执行并且可以包含任何内容。

在本例中,我们添加了声明\colorkeywordstrue,使条件\ifcolorkeywords返回 true。默认情况下,它返回 false;钩子是成组执行的,因此\ifcolorkeywords一旦排版完节标题, 的含义就会恢复。

答案2

sectsty提供与分段单元的挂钩,您可以在其中更改字体。我们\keyword也可以偷偷重新定义:

在此处输入图片描述

\documentclass{article}
\usepackage{xcolor,sectsty}

\newcommand{\sectionkeyword}{% Update \keyword in sectional unit
  \renewcommand{\keyword}[1]{\textcolor{red}{\bfseries ##1}}}
\newcommand{\keyword}[1]{\textbf{#1}}
\sectionfont{\normalfont\Large\bfseries\sectionkeyword}

\begin{document}
\section{Product \keyword{rabunza}}
You can find the information about \keyword{rabunza} on our website.
\end{document}

这可以以非常类似的方式扩展到其他部门单位。请参阅sectsty文档了解有关其他单元的字体宏的信息。

相关内容