von KOMA » Do 31. Mär 2011, 14:00
Ich sage das jetzt mal ganz brutal (bitte nicht böse sein): Die Lösung taugt überhaupt nicht! Ich will das auch begründen: Zum einen wird das float-Paket hier gemein missbraucht. Zum anderen führt dieser Missbrauch dazu, dass für jeden dieser Rückverweise eine der kostbaren Ausgabedateien von TeX verbraucht wird. Nach spätestens 13 Rückverweisen dürfte schon dann Schluss sein. Wenn es Inhaltsverzeichnis, Tabellenverzeichnis, Abbildungsverzeichnis, Index etc. gibt, ist wesentlich früher Schluss. Da der Missbrauch außerdem eher umständlich und überflüssig ist, ist die beste Lösung, das nicht so zu machen, sondern direkt in die aux-Datei zu schreiben:
% Aus Gründen der Bequemlichkeit packe ich für das Minimalbeispiel alles in eine Datei;
% die Datei Appendix.tex entsteht aber beim LaTeX-Lauf aus der filecontente-Umgebung.
\RequirePackage{filecontents}
\begin{filecontents}{Appendix.tex}
\appendix
\section{Anforderungsliste}
\begin{Requirementslist}
\subsection{Systemanforderungen}
\req{Hallo}{Dies ist ein Requirement (Hallo)}
\req{Hallo1}{Dies ist ein Requirement (Hallo1)}
\req{Hallo2}{Dies ist ein Requirement (Hallo2)}
\req{Hallo3}{Dies ist ein Requirement (Hallo3)}
\req{Hallo4}{Dies ist ein Requirement (Hallo4)}
\req{Hallo12}{Dies ist ein Requirement (Hallo12)}
\subsection{Funktionale Anforderungen}
\req{Hallo5}{Dies ist ein Requirement (Hallo5)}
\req{Hallo6}{Dies ist ein Requirement (Hallo6)}
\req{Hallop}{Dies ist ein Requirement (Hallop)}
\subsection{Designanforderungen}
\req{Hallo8}{Dies ist ein Requirement (Hallo8)}
\req{Hallo9}{Dies ist ein Requirement (Hallo9)}
\req{Hallo13}{Dies ist ein Requirement (Hallo13)}
\req{Hallo14}{Dies ist ein Requirement (Hallo14)}
\end{Requirementslist}
\end{filecontents}
\documentclass[12pt]{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{marginnote}
\makeatletter
\AtBeginDocument{%
\protected@write{\@auxout}{}{%
\string\providecommand\string\addpageref[2]{}%
}%
}
\newcommand*{\reqref}[1]{%
\mpar{Req-\ref{#1}}%
\protected@write{\@auxout}{}{\protect\addpageref{#1}{\thepage}}%
}
\newcommand*{\addpageref}[2]{%
\@ifundefined{pageref@#1}{%
\expandafter\gdef\csname pageref@#1\endcsname{#2}%
}{%
\expandafter\g@addto@macro\csname pageref@#1\endcsname{, #2}%
}%
}
\newcommand*{\showpageref}[1]{%
\@ifundefined{pageref@#1}{}{\mpar{\@nameuse{pageref@#1}}}%
}
\newenvironment{Requirementslist}{%
\renewcommand{\labelenumi}{Req-\theenumi}%
\newcommand{\req}[2]{\item ##2\label{##1}%
\expandafter\show\csname pageref@##1\endcsname
\showpageref{##1}%
}%
\enumerate
}{%
\endenumerate
}
\makeatother
\newcommand\mpar[1]{\marginnote{\sffamily\small #1}}
\setlength{\marginparwidth}{3cm}
\begin{document}
\tableofcontents
\newpage
\section{Hier ist eine Section}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et \reqref{Hallo5} accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing \reqref{Hallop} elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua \reqref{Hallop}. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
\newpage
jhgdsaj gkj \reqref{Hallo5}
\newpage
reqref nummer 7 \reqref{Hallop}
\input{Appendix}
\end{document}
Ich habe bei der Gelegenheit auch gleich die falsche Verwendung von \appendix als Umgebung behoben. Außerdem verwende ich das Paket marginnote, weil \marginpar nun einmal gleiten darf, während \marginnote das nicht darf.
Hinweis: Es werden mehrere LaTeX-Läufe benötigt!
Ich sage das jetzt mal ganz brutal (bitte nicht böse sein): Die Lösung taugt überhaupt nicht! Ich will das auch begründen: Zum einen wird das float-Paket hier gemein missbraucht. Zum anderen führt dieser Missbrauch dazu, dass für jeden dieser Rückverweise eine der kostbaren Ausgabedateien von TeX verbraucht wird. Nach spätestens 13 Rückverweisen dürfte schon dann Schluss sein. Wenn es Inhaltsverzeichnis, Tabellenverzeichnis, Abbildungsverzeichnis, Index etc. gibt, ist wesentlich früher Schluss. Da der Missbrauch außerdem eher umständlich und überflüssig ist, ist die beste Lösung, das nicht so zu machen, sondern direkt in die aux-Datei zu schreiben:
[code]% Aus Gründen der Bequemlichkeit packe ich für das Minimalbeispiel alles in eine Datei;
% die Datei Appendix.tex entsteht aber beim LaTeX-Lauf aus der filecontente-Umgebung.
\RequirePackage{filecontents}
\begin{filecontents}{Appendix.tex}
\appendix
\section{Anforderungsliste}
\begin{Requirementslist}
\subsection{Systemanforderungen}
\req{Hallo}{Dies ist ein Requirement (Hallo)}
\req{Hallo1}{Dies ist ein Requirement (Hallo1)}
\req{Hallo2}{Dies ist ein Requirement (Hallo2)}
\req{Hallo3}{Dies ist ein Requirement (Hallo3)}
\req{Hallo4}{Dies ist ein Requirement (Hallo4)}
\req{Hallo12}{Dies ist ein Requirement (Hallo12)}
\subsection{Funktionale Anforderungen}
\req{Hallo5}{Dies ist ein Requirement (Hallo5)}
\req{Hallo6}{Dies ist ein Requirement (Hallo6)}
\req{Hallop}{Dies ist ein Requirement (Hallop)}
\subsection{Designanforderungen}
\req{Hallo8}{Dies ist ein Requirement (Hallo8)}
\req{Hallo9}{Dies ist ein Requirement (Hallo9)}
\req{Hallo13}{Dies ist ein Requirement (Hallo13)}
\req{Hallo14}{Dies ist ein Requirement (Hallo14)}
\end{Requirementslist}
\end{filecontents}
\documentclass[12pt]{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{marginnote}
\makeatletter
\AtBeginDocument{%
\protected@write{\@auxout}{}{%
\string\providecommand\string\addpageref[2]{}%
}%
}
\newcommand*{\reqref}[1]{%
\mpar{Req-\ref{#1}}%
\protected@write{\@auxout}{}{\protect\addpageref{#1}{\thepage}}%
}
\newcommand*{\addpageref}[2]{%
\@ifundefined{pageref@#1}{%
\expandafter\gdef\csname pageref@#1\endcsname{#2}%
}{%
\expandafter\g@addto@macro\csname pageref@#1\endcsname{, #2}%
}%
}
\newcommand*{\showpageref}[1]{%
\@ifundefined{pageref@#1}{}{\mpar{\@nameuse{pageref@#1}}}%
}
\newenvironment{Requirementslist}{%
\renewcommand{\labelenumi}{Req-\theenumi}%
\newcommand{\req}[2]{\item ##2\label{##1}%
\expandafter\show\csname pageref@##1\endcsname
\showpageref{##1}%
}%
\enumerate
}{%
\endenumerate
}
\makeatother
\newcommand\mpar[1]{\marginnote{\sffamily\small #1}}
\setlength{\marginparwidth}{3cm}
\begin{document}
\tableofcontents
\newpage
\section{Hier ist eine Section}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et \reqref{Hallo5} accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing \reqref{Hallop} elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua \reqref{Hallop}. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
\newpage
jhgdsaj gkj \reqref{Hallo5}
\newpage
reqref nummer 7 \reqref{Hallop}
\input{Appendix}
\end{document}
[/code]
Ich habe bei der Gelegenheit auch gleich die falsche Verwendung von \appendix als Umgebung behoben. Außerdem verwende ich das Paket marginnote, weil \marginpar nun einmal gleiten darf, während \marginnote das nicht darf.
Hinweis: Es werden mehrere LaTeX-Läufe benötigt!