问题
是否可以为命令编写一个条件语句,以根据命令在文档中出现的位置来改变它们?
示例情况
当命令出现在正文中时,它应该是
- 颜色为粗体和黑色。
当它出现在标题中(分段命令:\section \subsection, \paragraph
等)时,
- 使其加粗并呈红色。
在下面的代码中,我\keyword
在标题\section
和正文中使用了该命令。我希望根据文本所在的位置更改文本的外观。这意味着我需要访问两个条件:
- 对于任何类型的切片命令
- 对于身体
示例代码
\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}
问题扩展
答案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
文档了解有关其他单元的字体宏的信息。