Quellenverzeichnis mit Angabe der Quellenaufführung im Text

Martin K. hinzugefügt 6 Monaten her
unbeantwortet

Hi!


Ist es in Citavi 6 möglich automatisch eine Liste auszugeben, in der alle Quellennachweise aus dem Text mit ihrer Seitenzahl dargestellt werden?

(z.B. Quellennachweis XY: S. ABC im verknüpften Word-Dok.)


Beste Grüße,

M.K.

Kommentare (3)

Foto
1

Hallo M.K.

Vielen Dank für Ihre Frage.

Ich habe Sie so verstanden, dass sich die Seitenzahl auf die Seiten Ihres eigenen Textes beziehen soll, auf welchen der Nachweis zitiert wurde (und nicht auf die Zitat-Seiten der Originalquelle).

Leider ist dies nicht automatisch möglich.

Viele Grüße

Jana

Foto
1

Ja genau so war es gemeint.

Schade, dann muss ich das wohl manuell machen.

Foto
1

Doch, das ist möglich, in Citavi 6 sogar vergleichsweise trivial.

Es ist nur vergleichsweise trivial, weil man ja nicht einfach alle Seitenzahlen ausdrucken kann, sondern angrenzende Seiten und Seitenbereiche zu einem Seitenbereich kollabiert werden müssen. Man muss dafür einen Komponentenfilter einsetzen. Es ist vollkommen egal, in was für eine Komponente man den Code einsetzt, ich nehme da immer eine Komponente ein, die ein Textelement enthält, in welches ich "Micky Maus" schreibe. Die Komponente erhält dann folgenden Code:

using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;
using SwissAcademic.Drawing;

namespace SwissAcademic.Citavi.Citations
{
	public class ComponentPartFilter
		:
		IComponentPartFilter
	{
		public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
		{
			handled = true;

			// User Options

			bool boolBackrefPages = true;
			if (!boolBackrefPages) return null;
			string backreferencesPrefixString = "\t";

			// Static Variables

			if (citation == null) return null;

			CitationManager citationManager = citation.CitationManager;
			if (citationManager == null) return null;
			if (citationManager.PlaceholderCitations == null || citationManager.PlaceholderCitations.Count == 0) return null;

			Reference reference = citation.Reference;
			if (reference == null) return null;

			var placeholderCitationsCollection = citationManager.PlaceholderCitations.ToList().Where(p => p.Reference != null && p.Reference == reference);
			if (placeholderCitationsCollection == null) return null;

			List<PlaceholderCitation> placeholderCitations = placeholderCitationsCollection.ToList();
			if (placeholderCitations == null) return null;

			// Dynamic Variables

			List<int> pages = new List<int>();
			TextUnitCollection output = new TextUnitCollection();
			string pagesString = string.Empty;

			// The Magic

			foreach (PlaceholderCitation placeholderCitation in placeholderCitations)
			{
				if (placeholderCitation == null) continue;
				if (placeholderCitation.PageInPublication == 0) continue;
				if (pages.Count == 0 || !pages.Any(i => i == placeholderCitation.PageInPublication)) pages.Add(placeholderCitation.PageInPublication);
			}

			pages.Sort();


			if (pages.Count == 0) return null;

			output.Add(new LiteralTextUnit(backreferencesPrefixString));
			output.AddRange(MergeAdjacent(pages));

			return output;
		}
		public static TextUnitCollection MergeAdjacent(List<int> pages)
		{
			TextUnitCollection output = new TextUnitCollection();

			int i = pages.Count;

			if (pages.Count < 1) return null;

			List<int> newList = new List<int>();

			int minPage = new int();
			int maxPage = new int();


			int first = pages.FirstOrDefault();
			int last = pages.Last();

			NumberingType previousPageRangeNumberingType = new NumberingType();
			bool PreviousPageRangeWasNumber = false;

			foreach (int page in pages)
			{
				int currentStartPage = page;
				int currentEndPage = page;
				if (currentEndPage == null) currentEndPage = currentStartPage;


				bool IsDiscreteRange = false;


				if (page == first)
				{
					minPage = currentStartPage;
					maxPage = currentEndPage;
				}
				else if (currentStartPage.CompareTo(minPage) >= 0 && currentEndPage.CompareTo(maxPage) <= 0)
				{
					// In this case, we don't have to do anything because the current page range is within the range defined by minPage & maxPage
				}
				else if (currentStartPage.CompareTo(maxPage + 1) < 1)
				{
					maxPage = currentEndPage;
				}
				else
				{
					IsDiscreteRange = true;
				}


				if (page == first && page == last)
				{
					output.Add(new LiteralTextUnit(minPage.ToString()));
					if (maxPage > minPage) output.Add(new LiteralTextUnit("–" + maxPage.ToString()));
				}
				else if (page == first)
				{
					output.Add(new LiteralTextUnit(minPage.ToString()));
					if (maxPage > minPage) output.Add(new LiteralTextUnit("–" + maxPage.ToString()));
				}
				else if (IsDiscreteRange && page == last)
				{
					output.Add(new LiteralTextUnit(", " + minPage.ToString()));
					if (maxPage > minPage) output.Add(new LiteralTextUnit("–" + maxPage.ToString()));
				}
				else if (IsDiscreteRange)
				{
					output.Add(new LiteralTextUnit(", " + minPage.ToString()));
					if (maxPage > minPage) output.Add(new LiteralTextUnit("–" + maxPage.ToString()));
					minPage = currentStartPage;
					maxPage = currentEndPage;;
				}
				else if (page == last)
				{
					output.Add(new LiteralTextUnit(", " + minPage.ToString()));
					if (maxPage > minPage) output.Add(new LiteralTextUnit("–" + maxPage.ToString()));
					minPage = currentStartPage;
					maxPage = currentEndPage;;
				}

			}
			return output;
		} // end MergeAdjacent
	}
}
Das ist jetzt mal das Einsteigermodell, das müsste ggf. noch angepasst werden.

Citavi sammelt die Information aber nicht immer. Ich erlaube, mir Herrn Pasch zu zitieren. "Die Eigenschaft PlaceholderCitation.PageInPublication wird vom Word-AddIn aus Performanz-Gründen nur unter bestimmten Bedingungen mit Information versehen, nämlich dann, wenn der Stil diese Information auch benötigt. Dies wird zur Zeit daran festgemacht, dass der eingestellte Stil in mindestens EINEM PlaceholderCitation-Template (Fussnote oder Im-Text) Gebrauch macht von der neuen Bedingung "Vorheriger Titeleintrag steht auf derselben Seite in der Publikation"." Da muss man dann ggf. halt irgendeine Vorlage so gestalten, dass sie diese Bedingungen verwenden.