如何使新环境表现得像现有环境?(第 2 部分:尾注和评论)

如何使新环境表现得像现有环境?(第 2 部分:尾注和评论)

先前的帖子我提到我尝试创建一个交替表现为脚注、尾注或注释(即隐藏)的环境。感谢那些回答上述问题的人的帮助,我现在能够通过使用以下两种技术之一来定义一个表现得像脚注环境的新环境:

\documentclass{article}
\usepackage{environ}
\NewEnviron{mynote}{\footnote{\BODY}}
\begin{document}
Hello\begin{mynote}world\end{mynote}
\end{document}

或者等价地

\documentclass{article}
\newenvironment{mynote}{\footnote\bgroup}{\egroup}
\begin{document}
Hello\begin{mynote}world\end{mynote}.
\end{document}

不幸的是,对脚注有效的方法对尾注和评论无效。以下两段代码(第一段使用第二种技术用于尾注,第二段使用第一种技术用于评论)甚至无法编译。

\documentclass{article}
\usepackage{endnotes}
\newenvironment{mynote}{\endnote\bgroup}{\egroup}
\begin{document}
Hello\begin{mynote}world\end{mynote}.
\theendnotes
\end{document}

\documentclass{article}
\usepackage{comment}
\usepackage{environ}
\NewEnviron{mynote}{\begin{comment}\BODY\end{comment}}
\begin{document}
Hello\begin{mynote}world\end{mynote}
\end{document}

为什么对脚注有效的技术对尾注和评论无效?我该怎么办?

答案1

我不明白为什么要使用环境。我最好的办法是使用命令

\documentclass{article}
\usepackage{endnotes}

\makeatletter
% p for `perhaps'
\newcommand{\pfootnote}{\csname aad@footnote@\aad@footnotekind\endcsname}
\newcommand{\footnotekind}[1]{\def\aad@footnotekind{#1}}

\let\aad@footnote@footnote\footnote
\let\aad@footnote@endnote\endnote
\newcommand\aad@footnote@comment[2][]{}
\def\aad@footnotekind{footnote} % default
\makeatother

%% footnotes are footnotes
\footnotekind{footnote}

\begin{document}

Hello\pfootnote{world}

\footnotekind{endnote}

Hello\pfootnote{world}

\footnotekind{comment}

Hello\pfootnote{world}

\bigskip
\hrule
\bigskip

\theendnotes

\end{document}

当然,你不会改变文档中间的脚注类型;你可能会在

\footnotekind{footnote}
\footnotekind{endnote}
\footnotekind{comment}

第一个是默认的(但我在序言中使用它以获得更大的清晰度)。

enter image description here

(注意:为了显示结果,示例图像的高度已被人为降低。)

如果你真的想要一个环境,也可以添加上面的宏

\usepackage{environ}
\NewEnviron{mynote}{\expandafter\pfootnote\expandafter{\BODY}}

发行时自动添加尾注的版本\footnotekind{endnote}。添加一些内容以执行\AtEndDocument;如果选择脚注或注释,则不会有任何内容,因为未定义相应的顺序。

\documentclass{article}
\usepackage{endnotes}

\makeatletter
% p for `perhaps'
\newcommand{\pfootnote}{\csname aad@footnote@\aad@footnotekind\endcsname}
\newcommand{\footnotekind}[1]{%
  \def\aad@footnotekind{#1}%
  \AtEndDocument{\@nameuse{aad@footnoteatend@#1}}%
}

\let\aad@footnote@footnote\footnote
\let\aad@footnote@endnote\endnote
\newcommand\aad@footnote@comment[2][]{}
\def\aad@footnoteatend@endnote{\theendnotes}

\def\aad@footnotekind{footnote} % default
\makeatother

%% footnotes are endnotes
\footnotekind{endnote}

\begin{document}

Hello\pfootnote{world}

Hello\pfootnote{world again}

Hello\pfootnote{world and again}

\end{document}

相关内容