Eigenes Verzeichnis mit mehreren Informationen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: Eigenes Verzeichnis mit mehreren Informationen

von abon » Do 12. Okt 2017, 13:44

Das ist jetzt natürlich die beste Variante wenn sogar die Erstellung der Verzeichnis automatisch geht! Tausend Dank!!!

von Gast » Do 12. Okt 2017, 10:37

War oben nicht die Rede davon, dass das kapitelweise erfolgen soll, also so:
\documentclass[a4paper,10pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\usepackage{nameref}

\DeclareNewTOC[%
   type=api,%
   types=apis,%
   float,%
   floattype=5,%
   name=Api,%
   floatpos=ht,%
   listname={Verzeichnis der Apis}%
]{loa}

\addtotoclist[api]{api}
\makeatletter
\newwrite\@apifile
\newif\if@apifilewritten
\renewcommand*{\@apifilewrittentrue}{\global\let\if@apifilewritten\iftrue}
\renewcommand*{\@apifilewrittenfalse}{\global\let\if@apifilewritten\iffalse}
\newcommand*{\apioverview}{%
  \closeapioverview
  \InputIfFileExists{\jobname-\thechapter.api}{}{%
    \typeout{No file `\jobname-\thechapter.api' found.}%
  }%
}
\newcommand*{\startapioverview}{%
  \if@apifilewritten\else
    \if@filesw
      \typeout{Open new api file `\jobname-\thechapter.api'}%
      \@apifilewrittentrue
      \openout\@apifile \jobname-\thechapter.api
      \protected@write\@apifile{}{%
        \string\section*{\string\apioverviewname}^^J%
        \string\begin{tabularx}{\string\textwidth}{|X|c|c|}^^J
        \string\hline^^J
        \string\textbf{Parameter1}&
        \string\textbf{Parameter2}&
        \string\textbf{Seite}\string\\^^J
        \string\hline^^J
        \string\hline
      }%
    \fi
  \fi
}
\newcommand*{\closeapioverview}{%
  \if@apifilewritten
    \protected@write\@apifile{}{%
      \string\end{tabularx}%
    }%
    \closeout\@apifile
    \@apifilewrittenfalse
  \fi
}
\newcommand*{\setapientry}[2]{%
  \startapioverview
  \protected@write\@apifile{}{ \detokenize{#1}&\detokenize{#2}&\thepage\string\\^^J \string\hline}%
}
\makeatletter
\AtEndDocument{\closeapioverview}

\newcommand*{\apiumgebung}[4]
{
   \begin{api}
      \setlength\arrayrulewidth{1pt}
      \begin{tabularx}{\textwidth}{|X|r|}
         \hline
         \rowcolor{lightgray}
         \textbf{\large #1} & #2\\
         \hline
         \multicolumn{2}{|l|}{#3}\\
         \hline              
      \end{tabularx}
      \caption{#4}
      \label{api:\theapi}
      \setapientry{#1}{#2}%
   \end{api}
}
\makeatother
\newcommand*{\apioverviewname}{Übersicht}


\begin{document}
   \chapter{Kapitel eins}
   \apioverview

   \section{Abschnitt}
   \subsection{Unterabschnitt}

   \apiumgebung{was}{auch}{immer}{erste Beschriftung}
   \apiumgebung{das}{auch}{immer}{erste Beschriftung}
   

   \chapter{Kapitel zwei}
   \apioverview

   \apiumgebung{das}{werden}{soll}{zweite Beschriftung}


   \chapter{Kapitel drei}
   \apioverview
   Und hier sehen wir, was mit \verb|\apioverview| passiert, wenn gar keine
   APIs in dem Kapitel definiert sind.

\end{document}
Statt so:
\documentclass[a4paper,10pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\usepackage{nameref}

\DeclareNewTOC[%
   type=api,%
   types=apis,%
   float,%
   floattype=5,%
   name=Api,%
   floatpos=ht,%
   listname={Verzeichnis der Apis}%
]{loa}

\addtotoclist[api]{api}
\makeatletter
\newwrite\@apifile
\newif\if@apifilewritten
\renewcommand*{\@apifilewrittentrue}{\global\let\if@apifilewritten\iftrue}
\renewcommand*{\@apifilewrittenfalse}{\global\let\if@apifilewritten\iffalse}
\newcommand*{\apioverview}{%
  \closeapioverview
  \InputIfFileExists{\jobname-\thechapter.api}{}{%
    \typeout{No file `\jobname-\thechapter.api' found.}%
  }%
}
\newcommand*{\startapioverview}{%
  \if@apifilewritten\else
    \if@filesw
      \typeout{Open new api file `\jobname-\thechapter.api'}%
      \@apifilewrittentrue
      \openout\@apifile \jobname-\thechapter.api
      \protected@write\@apifile{}{%
        \string\section*{\string\apioverviewname}^^J%
        \string\begin{tabularx}{\string\textwidth}{|X|c|c|}^^J
        \string\hline^^J
        \string\textbf{Parameter1}&
        \string\textbf{Parameter2}&
        \string\textbf{Seite}\string\\^^J
        \string\hline^^J
        \string\hline
      }%
    \fi
  \fi
}
\newcommand*{\closeapioverview}{%
  \if@apifilewritten
    \protected@write\@apifile{}{%
      \string\end{tabularx}%
    }%
    \closeout\@apifile
    \@apifilewrittenfalse
  \fi
}
\newcommand*{\setapientry}[2]{%
  \startapioverview
  \protected@write\@apifile{}{ \detokenize{#1}&\detokenize{#2}&\thepage\string\\^^J \string\hline}%
}
\makeatletter
\AtEndDocument{\closeapioverview}

\newcommand*{\apiumgebung}[4]
{
   \begin{api}
      \setlength\arrayrulewidth{1pt}
      \begin{tabularx}{\textwidth}{|X|r|}
         \hline
         \rowcolor{lightgray}
         \textbf{\large #1} & #2\\
         \hline
         \multicolumn{2}{|l|}{#3}\\
         \hline              
      \end{tabularx}
      \caption{#4}
      \label{api:\theapi}
      \setapientry{#1}{#2}%
   \end{api}
}
\makeatother
\newcommand*{\apioverviewname}{Übersicht}


\begin{document}
   \chapter{Kapitel eins}
   \apioverview

   \section{Abschnitt}
   \subsection{Unterabschnitt}

   \apiumgebung{was}{auch}{immer}{erste Beschriftung}

   \chapter{Kapitel zwei}
   \apiumgebung{das}{werden}{soll}{zweite Beschriftung}

\end{document}
Anders gesagt: Mit dieser Lösung kann man eine oder mehrere Übersichten automatisch erstellen lassen, wobei jeweils die api-Umgebungen ab dem \apioverview aufgesammelt werden. Die Verwendung von \thechapter in der Zeile
      \openout\@apifile \jobname-\thechapter.api
ist also eher willkürlich. Man könnte stattdessen auch (außerhalb des Makros) einen eigenen Zähler apioverviews definieren und dann obige Zeile durch
    \stepcounter{apioverviews}\openout \@apifile \jobname-\theapioverviews.api
ersetzen.

von abon » Do 12. Okt 2017, 10:24

Tausend Dank!!! Jetzt klappt es!

von Gast » Do 12. Okt 2017, 09:53

\documentclass[a4paper,10pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\usepackage{nameref}

\DeclareNewTOC[%
   type=api,%
   types=apis,%
   float,%
   floattype=5,%
   name=Api,%
   floatpos=ht,%
   listname={Verzeichnis der Apis}%
]{loa}

\makeatletter
\newcommand*{\apiumgebung}[4]
{
   \begin{api}
      \setlength\arrayrulewidth{1pt}
      \begin{tabularx}{\textwidth}{|X|r|}
         \hline
         \rowcolor{lightgray}
         \textbf{\large #1} & #2\\
         \hline
         \multicolumn{2}{|l|}{#3}\\
         \hline              
      \end{tabularx}
      \caption{#4}
      \label{api:\theapi}
      \def\@currentlabelname{#1}\label{api:par1:\theapi}% zusätzliches Label für das erste Argument
      \def\@currentlabelname{#2}\label{api:par2:\theapi}% zusätzliches Label für das zweite Argument
   \end{api}
}
\makeatother


\begin{document}
   \chapter{Kapitel eins}
   \section{Übersicht}

   \begin{table}[h!]
      \begin{tabularx}{\textwidth}{|X|c|c|}
         \hline
         \textbf{Parameter1}&\textbf{Parameter2}&\textbf{Seite}\\
         \hline
         \hline
         \nameref{api:par1:1}&\nameref{api:par2:1}&\pageref{api:1}\\ % hier soll ausgegeben werden: | was | auch | 1 |
         \nameref{api:par1:2}&\nameref{api:par2:2}&\pageref{api:2}\\ % hier soll ausgegeben werden: | das | werden | 2 |
        % hier dann alle weiteren apis auflisten
         \hline
      \end{tabularx}
   \end{table}

   \section{Abschnitt}
   \subsection{Unterabschnitt}

   \apiumgebung{was}{auch}{immer}{erste Beschriftung}

   \chapter{Kapitel zwei}

   \apiumgebung{das}{werden}{soll}{zweite Beschriftung}

\end{document}

von abon » Do 12. Okt 2017, 09:04

Ich hab mir mal erlaubt den Code von Markus entsprechend anzupassen:
\documentclass[a4paper,10pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}
\usepackage{nameref}

\DeclareNewTOC[%
   type=api,%
   types=apis,%
   float,%
   floattype=5,%
   name=Api,%
   floatpos=ht,%
   listname={Verzeichnis der Apis}%
]{loa}

\newcommand*{\apiumgebung}[4]
{
   \begin{api}
      \setlength\arrayrulewidth{1pt}
      \begin{tabularx}{\textwidth}{|X|r|}
         \hline
         \rowcolor{lightgray}
         \textbf{\large #1} & #2\\
         \hline
         \multicolumn{2}{|l|}{#3}\\
         \hline              
      \end{tabularx}
      \caption{#4}
      \label{api:\theapi}
   \end{api}
   % Hier soll #1 so gespeichert werden, dass man unten mit \nameref{api:par1:\theapi} den Text von #1 auslesen kann
   % Hier soll #2 so gespeichert werden, dass man unten mit \nameref{api:par2:\theapi} den Text von #2 auslesen kann
   
   % hier kommt der Rest des command ...
}


\begin{document}
   \chapter{Kapitel eins}
   \section{Übersicht}

   \begin{table}[h!]
      \begin{tabularx}{\textwidth}{|X|c|c|}
         \hline
         \textbf{Parameter1}&\textbf{Parameter2}&\textbf{Seite}\\
         \hline
         \hline
         \nameref{api:par1:1}&\nameref{api:par2:1}&\pageref{api:1}\\ % hier soll ausgegeben werden: | was | auch | 1 |
         \nameref{api:par1:2}&\nameref{api:par2:2}&\pageref{api:2}\\ % hier soll ausgegeben werden: | das | werden | 2 |
        % hier dann alle weiteren apis auflisten
         \hline
      \end{tabularx}
   \end{table}

   \section{Abschnitt}
   \subsection{Unterabschnitt}

   \apiumgebung{was}{auch}{immer}{erste Beschriftung}

   \chapter{Kapitel zwei}

   \apiumgebung{das}{werden}{soll}{zweite Beschriftung}

\end{document}

von Gast » Do 12. Okt 2017, 08:43

Also für mich ist Deine Frage extrem unklar. Vielleicht machst Du mal ein Minimalbeispiel wie von Markus bereits angemahnt und machst daran auch sehr deutlich an, was genau Du wo wie ausgegeben haben willst.

von abon » Mi 11. Okt 2017, 18:29

Danke, aber das löst mein Problem noch nicht ganz, da ich zwei Parameter (also z.B. #1 und #2) im Verzeichnis verwenden will:
\nameref{api:par1:1} % hier soll "was" erscheinen
\nameref{api:par2:1} % hier soll "auch" erscheinen
\pageref{api:par1:1} % hier soll die Seitenzahl erscheinen

% ... sonstiger Code

\apiumgebung{was}{auch}{immer}{erste Beschriftung}

von markusv » Mi 11. Okt 2017, 18:03

Hallo und willkommen im Forum. Poste bitte, wann immer möglich, ein lauffähiges Minimalbeispiel.

Mein Vorschlag basiert auf dem [d]KOMA-Script[/d] und dem dort mitgelieferten \DeclareNewTOC. Die kapitelweise Einteilung habe ich leider nicht hinbekommen, evtl. kann man das mit minitoc realisieren (ich bin aber gescheitert).
\documentclass[a4paper,10pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage[table]{xcolor}

\DeclareNewTOC[%
type=api,%
types=apis,%
float,%
floattype=5,%
name=Api,%
floatpos=ht,%
listname={Verzeichnis der Apis}%
]{loa}

\newcommand*{\apiumgebung}[4]
{\begin{api}
      \setlength\arrayrulewidth{1pt}
      \begin{tabularx}{\textwidth}{|X|r|}
         \hline
         \rowcolor{lightgray}
         \textbf{\large #1} & #2\\
         \hline
         \multicolumn{2}{|l|}{#3}\\
         \hline              
      \end{tabularx}
      \caption{#4}
      \label{api:\theapi}
   \end{api}
% hier kommt der Rest des command ...
}


\begin{document}
\listofapis
\chapter{Kapitel eins}
\section{Abschnitt}
\subsection{Unterabschnitt}
\apiumgebung{was}{auch}{immer}{erste Beschriftung}
\chapter{Kapitel zwei}
\apiumgebung{das}{werden}{soll}{zweite Beschriftung}

Siehe Api~\ref{api:1} bzw. Seite~\pageref{api:2}


\end{document}

Eigenes Verzeichnis mit mehreren Informationen

von abon » Mi 11. Okt 2017, 15:14

Hallo zusammen!

Ich habe folgendes Problem: Ich erstelle mit einem Macro (mit 5 Parametern) immer gleiche Elemente (enthält jeweils mehrere Tabellen und Text). Nun möchte ich zu Beginn des Kapitels ein Verzeichnis (in Form einer Tabelle) einfügen, das den Text von 2 der Parameter + die Seitenzahl anzeigt (Das Verzeichnis selbst muss nicht automatisch sein, ich will nur die Texte darin aktualisieren lassen, wenn das jeweilige macro geändert wird).

Was ich bisher hinbekommen habe: Die Seitenzahl wird über ein Label für die erste Tabelle im Macro ermittlt:
\newcommand*{\apidoc}[6]
{
	\protect\stepcounter{apicounter}
	\begin{table}[H]
		\setlength\arrayrulewidth{1pt}
		\begin{tabularx}{\textwidth}{|X|r|}
			\hline
			\rowcolor{lightgray}
			\textbf{\large #1} & #2\\
			\hline
			\multicolumn{2}{|l|}{#3}\\
			\hline					
		\end{tabularx}
		\expandafter\label{api:\theapicounter}
	\end{table}

% hier kommt der Rest des command ...

}
Und der Refernzierung (z.B. für die erste Verwendung):
\pageref{api:1}
Was nicht funktioniert: Den Inhalt von Parameter #1 und #2 ins Verzeichnis zu bekommen. Ich habe es bereits mit verschiedensten Varianten versucht (def / newenvironment / newcommand / ...) aber bislang ohne Erfolg.

Nach oben