Verweisen Sie auf Abschnitte oder Kapitel ohne Beschriftung?

Verweisen Sie auf Abschnitte oder Kapitel ohne Beschriftung?

Ist es möglich, auf Kapitel und Abschnitte eines Dokuments zu verweisen, ohne jeden Abschnitt und Unterabschnitt manuell zu kennzeichnen?

Ich habe ungefähr 8 Kapitel und Dutzende darin eingerückte Abschnitte/Unterabschnitte. Die Beschriftung jedes einzelnen Abschnitts ist ziemlich mühsam.

Gibt es einen schnelleren und bequemeren Weg?

Antwort1

Dies ist möglich, kann aber riskant sein. Im folgenden Beispiel wird das erste Wort jedes Kapitels oder Abschnitts verwendet, um bei jedem Aufruf von \chapteroder automatisch die Bezeichnung zu erstellen \section. titlesecDie explicitOption wurde verwendet, um den Titel zu erfassen. Mit xstringwird das erste Wort extrahiert:

\documentclass[10pt]{book}
\usepackage[explicit]{titlesec}
\usepackage{xstring}

\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge\StrBefore{#1}{ }[\mlabel]#1\label{\mlabel}}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection}{1em}{\StrBefore{#1}{ }[\mlabel]#1\label{\mlabel}}

\begin{document}

Some references to chapters: \ref{Some} and \ref{Other} and some references to sections: \ref{A} and \ref{Another}
\chapter{Some Chapter}
\section{A Test Section}
\chapter{Other Chapter}
\section{Another Test Section}

\end{document}

Bildbeschreibung hier eingeben

Dies schlägt fehl, wenn in den Titeln zweier Unterteilungseinheiten das gleiche Anfangswort enthalten ist. Sie können dann jedoch zum Erstellen der Beschriftungen eine andere Zeichenfolge auswählen.

In meiner ersten Lösung ging ich davon aus, dass die Titel mindestens ein Leerzeichen enthalten, aber man könnte auch eine andere Zeichenfolge verwenden, zum Beispiel (wie inNicolai Rostov's Antwort) den vollständigen Namen der Sektionseinheit. In diesem Fall wird das xstring-Paket nicht mehr benötigt und man könnte einfach sagen

\documentclass[10pt]{book}
\usepackage[explicit]{titlesec}

\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge#1\label{#1}}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection}{1em}{#1\label{#1}}

\begin{document}

Some references to chapters: \ref{Some Chapter} and \ref{Other Chapter} and some references to sections: \ref{A Test Section} and \ref{Another Test Section}
\chapter{Some Chapter}
\section{A Test Section}
\chapter{Other Chapter}
\section{Another Test Section}

\end{document}

Meine Beispiele zeigen nur den Mechanismus für Kapitel und Abschnitte, er lässt sich aber problemlos auf andere Abschnittseinheiten erweitern.

Antwort2

Sie können denGanzer Titelvon Kapiteln oder Abschnitten als Beschriftungen und verweisen Sie mittels eigener Titel darauf zurück.

\documentclass{book}

\let\origchapter=\chapter
\let\origsection=\section

\renewcommand\chapter[1]{\origchapter{#1}\label{#1}}    
\renewcommand\section[1]{\origsection{#1}\label{#1}}

\begin{document}

\chapter{My first chapter}

\section{My first section}

I said in section~\ref{My first section} at the
beginning of chapter~\ref{My first chapter} that

\end{document}

Antwort3

Sie können den Prozess der Etikettenerstellung automatisieren. Ein sehr einfaches Perl-Skript reicht dafür aus. Das Perl-Skript muss alle Ihre .texDateien durchgehen und nacheinander einen Substitutions-Regex auf sie anwenden. Hier ist ein Beispiel für den Regex, den Sie verwenden sollten:

my $input_str = do{ local $/; <> };
$input_str =~ s/(\\section{(.*?)}(?!\s*\\label))/$1\n\\label{sec:$2}/mg;
$input_str =~ s/(\\chapter{(.*?)}(?!\s*\\label))/$1\n\\label{chap:$2}/mg;
print $input_str;

Diese beiden regulären Ausdrücke suchen einfach nach jedem \chapter{Chapter Title}und \section{Section Name}in Ihrem Tex-Code. Wenn danach ein Label definiert ist, ignoriert das Skript sie. Wenn nicht, fügt das Skript eine Label-Anweisung für sie in einer neuen Zeile hinzu, die lautet \label{chap:Chapter Title}und \label{sec:Section Name}. Sie können dieses Perl-Skript erstellen und es ausführen, wann immer Sie neue Abschnitte/Kapitel erstellen.

HAFTUNGSAUSSCHLUSS:Ich bin nicht verantwortlich für Datenverluste, die beim Ausführen von Regex auf Ihre .texDateien auftreten können. Obwohl ich die oben genannten Regex getestet habe, habe ich absichtlich nicht den Code für ein vollständiges Perl-Skript eingefügt, um dieses Risiko zu vermeiden. Sie können meinen Perl-Code immer noch in Aktion sehen, wenn Sie ihn ausschneiden und in ein Skript einfügen und auf einer .texDatei ausführen. Er wird funktionieren und die Ergebnisse auf dem Bildschirm ausgeben, ohne Ihre Datei zu ändern. Stellen Sie sicher, dass Sie Ihr eigenes Perl-Skript schreiben und es an Dummy- .texDateien testen. Stellen Sie außerdem sicher, dass Sie immer eine Kopie Ihrer Arbeit erstellen, bevor Sie solche Skripte darauf ausführen.

verwandte Informationen