PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zwei Inhaltsverzeichnisse



Mathias
03-01-2012, 08:50
Hallo zusammen,

ich habe ein zweisprachiges Dokument, in dem zunächst der komplette Text in englisch und dann in deutsch folgt.
Für die beiden Sprachen wird ein Inhaltsverzeichnis für genau den Text der jeweiligen Sprache benötigt. Stehen sollen die Inhaltsverzeichnisse direkt vor Beginn des Sprachabschnittes.
Jedes Inhaltsverzeichnis soll bei der Nummerierung wieder bei eins beginnen.

Bisher hatte ich dafür zwei .tex-Datein und habe dann die PDFs verschmolzen. Vorteilhafter wäre natürlich alles in einen Dokument zu haben.



\documentclass[10pt, a4paper, twoside]{article}
\usepackage{ngerman}
\usepackage[latin1]{inputenc}

\begin{document}
\selectlanguage{english}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Section one}
bla \newpage
\section{Section two}
bla \newpage

\selectlanguage{ngerman}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Kapitel eins}
bla \newpage
\section{Kapitel zwei}
bla \newpage

\end{document}


Bei dem ersten \tableofcontents sollte nur der englische Teil und beim zweiten \tableofcontents nur der deutsche Teil ausgegeben werden.
Bleibt die Frage wie dies gehen könnte.


Minitoc wäre vielleicht eine Möglichkeit, wenn es die Möglichkeit gibt, den obersten Gliederungspunkt nicht mit auszugeben und es sich wie das normale Inhaltsverzeichnis formatieren lässt.
Also das aus 1.1 Section one in der Ausgabe 1 Section one wird. Dann könnte ich mit einen übergreifenden Part die Sache lösen. Also je ein Part für englisch und deutsch und die Partnummer wird nie ausgegeben.

Vielen Dank im Voraus,

Mathias

mechanicus
03-01-2012, 17:03
AUf die schnelle ist mir nicht besseres eingefallen:


\documentclass[10pt, a4paper, twoside]{article}
\usepackage[english,ngerman]{babel}

\usepackage[latin1]{inputenc}
\usepackage{etoolbox}
\makeatletter
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}%
\expandafter\ifstrequal\expandafter{\languagename} {ngerman}%
{\def\@temp@{\addcontentsline{tocn}}}
{\def\@temp@{\addcontentsline{toc}}}
\@temp@{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\def\@tempa{ngerman}%
\expandafter\ifstrequal\expandafter{\languagename} {ngerman}%
{\def\@temp@{\addcontentsline{tocn}}}
{\def\@temp@{\addcontentsline{toc}}}
\@temp@{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
}%
\fi
\@xsect{#5}}
\newcommand\tableofcontentsngerman{%
\section*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\conten tsname}}%
\@starttoc{tocn}%
}
\makeatother
\begin{document}
\selectlanguage{english}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Section one}
bla \newpage
\section{Section two}
bla
\clearpage
\selectlanguage{ngerman}
\pagenumbering{roman}
\tableofcontentsngerman
\newpage
\pagenumbering{arabic}
\section{Kapitel eins}
bla \newpage
\section{Kapitel zwei}
bla \newpage
\end{document}

Marco

Mathias
04-01-2012, 07:18
Hallo Marco,

vielen Dank für die Idee.
Wenn ich noch ein \setcounter{section}{0} vor den deutschen Abschnitt einfüge funktioniert alles soweit.
Wenn ich ganz gerne noch hyperref verwenden würde, leider nicht mehr so gut:



\documentclass[10pt, a4paper, twoside]{article}
\usepackage[english,ngerman]{babel}

\usepackage[latin1]{inputenc}
\usepackage{etoolbox}

