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

StackOverflow https://stackoverflow.com/questions/2503555

  •  21-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Спасибо вам за вашу помощь.

Это было полезно?

Решение

Если вы используете Библиатекс, что касается цитирование названий статей, вы можете использовать его для создания библиографий в конце разделов или глав или даже создать объединенную библиографию, где они разделены главой / разделом.В качестве пакета он предназначен для замены "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, но, немного поэкспериментировав, вы сможете это выяснить.

Другие советы

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

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

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

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

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

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

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

\makeatletter
\let\O@@input@\@input@
\def\@noclearpage{\@ifnextchar\clearpage\@gobble\relax}
\def\@input@#1{\O@@input@{#1}\@noclearpage}
\let\O@@include\@include
\def\@include{\expandafter\@noclearpage\O@@include}
\let\O@include\include
\def\include{\expandafter\@noclearpage\O@include}
\makeatother

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

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


Редактировать:ладно, вот тебе на скорую руку

\makeatletter
\newenvironment{auxfile}[1]{\relax
  \ifnum\@auxout=\@partaux
    \@latex@error{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} и он будет использовать foo.aux вместо обычного .aux файл.Это полностью совместимо с chapterbib.Я не думаю, что в CTAN есть что-то подобное, поэтому, возможно, я отправлю его в виде мини-пакета.

Я этого не пробовал, но когда я прочитал, что это наводит на мысль:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top