上下文感知命令?

上下文感知命令?

\important在整个文档中使用命令来标记文本的重要部分,尽管它最初是粗体和红色的,但最后我选择将其样式简单地设为粗体。

然而,在边注中使用了相同的命令\important,并且我想在边注中保留红色文本。

我如何(重新)定义命令,使其在常规文本(粗体)和边注(粗体和红色)中的行为有所不同?例如,在 CSS 中,我想做的事情将按以下方式完成:

.important { font-weight: bold; }
.margin-note .important { color: red; }

答案1

LaTeX 不像 CSS 那样定义上下文。但是有一些钩子可以以类似的方式利用。当边注文本即将开始时,\marginpar就会执行这个钩子。\@marginparreset

\documentclass{article}
\usepackage{xcolor}
\usepackage{etoolbox} % for convenience

\makeatletter
% patch \@marginparreset so it sets a conditional to true
% (it is executed when TeX has started a box, so it's local)
\apptocmd{\@marginparreset}{\toggletrue{marginpar}}{}{}
\newtoggle{marginpar}
\makeatother

% conditional commands should be robust
\newrobustcmd{\important}[1]{%
  \textcolor{\iftoggle{marginpar}{red}{blue}}{#1}%
}

\begin{document}

\important{This is important}\marginpar{\important{This is too}}

\important{This is important}\marginpar{\important{This is too}}

\end{document}

enter image description here

相关内容