\usepackage[bookmarksopenlevel=section, menubordercolor={1 1 1}, linkbordercolor={1 1 1}, filebordercolor={1 1 1}, citebordercolor={1 1 1}, urlbordercolor={1 1 1}, runbordercolor={1 1 1}, hyperindex, pdfborder={0 0 0}]{hyperref} % verweise im pdf
\makeatletter
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}%
\expandafter\ifstrequal\expandafter{\languagename} {ngerman}%
{\def\@temp@{\addcontentsline{tocn}}}
{\def\@temp@{\addcontentsline{toc}}}
\@temp@{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\def\@tempa{ngerman}%
\expandafter\ifstrequal\expandafter{\languagename} {ngerman}%
{\def\@temp@{\addcontentsline{tocn}}}
{\def\@temp@{\addcontentsline{toc}}}
\@temp@{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
}%
\fi
\@xsect{#5}}
\newcommand\tableofcontentsngerman{%
\section*{\contentsname
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\conten tsname}}%
\@starttoc{tocn}%
}
\makeatother
\begin{document}
\selectlanguage{english}
\pagenumbering{roman}
\tableofcontents
\newpage
\pagenumbering{arabic}
\section{Section one}
bla \newpage
\section{Section two}
bla
\clearpage
\setcounter{section}{0}
\selectlanguage{ngerman}
\pagenumbering{roman}
\tableofcontentsngerman
\newpage
\pagenumbering{arabic}
\section{Kapitel eins}
bla \newpage
\section{Kapitel zwei}
bla \newpage
\end{document}


Bei den Lesezeichen sind nur die Englischen vorhanden und er springt von einen deutsch Kapitellink zum englischen Abschnitt. Ich weiß nicht in wie weit man hyperref das noch bei bringen kann.
Natürlich gibt es dann noch die Warnungen aufgrund doppelter Seitennummerierung und doppelt vorhandenen Kapiteln. Vielleicht gibt es ja auch noch etwas.

Selber habe ich mir gestern auch noch ein paar Gedanken gemacht und bin zu folgenden gekommen:


\documentclass[10pt, a4paper, twoside]{article}
\usepackage{ngerman}
\usepackage[latin1]{inputenc}



\makeatletter
\@addtoreset{section}{part}
\makeatother

\usepackage[bookmarksopenlevel=section, menubordercolor={1 1 1}, linkbordercolor={1 1 1}, filebordercolor={1 1 1}, citebordercolor={1 1 1}, urlbordercolor={1 1 1}, runbordercolor={1 1 1}, hyperindex, pdfborder={0 0 0}]{hyperref} % verweise im pdf
\usepackage[]{minitoc}

\begin{document}

\noptcrule
\doparttoc
\faketableofcontents
\pagenumbering{roman}
\newpage
%\part{English} % wäre Sinnvoll, wenn man es ausblenden könnte, addcontensline hat leider nicht den selben Effekt. Minitoc meldet dann keinen Part zu haben -> kein Inhaltsverzeichnis
\mtcaddpart[English] % löst das Problem für minitoc
\parttoc
\newpage
\pagenumbering{arabic}
\section{Hallo}
\subsection{a5}
Ich bin ein Satz ohne Inhalt.
\subsection{b5}
Ich bin ein Satz ohne Inhalt.
\newpage
\section{Welt}
\subsection{a4}
Ich bin ein Satz ohne Inhalt.
\subsection{b4}
Ich bin ein Satz ohne Inhalt.
\newpage
%\part{Deutsch}
\mtcaddpart[Deutsch]% aber es wird nicht wirklich ein Part gesetzt -> Section wird nicht automatisch zurückgesetzt
\setcounter{section}{0} % deswegen von Hand nötig

\pagenumbering{roman}
\mtcselectlanguage{germanb}
\parttoc
\newpage
\pagenumbering{arabic}
\section{Welta}
\subsection{a1}
Ich bin ein Satz ohne Inhalt.
\subsection{b1}
Ich bin ein Satz ohne Inhalt.
\newpage
\section{Weltb}
\subsection{a2}
Ich bin ein Satz ohne Inhalt.
\subsection{b2}
Ich bin ein Satz ohne Inhalt.
\newpage
\section{Weltc}
\subsection{a3}
Ich bin ein Satz ohne Inhalt.
\subsection{b3}
Ich bin ein Satz ohne Inhalt.
\end{document}


Funktioniert auch super, solange hyperref nicht ins Spiel kommt. Hier funktionieren zwar die Links bisher alle (natürlich sind die ganzen Warnungen trotzdem vorhanden, was im richtigen Dokument dann Ausmaße annehmen würde) die Lesezeichenanordnung ist aber leider auch komplett daneben.


Was Marco geschrieben hat verstehe ich leider nicht wirklich, dazu reicht mein Wissen lange nicht.
Wäre es aber nicht auch möglich wenn man schon ein eigenen Inhaltsverzeichnisbefehl hat, auch einen für Section und Subsection etc. zu machen? Dann wäre wirklich eine Trennung vorhanden. hyperref hätte nichts doppelt. Dann müssten auch die Links funktionieren, solange man hyperref mitteilen kann, das da ein zweites Verzeichnis ist.

Mathias

mechanicus
04-01-2012, 16:13
Hi,

zeige bitte deine kompletten Header (also Pakete) und nutzt du wirklich article?

Gruß
Marco

Mathias
06-01-2012, 06:52
Hallo,

ja ist bisher wirklich article.


\documentclass[10pt, a4paper, twoside]{article}
%################################################# ###########################
% von Hand einzustellen
\newcommand{\sprache}{EN} % Sprache / DE, EN

\input{../Standardincludes/h_use.tex}
\input{../Standardincludes/Sprachdatei.tex}
\input{../Standardincludes/h_def.tex}
\input{../Standardincludes/h_var.tex}
\input{../Standardincludes/h_head.tex}
\input{../Standardincludes/h_num.tex}

\begin{document}


Und davon die uses. In der Zeit hat sich noch das ein oder andere Eingschlichen. Im wesentlichen wird das aber alles gebraucht. Nur bei etoolbox und warum ich color und xcolor habe müsste ich nachschauen.


\usepackage{cmap} %nicht in final verwenden nur damit in PDF Umlaute kopierbar sind
\usepackage[T1]{fontenc} %nicht in final verwenden nur damit in PDF Umlaute kopierbar sind

\usepackage{ifthen}

\usepackage{ngerman}
\usepackage[latin1]{inputenc}
\usepackage{graphicx} %zum einbinden von bildern
\usepackage{vmargin} % setmarginsrb

\usepackage{tabularx}
\usepackage{longtable}
\usepackage{framed}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{colortbl}
\usepackage{fancyhdr} %für tolle fuß- und kopfzeilen
\usepackage{amssymb} %für mathe-dinge, durchmessersymbol
\usepackage[left]{eurosym}

\usepackage{fixltx2e} % hoch und tiefstellung

\usepackage{xcolor}
\usepackage{float} % benoetigt in der Titelseite

\renewcommand{\familydefault}{\sfdefault}
\usepackage{helvet} % schriftart arial
\usepackage{textfit} % fuer besonders grosse Schriften

\usepackage{fancybox} % fuer ovalbox

\usepackage[bookmarksopenlevel=section, menubordercolor={1 1 1}, linkbordercolor={1 1 1}, filebordercolor={1 1 1}, citebordercolor={1 1 1}, urlbordercolor={1 1 1}, runbordercolor={1 1 1}, hyperindex, pdfborder={0 0 0}]{hyperref} % verweise im pdf
\usepackage{nameref}
\urlstyle{same}

\usepackage{color}
\definecolor{grau}{gray}{0.30}
\definecolor{schriftgrau}{rgb}{0.60,0.60,0.60}
\definecolor{hellgrau}{rgb}{0.90,0.90,0.90}

\setlength{\fboxsep}{0pt} % Umgebung fuer Tabellenhintergrund
\setlength{\extrarowheight}{2pt} % damit Buchstaben nicht an oberen Rand stossen
\doublerulesepcolor{black}
\setlength{\arrayrulewidth}{0.2mm}
\setlength{\doublerulesep}{0.0mm}

\newlength{\Kopfzeilenbreite}
%\setlength{\Kopfzeilenbreite}{\paperwidth}
\setlength{\Kopfzeilenbreite}{\textwidth}
\addtolength{\Kopfzeilenbreite}{2.0cm}

\setmarginsrb{2.0cm}{1.0cm}{2.0cm}{1.5cm}% %ränder links oben rechts unten
{1.0cm}{1.0cm}{1.0cm}{1.0cm}% %{Kopfzeile}{Kopfgap}{Fußzeile}{Fußgap} /kopf und fußzeile, höhe, abstand /
\newlength{\Kopfzeilengroesse}
\setlength{\Kopfzeilengroesse}{\headheight}
\addtolength{\Kopfzeilengroesse}{\headsep}
\newlength{\Fusszeilengroesse}
\setlength{\Fusszeilengroesse}{1.0cm}
\addtolength{\Fusszeilengroesse}{\footskip}

\setlength{\parindent}{0em} % kein Zeileneinzug bei neuen Absatz
\setlength{\parskip}{1.0ex plus 0.5ex minus0.5ex}

\ifthenelse{\equal{\sprache}{EN}}
{
\selectlanguage{english}
} {
\selectlanguage{ngerman}
}

\setcounter{tocdepth}{4}
\setcounter{secnumdepth}{4}


\usepackage[np]{numprint}

\ifthenelse{\equal{\sprache}{DE}} { \npdecimalsign{,}\npthousandsep{.}\npproductsign{* } } { \npdecimalsign{.}\npthousandsep{,}\npproductsign{* } }

\usepackage{etoolbox}


Der Rest sind eigene Definition um oft genutzt Dinge zu vereinheitlichen.

Gruß,

Mathias

Mathias
08-01-2012, 18:35
Nochmals Hallo zusammen,

inzwischen habe ich weitergeforscht, dabei einige Dinge verworfen und einige dazu gepackt, die ich größtenteils schon für gut befinde. Ein paar Kleinigkeiten stören zwar noch, aber dazu später.



\documentclass[a4paper]{article}
\usepackage{ifthen}
\usepackage[ngerman, english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tocloft}
\usepackage[pdftex]{hyperref}


\makeatletter


\newcommand\storelabelcln[1]{\def\@currentlabelname{#1}}

\newcommand{\listinhaltdename}{Inhaltsverzeichnis}
\newlistof{sectionde}{tocde}{\listinhaltdename}

\newcommand{\sectionde}[1]{%
\refstepcounter{sectionde}
\pdfbookmark[1]{#1}{tocde.#1}
\section*{\thesectionde \quad #1}
\addcontentsline{tocde}{sectionde}{\protect\number line{\thesectionde}#1}
\storelabelcln{#1}}


\newlistentry[sectionde]{subsectionde}{tocde}{1}
\newcommand{\subsectionde}[1]{%
\refstepcounter{subsectionde}
\pdfbookmark[2]{#1}{tocde.#1}
\subsection*{\thesubsectionde \quad #1}
\addcontentsline{tocde}{subsectionde}{\protect\num berline{\thesubsectionde}#1}
\storelabelcln{#1}}


\newlistentry[subsectionde]{subsubsectionde}{tocde}{2}
\newcommand{\subsubsectionde}[1]{%
\refstepcounter{subsubsectionde}
\pdfbookmark[3]{#1}{tocde.#1}
\subsubsection*{\thesubsubsectionde \quad #1}
\addcontentsline{tocde}{subsubsectionde}{\protect\ numberline{\thesubsubsectionde}#1}
\storelabelcln{#1}}

\setcounter{tocdedepth}{3}


\let\cftmarktocde=\cftmarktoc
\let\cftbeforetocdetitleskip=\cftbeforetoctitleski p
\let\cftaftertocdetitleskip=\cftaftertoctitleskip
\let\cfttocdetitlefont=\cfttoctitlefont
\let\cftaftertocdetitle=\cftaftertoctitle

\let\l@sectionde=\l@section
\let\l@subsectionde=\l@subsection
\let\l@subsubsectionde=\l@subsubsection

\makeatother

\newcommand{\sprache}{EN} % Sprache / DE, EN

\newcommand{\verweis}[1]{%
\ifthenelse{\equal{\sprache}{EN}}%
{%
\hyperref[#1]{\nameref{#1} (section \ref*{#1}) at page \pageref*{#1}}%
}{%
\hyperref[#1]{\nameref{#1} (Abschnitt \ref*{#1}) auf Seite \pageref*{#1}}%
}%
}%





\begin{document}

\ifthenelse{\equal{\sprache}{EN}}
{
\selectlanguage{english}
} {
\selectlanguage{ngerman}
}



\pagenumbering{roman}
\pdfbookmark[0]{English}{Hauptlink EN}
\tableofcontents
\newpage
\pagenumbering{arabic}


\section{First Section}
\subsection{First Subsection}\label{subsection:first_subsection}
A first sentence.
\subsection{Second Subsection}
A second sentence.
\newpage
\section{Second Section}
\subsection{Second First Subsection}
A third sentence.
\subsection{Second Second Subsection}
A fourth sentence.\\
So see at \verweis{subsection:first_subsection}.
\newpage

\renewcommand{\sprache}{DE} % Sprache / DE, EN
\ifthenelse{\equal{\sprache}{EN}}
{
\selectlanguage{english}
} {
\selectlanguage{ngerman}
}


\pagenumbering{roman}
\pdfbookmark[0]{Deutsch}{Hauptlink DE}
\listofsectionde
\newpage
\pagenumbering{arabic}

\sectionde{Erstes Kapitel} \label{section:Erstes_Kapitel}
\subsectionde{Erstes Unterkapitel} \label{subsection:Erstes_Unterkapitel}
\subsubsectionde{Erstes Unterunterkapitel} \label{subsubsection:Erstes_Unterunterkapitel}
Ein erster Satz.
\subsubsectionde{Zweites Unterunterkapitel} \label{subsubsection:Zweites_Unterunterkapitel}
Ein zweiter Satz.
\subsectionde{Zweites Unterkapitel}
Ein dritter Satz.
\newpage
\sectionde{Zweites Kapitel}
\subsectionde{Zweites Erstes Unterkapitel}
Ein vierter Satz.
\subsectionde{Zweites Zweites Unterkapitel}
Ein fünfter Satz.\\
Verweise:\\
Vergleiche \verweis{section:Erstes_Kapitel} \\
Vergleiche \verweis{subsection:Erstes_Unterkapitel} \\
Vergleiche \verweis{subsubsection:Erstes_Unterunterkapitel} \\
Vergleiche \verweis{subsubsection:Zweites_Unterunterkapitel} \\
\end{document}


- Zweites Inhaltsverzeichnis vorhanden, komplett getrennt vom Standard
- Hyperref kennt das nicht bzgl. der bookmarks im PDF, man muss sich für eines entscheiden, man kann es aber Manuel hinzufügen
- Mit etwas gutes Willen gehen auch labels ganz gut. Dadurch das ich mir section* etc. zur Formatierung genommen habe (ich habe nicht herausfinden können, wie man die Formatierungen von section etc. gut kopieren kann, mit den \@startsection bin ich da nicht wirklich zurechtgekommen) hat man schon einen guten Ansatzpunkt. Es passt nur der Inhalt von nameref nicht, weil label den Inhalt, den ich an Section* übergebe, in die Zelle für nameref einträgt. Mit currentlabelname lässt sich das aber korrigieren. Somit funktioniert das sehr gut.

- Was mir noch nicht gut gefällt, ist die Seitennummerierung. (hat mit den Inhaltsverzeichnissen nichts mehr zu tun) Jede doppelte Seitenzahl meckert hyperref mir an. Der Funktion tut dies aber schon mal keinen Abbruch. Vielleicht hat ja da noch jemand eine Idee.
- Ich hatte mir überlegt, das ich den Seitenzähler ganz normal lasse und mir lediglich per eigenen Befehl die Seitenzahlen speichere, bei der ich das Format ändern möchte. Dann noch ein Befehl der mir zu einen gegebenen ausrechnet, wie die Seitenbezeichnung entsprechend meinen Vorstellungen heißen muss. Den könnte ich problemlos in die Fußzeile und die Labelanzeigen einbringen. Ich habe aber nicht herausgefunden, wie ich das in das Standardinhaltsverzeichnis einbringe. Bei dem eigenen gebe ich ja die Seitenzahl bei addcontendsline an, da wäre es also kein Problem. Ein Idee für das Standardinhaltsverzeichnis wäre super :)

Gruß,

Mathias

DasPferd
09-01-2012, 11:10
Das sollte auch helfen:
http://airminded.org/2006/02/25/multiple-bibliographies-in-latex/