如何(有选择地)隐藏边注?

如何(有选择地)隐藏边注?

考虑以下 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}

在此处输入图片描述

相关内容