我\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}