Подтвердить что ты не робот

Используя LaTeX, как я могу получить список ссылок в конце каждого раздела?

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

Есть ли способ, которым это можно сделать?

Совет здесь говорит

"Пакет chapterbib предоставляет optionbib, который ставит библиография в\разделе * вместо \ chapter *, что имеет смысл если есть библиография в каждом глава. Этот параметр не будет работать когда natbib также загружается; вместо, добавьте опцию natbib."

Я не понимаю, что это значит, и я попытался поэкспериментировать с тем, что я думал о вариантах. В частности, что означает "добавить параметр natbib"?

Мой следующий вопрос (который возник после того, как мой первый был решен) состоял в том, чтобы не иметь разрывов страниц между ссылками и следующим разделом.

Благодарим вас за помощь.

4b9b3361

Ответ 1

Если вы используете Biblatex, что касается со ссылкой на заголовки статей, вы можете использовать его для составления библиографий в конце разделов или разделов или даже иметь объединенную библиографию, где они разделены главой/разделом. В качестве пакета он предназначен для замены "babelbib, bibtopic, bibunits, chapterbib, cite, inlinebib, mlbib, multibib, splitbib."

Вы можете поместить библиографию после каждого раздела одним из трех способов. Сначала оберните текст вашего раздела парой \begin{refsection}/\end{refsection}, как таковой

\section{SomeSectionName}
\begin{refsection}
% your text goes here
\printbibliography
\end{refsection}
\section{NextSection}

Во-вторых, после каждого оператора \section вы помещаете оператор \newrefsection, который заканчивает предыдущий раздел и начинает новый. И снова вы возвращаетесь к следующей \section с помощью инструкции \printbibliography. Наконец, существует опция пакета refsection, которая принимает в качестве аргумента значения none, part, chapter, section или subsection. Чтобы группировать свои библиографические записи в каждом разделе в глобальной библиографии, вы вместо этого используете refsegment, используя \bibbysegment для печати всех сегментов по порядку. (\bibbysection может использоваться таким же образом и для реферирования.)

Я не знаю, сколько вам придется разделить текст, как ответ @Norman, но с небольшим экспериментом вы можете понять это.

Ответ 2

В дополнение к

\usepackage[sectionbib]{natbib}
\usepackage{chapterbib}

Вам нужно будет поместить каждый раздел в отдельный .tex файл, который вы тогда \include. Вам нужно будет запустить bibtex для каждого .tex файла отдельно.

N.B. Использование \input, а не \include позволяет избежать нежелательных разрывов страниц, но не будет создавать .aux файл, который BibTeX должен выполнить. Я посмотрел на определение \include, и я не вижу, как отключить функцию разрыва страницы, кроме как полностью отключив \clearpage. Вы можете попробовать

\let\originalclearpage=\clearpage
\def\clearpage{\relax}

сразу после вашего \begin{document}, но вам, возможно, придется вручную добавить \originalclearpage.

Ответ 3

Я не пробовал, но, читая, он предлагает:

\usepackage[sectionbib]{natbib} % Note the option in the optional argument
\usepackage{chapterbib}

хотя я только догадываюсь о правильном порядке этих строк.

Ответ 4

@celenius - если вы действительно хотите избавиться от этой страницы, вот трюк очень грязный, чтобы сделать это...

\makeatletter
\let\[email protected]@[email protected]\@[email protected]
\def\@noclearpage{\@ifnextchar\clearpage\@gobble\relax}
\def\@[email protected]#1{\[email protected]@[email protected]{#1}\@noclearpage}
\let\[email protected]@include\@include
\def\@include{\expandafter\@noclearpage\[email protected]@include}
\let\[email protected]\include
\def\include{\expandafter\@noclearpage\[email protected]}
\makeatother

В основном мы выполняем операцию с макросом \include, чтобы избавиться от всех экземпляров \clearpage, но самый чистый способ сделать это, как вы можете видеть, по-прежнему по-прежнему грязный. Это ужасно хрупкое и, скорее всего, будет работать только для класса article, поэтому, если вы используете другой \documentclass, вам не повезло. Я в основном получил это, включив \tracingcommands=1 и \tracingmacros=1 и grepping файл .log для \clearpage, чтобы я мог взломать все, что вызывается перед тем, как вставить \@noclearpage.

Я не рекомендую это решение - было бы гораздо лучше посмотреть, как работает chapterbib и исправить его правильным образом, не зависимо от \include и отдельных файлов .aux, которые он генерирует... но Я уверен, что это будет довольно сложная задача. Я предполагаю, что еще одним обходным решением было бы написать команду для эмуляции \include разбиения файлов .aux без фактического выполнения включений...


EDIT: хорошо, здесь quickie
\makeatletter
\newenvironment{auxfile}[1]{\relax
  \ifnum\@auxout=\@partaux
    \@[email protected]{auxfile environments cannot be nested or \string\include d}
    \@eha
  \else\@changeaux{#1}\fi
}{\immediate\closeout\@partaux\let\@auxout\@mainaux}
\def\@changeaux#1{%
  \immediate\write\@mainaux{\string\@input{#1.aux}}%
  \let\@auxout\@partaux
  \immediate\openout\@partaux#1.aux%
  \immediate\write\@partaux{\relax}}
\makeatother

Затем вы можете просто вставить \begin{auxfile}{foo}...\end{auxfile}, и вместо обычного файла .aux он будет использовать foo.aux. Это полностью совместимо с chapterbib. Я не думаю, что у CTAN есть что-то подобное, поэтому, возможно, я отправлю его в мини-пакет.