Почему следует различать \cite и \cites?

Почему следует различать \cite и \cites?

Есть ли какая-то особая причина, по которой нужно использовать \citesfor более одного bibtex-keyвместо \cite?

Учитывая следующие МВЭ:

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\let\cite\cites
\begin{document}
\cite[12]{westfahl:space}[e.g.][23]{angenendt}

\cites[12]{westfahl:space}[e.g.][23]{angenendt}
\printbibliography
\end{document}

У \let\cite\citesменя нет проблем с добавлением еще одного аргумента bibtex-keyв -команду \cite, поэтому не имеет значения, если я забуду sin \citesдля нескольких bibtex-keys.

Если это так, разве не может это быть поведением по умолчанию biblatex?

решение1

Конечно, это решение дизайна, и мы не можем спросить первоначального сопровождающего пакета, так как он больше не активен. Насколько я могу судить, разделение между обычной командой cite и multicite-command (сs) был там с самого начала.

Поведение команды \citeв biblatexзначительной степени совпадает с поведением этой команды с другими пакетами. Однако версии multicite предлагают дополнительные возможности, которые не предоставляют многие (любые?) другие пакеты.

Синтаксис команд multicite полностью обратно совместим с синтаксисом стандартных команд cite. Поэтому \let\cite\citesне создаст больше проблем, чем если бы вы использовали \citesисключительно и никогда не позволяли себе использовать \cite. (Помните, что \letвсе команды их multicite-аналоги не должны вызывать несоответствий.)

Я бы настоятельно не советовал делать multicite нормой. Поведение команд cite и multicite в biblatex настолько известно и устоялось, что его не следует менять. Наконец, команды multicite гораздо более сложны и изощренны из-за структуры аргументов, поэтому лучше использовать их только при необходимости, а не по умолчанию.

Настройка, необходимая для команды multi cite, очевидно, немного сложнее, чем для стандартных команд. Вот почему мы сначала определяем стандартные команды, а затем команды multicite сверху с помощью

\DeclareMultiCiteCommand{\cites}{\cite}{\multicitedelim}

Я предполагаю, что одной из причин, по которой было сохранено разделение, является возможность сначала определить простую команду cite, а затем дополнить ее сложной структурой multicite. Это позволяет использовать многоуровневый подход.

Однако наиболее веская причина сохранения разделения между ними заключается в том, что команда multicite гораздо более сложная и хрупкая. Природа команды multicite диктует, что она не знает заранее количество аргументов. Поэтому ей придется сканировать заранее то, что выглядит как аргументы. Несмотря на то, что это довольно надежно, существуют ситуации, когда более стабильная команда, которая знает количество своих аргументов, предпочтительнее.

Например

\cite[pre][post]{key} ["this"]

работает, потому что \citeуже прочитал все свои аргументы и поэтому знает, что ["this"]не может быть его аргументом. Но в

\cites[pre][post]{key} ["this"]

\citesне знает, что ["this"]это не один из его аргументов. Вам нужно вставить \relaxили \сказать ему прекратить сканирование: \cites[pre][post]{key}\ ["this"].

Связанный контент