
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
такжедобавлено непосредственно перед сноской: как показано здесь:
В идеале, конечно, a
также следовало бы использовать какой-то счетчик (я тоже пробовал это, но это привело к появлению множества сообщений об ошибках с отсутствующими аргументами, поэтому я отказался от этого и решил лучше спросить экспертов...) так чтоеслиесли бы было добавлено более одной дополнительной сноски подряд, она бы все равно работала правильно [и была бы менее грубой, чем сейчас].
решение1
Необязательный аргумент команды \footnote
ожидаетцелое числосодержащий номер сноски, а не текстовое представление этого номера. Поэтому вам следует использовать
\footnote[\value{footnote}]{#1}
вместо
\footnote[\thefootnote]{#1}
Добавление
Итак, откуда взялась лишняя «а»? Чтобы понять это, давайте рассмотрим шаг за шагом, как ошибочный код
\footnote[\thefootnote]{#1}
переваривается TeX. Макрос \thefootnote
расширяется (в контексте, в котором OP использовал его) до 1a
, поэтому (La)TeX видит эквивалент
\footnote[1a]{...}
Но, как уже было сказано, он ожидает, что необязательный аргумент будет содержать целочисленное значение; это целочисленное значение локально назначается выделенному счетчику (либо footnote
, mpfootnote
в зависимости от контекста) внутри \@xfootnote
внутренней команды. Код для этого назначения (эквивалентно)
<counter> = #1\relax
что в нашем случае становится
<counter> = 1a\relax
Но a
завершает целочисленную константу 1
, а следовательно, и присваивание; в этот момент a
токен интерпретируется как команда набрать символ «a» по горизонтали (то есть, текущий) режим. И вот мы здесь.
решение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
Это хороший пример краткосрочного мышления. Ваше решение вызовет больше проблем, чем решит. Как вы будете отмечать новые сноски следующей редакции?
Если вам необходимо отобразить изменения между двумя версиями документа, укажите »diff« между document-version-1.tex и document-version-2.tex, причем последняя версия является последней.
Пожалуйста, посмотрите на 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