预定义命令中的脚注在结果中仅出现一次

预定义命令中的脚注在结果中仅出现一次

我遇到过这种情况,几个人一起生成一份文档,并且经常使用预定义的短语(命令)。这种工作流程会导致脚注重复。以下 MWE 说明了这一点:

\documentclass{scrreprt}
\usepackage{hyperref}
\newcommand{\texsx}{There is a popular website about \TeX{}: \TeX{} \textsc{StackExchange}\footnote{\url{http://tex.stackexchange.com}}}
\begin{document}
\chapter{First}
\section{A}
\texsx{}
\section{B}
\texsx{}
\chapter{Second}
\texsx{}
\end{document}

使用fixfoot稍微减少脚注的数量,但它们却打印在每一页上,这不是所希望的结果:

\documentclass{scrreprt}
\usepackage{hyperref}
\usepackage{fixfoot}
\urldef\texsxurl\url{http://tex.stackexchange.com}
\DeclareFixedFootnote{\texsxfootnote}{\texsxurl}
\newcommand{\texsx}{There is a popular website about \TeX{}: \TeX{} \textsc{StackExchange}\texsxfootnote{}}
\begin{document}
\chapter{First}
\section{A}
\texsx{}
\section{B}
\texsx{}
\chapter{Second}
\texsx{}
\end{document}

作为一个更聪明的解决方案,我尝试使用(或误用)acronym它的包。

\documentclass{scrreprt}
\usepackage{hyperref}
\usepackage[footnote,nolist]{acronym}
\begin{acronym}
  \acro{texsx}[\TeX{} \textsc{StackExchange}]{\url{http://tex.stackexchange.com}}
\end{acronym}
\newcommand{\texsx}{There is a popular website about \TeX{}: \ac{texsx}}
\begin{document}
\chapter{First}
\section{A}
\texsx{}
\section{B}
\texsx{}
\chapter{Second}
\texsx{}
\end{document}

它可以工作,但是无法生成常规的首字母缩略词列表。对于带有脚注的命令,是否有更好的解决方案,这些命令应该打印一次,或者每章只打印一次?

答案1

您可以模拟首字母缩略词制作包。以下是如何仅在短语首次出现时显示脚注的方法。

\documentclass{book}
\usepackage{url}

\newcommand{\definephrase}[3]{%
 % #1 = control sequence
 % #2 = text
 % #3 = footnote for first appearance
 \gdef#1{#2\footnote{#3}\gdef#1{#2}}%
}

\newcommand{\definephraseurl}[2]{%
  % #1 = control sequence
  % #2 = text
  % #3 = url (it's an apparent argument, processed
  %      by \urldef)
  \gdef#1{#2\footnote{\csname url\string#1\endcsname}%
          \gdef#1{#2}}%
  \expandafter\urldef\csname url\string#1\endcsname\url}

\definephrase{\texsx}
  {There is a popular website about \TeX{}: \TeX{} \textsc{StackExchange}}
  {\url{http://tex.stackexchange.com}}

\definephraseurl{\foo}
  {A foo site}
  {http://foo.foo.foo/%7Efoo}

\begin{document}
\chapter{First}
\section{A}
\texsx{}

\foo{}

\section{B}
\texsx{}

\foo{}

\chapter{Second}
\texsx{}

\foo{}
\end{document}

\definephraseurl当 URL 中有特殊字符时可以使用。

答案2

不知道下面的解决方法能不能满足你的需要。

  1. nolist加载包时删除该选项acronym,否则不会打印“首字母缩略词列表”。
  2. acronym环境放在后面\begin{document},否则您会收到错误。

在下面的 MWE 中,我添加了colorlinks加载时的选项,hyperref因为我喜欢这种方式,但您可以更改它。

\documentclass{scrreprt}
\usepackage[colorlinks]{hyperref}
\usepackage[footnote]{acronym}
\newcommand{\texsx}{There is a popular website about \TeX{}: \ac{texsx}}
\begin{document}
\chapter*{List of Acronyms}
\begin{acronym}
  \acro{texsx}[\TeX{} \textsc{StackExchange}]{\url{http://tex.stackexchange.com}}
\end{acronym}
\chapter{First}
\section{A}
\texsx{}
\section{B}
\texsx{}
\chapter{Second}
\texsx{}
\end{document} 

在此处输入图片描述

相关内容