LaTeX
在插入新章节、节等时,能够很好地调整编号——更重要的是调整对编号的引用。
法律文件(和书籍),至少在德国,倾向于通过保持以前的编号不变来插入这些内容,但使用插入前的数字后跟小写字母(a,b,c,...),以表明某些内容已发生更改(无论是在最后一刻,还是 - 这是真正重要的情况 - 与上一版本相比)。
由于我认为很少会出现多个连续的脚注,因此我尝试了以下(非常粗糙和肮脏的)破解方法,如 MWE 中所示:
\documentclass{article}
\newcommand{\myextrafootnote}[1]{\renewcommand{\thefootnote}{\arabic{footnote}a}\footnote[\thefootnote]{#1}\renewcommand{\thefootnote}{\arabic{footnote}}}%
\begin{document}
This is the old text\footnote{foo}, followed by the new insert\myextrafootnote{New Exciting Stuff!!}, followed by the old next one.\footnote{bar}
\end{document}
遗憾的是,它并没有像我希望的那样发挥作用。虽然脚注本身看起来应该如此:
当然,理想情况下,这a
也应该来自某种形式的计数器(我也尝试过,但它变成了许多关于缺少参数的错误消息,所以我放弃了它并决定最好向专家请教......)所以如果即使连续添加多个脚注,它仍然可以正常工作 [并且不像现在这样粗糙]。
答案1
该命令的可选参数\footnote
需要整数包含脚注的编号,而不是该编号的文本表示。因此,您应该使用
\footnote[\value{footnote}]{#1}
代替
\footnote[\thefootnote]{#1}
添加
那么,多余的“a”从何而来?为了理解这一点,让我们一步步检查错误代码是如何
\footnote[\thefootnote]{#1}
被 TeX 消化。该宏\thefootnote
扩展(在 OP 使用它的上下文中)为1a
,因此 (La)TeX 认为它相当于
\footnote[1a]{...}
但是,正如前面所说,它期望可选参数包含一个整数值;这个整数值在内部命令中本地分配给专用计数器(或footnote
,mpfootnote
取决于上下文)\@xfootnote
。此分配的代码(相当于)
<counter> = #1\relax
在我们的例子中,
<counter> = 1a\relax
但是a
终止整数常数 1
,因此也终止赋值;此时,a
标记被解释为在水平方向排版“a”字符的命令(IE(当前)模式。现在我们到了。
答案2
这里增加了一个计数器,每次使用extrastuff
时都会进行步进。\myextrafootnote
但是,由于使用了26
,因此通过这种方式不可能进行更多的添加。\alph{extrastuff}
如果您需要更多附加功能,那么alphalph
增加计数器输出的包很有用!
\documentclass{book}
\newcounter{extrastuff}[chapter]
\newcommand{\myextrafootnote}[1]{%
\stepcounter{extrastuff}%
\begingroup
\renewcommand{\thefootnote}{\arabic{footnote}\alph{extrastuff}}%
\footnote[\value{footnote}]{#1}%
\endgroup
}%
\begin{document}
This is the old text\footnote{foo}, followed by the new insert\myextrafootnote{New Exciting Stuff!!}, followed by the old next one.\footnote{bar}
New however is this text\myextrafootnote{Really new Exciting Stuff!!}, followed by the old next one.\footnote{foobar}
\end{document}
更新
extrastuff
使用脚注计数器重置:
\documentclass{book}
\newcounter{extrastuff}[footnote]
\newcommand{\myextrafootnote}[1]{%
\stepcounter{extrastuff}%
\begingroup
\renewcommand{\thefootnote}{\arabic{footnote}\alph{extrastuff}}%
\footnote[\value{footnote}]{#1}%
\endgroup
}%
\begin{document}
This is the old text\footnote{foo}, followed by the new insert\myextrafootnote{New Exciting Stuff!!}, now for something completely different\myextrafootnote{Other top secret content}, followed by the old next one.\footnote{bar}
New however is this text\myextrafootnote{Really new Exciting Stuff!!}, followed by the old next one.\footnote{foobar}
\end{document}
答案3
这是短期思维的一个很好的例子。您的解决方案将导致的问题比它解决的问题更多。您将如何标记下一次修订的新脚注?
如果您需要显示文档两个修订版本之间的变化,请提供 document-version-1.tex 和 document-version-2.tex 之间的»diff«,后者是最新修订版本。
请查看,您可以通过在控制台窗口中latexdiff
输入来获取手册。基本上,它只是texdoc latexdiff
latexdiff document-version-1.tex document-version-2.tex > document-diff.tex
然后打开并编译 document-diff.tex。PDF 包含所有更改。
你可以选择删除和添加的颜色和标记。我更喜欢这样
\providecommand{\DIFadd}[1]{{\protect\color{blue}#1}} %DIF PREAMBLE
\providecommand{\DIFdel}[1]{{\protect\color{red}\protect\scriptsize{#1}}}
进入 document-diff.tex 的前言部分。
这样做的好处是可以清楚地显示文档两个版本之间的差异。无论是现在还是将来的任何修订。
如果您预计会有很多修订,请考虑使用像 git 这样的版本控制系统,然后使用 latexbatchdiff,请参见此处:https://tex.stackexchange.com/a/44092/4736