![预定义命令中的脚注在结果中仅出现一次](https://linux22.com/image/272805/%E9%A2%84%E5%AE%9A%E4%B9%89%E5%91%BD%E4%BB%A4%E4%B8%AD%E7%9A%84%E8%84%9A%E6%B3%A8%E5%9C%A8%E7%BB%93%E6%9E%9C%E4%B8%AD%E4%BB%85%E5%87%BA%E7%8E%B0%E4%B8%80%E6%AC%A1.png)
我遇到过这种情况,几个人一起生成一份文档,并且经常使用预定义的短语(命令)。这种工作流程会导致脚注重复。以下 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
不知道下面的解决方法能不能满足你的需要。
nolist
加载包时删除该选项acronym
,否则不会打印“首字母缩略词列表”。- 将
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}