goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Eigenes Verzeichnis mit mehreren Informationen

 

abon
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 11.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2017, 14:14     Titel: Eigenes Verzeichnis mit mehreren Informationen
  Antworten mit Zitat      
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:

Code • Öffne in Overleaf

\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):
Code • Öffne in Overleaf
\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.
Private Nachricht senden Benutzer-Profile anzeigen

markusv
Forum-Guru
Forum-Guru

Beiträge: 412
Anmeldedatum: 03.09.15
Wohnort: Leipzig
Version: ---
     Beitrag Verfasst am: 11.10.2017, 17:03     Titel:
  Antworten mit Zitat      
Hallo und willkommen im Forum. Poste bitte, wann immer möglich, ein lauffähiges InfoMinimalbeispiel.

Mein Vorschlag basiert auf dem DokumentationKOMA-Script und dem dort mitgelieferten \DeclareNewTOC. Die kapitelweise Einteilung habe ich leider nicht hinbekommen, evtl. kann man das mit Paket auf CTANminitoc realisieren (ich bin aber gescheitert).

Code • Öffne in Overleaf
\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}
 

_________________

Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden

abon
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 11.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2017, 17:29     Titel:
  Antworten mit Zitat      
Danke, aber das löst mein Problem noch nicht ganz, da ich zwei Parameter (also z.B. #1 und #2) im Verzeichnis verwenden will:

Code • Öffne in Overleaf


\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}
 
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 07:43     Titel:
  Antworten mit Zitat      
Also für mich ist Deine Frage extrem unklar. Vielleicht machst Du mal ein InfoMinimalbeispiel wie von Markus bereits angemahnt und machst daran auch sehr deutlich an, was genau Du wo wie ausgegeben haben willst.

abon
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 11.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 08:04     Titel:
  Antworten mit Zitat      
Ich hab mir mal erlaubt den Code von Markus entsprechend anzupassen:

Code • Öffne in Overleaf

\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}
 
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 08:53     Titel:
  Antworten mit Zitat      
Code • Öffne in Overleaf
\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}

abon
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 11.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 09:24     Titel:
  Antworten mit Zitat      
Tausend Dank!!! Jetzt klappt es!
Private Nachricht senden Benutzer-Profile anzeigen

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 09:37     Titel:
  Antworten mit Zitat      
War oben nicht die Rede davon, dass das kapitelweise erfolgen soll, also so:
Code • Öffne in Overleaf
\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:
Code • Öffne in Overleaf
\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
Code • Öffne in Overleaf
      \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
Code • Öffne in Overleaf
    \stepcounter{apioverviews}\openout \@apifile \jobname-\theapioverviews.api
ersetzen.

abon
Forum-Newbie
Forum-Newbie

Beiträge: 5
Anmeldedatum: 11.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2017, 12:44     Titel:
  Antworten mit Zitat      
Das ist jetzt natürlich die beste Variante wenn sogar die Erstellung der Verzeichnis automatisch geht! Tausend Dank!!!
Private Nachricht senden Benutzer-Profile anzeigen

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2017 goLaTeX.de