考虑以下 LaTeX 代码,其中包含一个索引条目my index
。
\documentclass{scrartcl}
\usepackage{showidx}
\begin{document}
Hello, world!\index{myindex}
\end{document}
排版如下,索引关键字显示在边距中:
\usepackage{showidx}
如果删除或注释掉该行:
\documentclass{scrartcl}
% \usepackage{showidx}
\begin{document}
Hello, world!\index{myindex}
\end{document}
index 关键字从边缘消失:
使用包的标签也存在类似的机制showlabels
:
\documentclass{scrartcl}
\usepackage{showlabels}
\begin{document}
Hello, world!\label{mylabel}
\end{document}
得出的结果为:
而删除或注释掉该行\usepackage{showlabels}
则会产生如下结果:
问题
边注是否有类似的机制?例如,请考虑以下包含边注的 LaTeX 代码:
\documentclass{scrartcl}
\begin{document}
Hello, world!\marginpar{A margin note.}
\end{document}
该代码排版如下:
是否可以轻松隐藏所有边注?更复杂的是,是否可以为边注分配标识符(这样多个注释可以共享一个标识符),然后仅隐藏与某些标识符关联的注释?
一个假定的例子
一段假定的 LaTeX 代码,其中边注被分配了标识符:
\documentclass{scrartcl}
\usepackage{lipsum}
\begin{document}
\lipsum[1][1-4]\marginpar[tempnote]{1st margin note}
\lipsum[2][1-4]\marginpar{2nd margin note}
\lipsum[3][1-4]\marginpar[tempnote]{3nd margin note}
\end{document}
这将产生:
\usepackage{hidemarginpar}[tempnote]
现在在序言中添加假定的一行:
\documentclass{scrartcl}
\usepackage{hidemarginpar}[tempnote]
\usepackage{lipsum}
\begin{document}
\lipsum[1][1-4]\marginpar[tempnote]{1st margin note}
\lipsum[2][1-4]\marginpar{2nd margin note}
\lipsum[3][1-4]\marginpar[tempnote]{3nd margin note}
\end{document}
将产生:
答案1
你的想法是
\usepackage{hidemarginpar}[tempnote]
很难实现,因为人们应该\marginpar
意识到这个“标签”(所有的风险都来自内核宏的重新定义)。最好从头开始用代码来定义新的边注。
\documentclass{article}
\makeatletter
\newcommand*{\newmarginstuff}[1]{%
\expandafter\@ifdefinable\csname @my@marg@#1\endcsname
{\expandafter\let\csname @my@marg@#1\endcsname=\iftrue}%\fi
}
\newcommand*{\includemarginstuff}[1]{%
\@bsphack\expandafter\let\csname @my@marg@#1\endcsname=\iftrue\@esphack
} %\fi
\newcommand*{\excludemarginstuff}[1]{%
\@bsphack\expandafter\let\csname @my@marg@#1\endcsname=\iffalse\@esphack
} %\fi
\newcommand*{\marginstuff}[2][]{%
\if\relax\detokenize{#1}\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{\marginpar{#2}}%
{\csname @my@marg@#1\endcsname\marginpar{#2}\fi}%
}
\makeatother
\newmarginstuff{foo}
\newmarginstuff{baz}
\begin{document}
\parskip2ex
Text text text text text text text
\marginstuff[foo]{1st foo}
text text text text text text text text text
text text text text text text text text text
Text text text text text text text
\marginstuff{generic}
text text text text text text text text text
text text text text text text text text text
\excludemarginstuff{foo}
Text text text text text text text
\marginstuff[foo]{2nd foo}
text text text text text text text text text
text text text text text text text text text
Text text text text text text text
\marginstuff[baz]{1st baz}
text text text text text text text text text
text text text text text text text text text
\end{document}