Используя LaTeX, как я могу получить список ссылок в конце каждого раздела?[закрыто]
-
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}
хотя я только догадываюсь о правильном порядке этих строк.