Wert von \ref{} in Zahl umwandeln und per IF prüfen?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


talueng
Forum-Anfänger
Forum-Anfänger
Beiträge: 39
Registriert: Mo 31. Mai 2010, 13:32

Wert von \ref{} in Zahl umwandeln und per IF prüfen?

Beitrag von talueng »

Ich benutze das Paket lineno um mir Zeilen nummerieren zu lassen. Dann gibt in meinem Dokument die Funktion \ref{cite:blablabla} die Zeilennummer zurück, wo das \label{cite:blablabla} gesetzt wurde. Kann ich die Rückgabe irgendwie in einen Integer-Wert umwandeln und per IF-Abfrage überprüfen?

Pseudocode:

zeile1 = \ref{cite:abc}
zeile2 = \ref{cite:xyz}
if (zeile1 != zeile2): Ausgabe = zeile1--zeile2
else: Ausgabe = zeile1.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Hatten wir so eine Frage nicht erst kürzlich und dazu die Antwort refcount (← dies ist ein geprüfter Link, der direkt zur Paketkurzbeschreibung auf CTAN führt!)?

Vergleiche mit Nummern gehen übrigens bei TeX mit \ifnum (siehe TeX by Topic) oder mit dem LaTeX-Paket ifthen (← dies ist ein geprüfter Link, der direkt zur Paketkurzbeschreibung auf CTAN führt!)

talueng
Forum-Anfänger
Forum-Anfänger
Beiträge: 39
Registriert: Mo 31. Mai 2010, 13:32

Beitrag von talueng »

Ich habe mal ein Minimalbeispiel angehangen. Erläuterung:

In meinen Interviewtranskripten setze ich um ein Zitat jeweils zwei Label. Das erste Label markiert die Anfangsstelle des Zitat, das zweite Label markiert die Endstelle des Zitats: \linelabel{cite:abc-23-40} ... \linelabel{cite:abc-23-40-e}. Die Funktion \linelabel stammt aus dem \lineno-Package. Auf diese Weise kann ich dann mit einer eigenen Funktion an einer anderen Stelle Seiten- und Zeilenzahl des Zitats ausgeben, um mich auf das Zitat zu beziehen:

\newcommand{\tc}[2]{%
S.~\pageref{cite:#1-#2}, \ref{cite:#1-#2}--\ref{cite:#1-#2-e}%
}

Die Funktion gibt sowas aus wie "S. 23, 100-121"

Problematisch wird es, wenn sich das Zitat nur über eine Zeile erstreckt. Dann ist der Wert von \ref{} jeweils gleich und es kommt zu einer Ausgabe, die keinen Sinn macht, z.B.:

"S. 23, 100-100". Statt dessen sollte bei einem Zitat über eine Zeile dort nur stehen "S. 23, 100". Es müsste also irgendwie mit einer if-Abfrage die beiden Werte gegeneinander getestet werden. Leider komme ich mit if in LaTeX immer noch nicht zurecht. ;-) Wäre über Hilfe dankbar!

Minimalbeispiel:
\documentclass{scrartcl}  
\usepackage[numbers]{natbib}
\usepackage{graphicx}
\usepackage{lineno}

% for line-numbering
\renewcommand\linenumberfont{\normalfont\small}
\setlength\linenumbersep{0.8cm}

% macro für Verweis auf Transkript-Zitat
% hier müsste eine if-Abfrage rein. Pseudocode:
% IF \ref{cite:#1-#2} EQUAL \ref{cite:#1-#2-e}
% THEN OUTPUT \ref{cite:#1-#2}
% ELSE OUTPUT \ref{cite:#1-#2}--\ref{cite:#1-#2-e}
\newcommand{\tc}[2]{%
	S.~\pageref{cite:#1-#2}, \ref{cite:#1-#2}--\ref{cite:#1-#2-e}%
}

\newcommand{\tcl}[1]{%
	\textsc{ABC Ltd.}, \tc{abc}{#1}%
}
 
\begin{document}
\chapter{Datenauswertung}
Bei der ABC Ltd. laeuft es dieses Jahr super.\footnote{Vgl. \tcl{23-40}.} Andererseits aber auch nicht.\footnote{Vgl. \tcl{23-25} \textbf{$\longleftarrow$ An dieser Stelle soll nur "`15"' stehen, da sich das Zitat nur ueber eine Zeile erstreckt. Die Schreibweise "`von--bis"' macht hier keinen Sinn, da "`von"'="'bis"' ist. Es muss also in der Funktion irgendeine if-Abfrage erfolgen, die die Rueckgabe der beiden ref-Funktionen testet}.}

\chapter{Transkript ABC}
% interview
\begin{runninglinenumbers*}
\begin{description}

\item[\rmfamily Interviewer:] What co-operation partners do you work with?
\item[\rmfamily Mg. ABC:] Lorem ipsum dolor sit amet, consectetur adipiscing elit. \linelabel{cite:abc-23-40}Nunc molestie augue non est dictum at ornare massa interdum. Donec dui neque, laoreet vitae adipiscing sed, malesuada a dui. Nulla facilisi. Sed elementum molestie volutpat. Etiam lacinia, erat at commodo convallis, elit dolor ullamcorper tortor, dapibus vehicula turpis turpis id erat. Nunc facilisis sem non quam auctor hendrerit. Aliquam mi metus, ultrices nec tincidunt at, lacinia quis augue. Nulla purus odio, tincidunt eget venenatis a, adipiscing a neque. Morbi pretium venenatis libero, in malesuada lectus facilisis non.\linelabel{cite:abc-23-40-e} Cras nunc diam, condimentum nec cursus quis, mollis ut ligula. Donec condimentum, erat eget elementum dictum, odio dui aliquet nisi, ac venenatis eros odio non orci. Nulla adipiscing, turpis sit amet gravida varius, risus est ornare quam, ut pulvinar magna magna eget purus. 

\item[\rmfamily Interviewer:] How important do you think is searching externally for new knowledge about process management?
\item[\rmfamily Mg. ABC:] \linelabel{cite:abc-23-25}Lorem ipsum dolor sit amet,\linelabel{cite:abc-23-25-e} consectetur adipiscing elit. Nunc molestie augue non est dictum at ornare massa interdum. Donec dui neque, laoreet vitae adipiscing sed, malesuada a dui. Nulla facilisi. Sed elementum molestie volutpat. Etiam lacinia, erat at commodo convallis, elit dolor ullamcorper tortor, dapibus vehicula turpis turpis id erat. Nunc facilisis sem non quam auctor hendrerit. Aliquam mi metus, ultrices nec tincidunt at, lacinia quis augue. Nulla purus odio, tincidunt eget venenatis a, adipiscing a neque. Morbi pretium venenatis libero, in malesuada lectus facilisis non. Cras nunc diam, condimentum nec cursus quis, mollis ut ligula. Donec condimentum, erat eget elementum dictum, odio dui aliquet nisi, ac venenatis eros odio non orci. Nulla adipiscing, turpis sit amet gravida varius, risus est ornare quam, ut pulvinar magna magna eget purus. 

\item[\rmfamily Interviewer:] How often is searched for new knowledge?
\item[\rmfamily Mg. ABC:] Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc molestie augue non est dictum at ornare massa interdum. Donec dui neque, laoreet vitae adipiscing sed, malesuada a dui. Nulla facilisi. Sed elementum molestie volutpat. Etiam lacinia, erat at commodo convallis, elit dolor ullamcorper tortor, dapibus vehicula turpis turpis id erat. Nunc facilisis sem non quam auctor hendrerit. Aliquam mi metus, ultrices nec tincidunt at, lacinia quis augue. Nulla purus odio, tincidunt eget venenatis a, adipiscing a neque. Morbi pretium venenatis libero, in malesuada lectus facilisis non. Cras nunc diam, condimentum nec cursus quis, mollis ut ligula. Donec condimentum, erat eget elementum dictum, odio dui aliquet nisi, ac venenatis eros odio non orci. Nulla adipiscing, turpis sit amet gravida varius, risus est ornare quam, ut pulvinar magna magna eget purus. 

\end{description}
\end{runninglinenumbers*}%
 
\end{document}

rais
Forum-Guru
Forum-Guru
Beiträge: 411
Registriert: Di 21. Sep 2010, 00:37

Beitrag von rais »

Hallo,
talueng hat geschrieben: In meinen Interviewtranskripten setze ich um ein Zitat jeweils zwei Label. Das erste Label markiert die Anfangsstelle des Zitat, das zweite Label markiert die Endstelle des Zitats: \linelabel{cite:abc-23-40} ...
(...)
Problematisch wird es, wenn sich das Zitat nur über eine Zeile erstreckt. Dann ist der Wert von \ref{} jeweils gleich und es kommt zu einer Ausgabe, die keinen Sinn macht, z.B.:

"S. 23, 100-100". Statt dessen sollte bei einem Zitat über eine Zeile dort nur stehen "S. 23, 100". Es müsste also irgendwie mit einer if-Abfrage die beiden Werte gegeneinander getestet werden.
und genau dabei kann Dir das bereits angesprochene refcount-Paket unter die Arme greifen, s. u.
BTW:
talueng hat geschrieben:
\documentclass{scrartcl}  
und
talueng hat geschrieben:
\chapter{Datenauswertung}
passt imho nicht zusammen ...
Versuch es etwa so:
\documentclass{scrartcl}
\usepackage{lineno,refcount}
\newcounter{mya}
\newcounter{myb}

% for line-numbering
\renewcommand\linenumberfont{\normalfont\small}
\setlength\linenumbersep{0.8cm}

% macro für Verweis auf Transkript-Zitat
\newcommand*\tc[2]{%
  \setcounterref{mya}{cite:#1-#2}%
  \setcounterref{myb}{cite:#1-#2-e}%
   S.~\pageref{cite:#1-#2}, {}%
    \ifnum\value{mya}=\value{myb}%
      \ref{cite:#1-#2}%
    \else
      \ref{cite:#1-#2}--\ref{cite:#1-#2-e}%
    \fi
}

\newcommand{\tcl}[1]{%
   \textsc{ABC Ltd.}, \tc{abc}{#1}%
}
 
\begin{document}
\section{Datenauswertung}
Bei der ABC Ltd. laeuft es dieses Jahr super.\footnote{Vgl. \tcl{23-40}.} Andererseits aber auch nicht.\footnote{Vgl. \tcl{23-25}.}

\section{Transkript ABC}
% interview
\begin{runninglinenumbers*}
\begin{description}

\item[Interviewer:] What co-operation partners do you work with?
\item[Mg. ABC:] Lorem ipsum dolor sit amet, consectetur adipiscing elit. \linelabel{cite:abc-23-40}Nunc molestie augue non est dictum at ornare massa interdum. Donec dui neque, laoreet vitae adipiscing sed, malesuada a dui. Nulla facilisi. Sed elementum molestie volutpat. Etiam lacinia, erat at commodo convallis, elit dolor ullamcorper tortor, dapibus vehicula turpis turpis id erat. Nunc facilisis sem non quam auctor hendrerit. Aliquam mi metus, ultrices nec tincidunt at, lacinia quis augue. Nulla purus odio, tincidunt eget venenatis a, adipiscing a neque. Morbi pretium venenatis libero, in malesuada lectus facilisis non.\linelabel{cite:abc-23-40-e} Cras nunc diam, condimentum nec cursus quis, mollis ut ligula. Donec condimentum, erat eget elementum dictum, odio dui aliquet nisi, ac venenatis eros odio non orci. Nulla adipiscing, turpis sit amet gravida varius, risus est ornare quam, ut pulvinar magna magna eget purus.

\item[Interviewer:] How important do you think is searching externally for new knowledge about process management?
\item[Mg. ABC:] \linelabel{cite:abc-23-25}Lorem ipsum dolor sit amet,\linelabel{cite:abc-23-25-e} consectetur adipiscing elit. Nunc molestie augue non est dictum at ornare massa interdum. Donec dui neque, laoreet vitae adipiscing sed, malesuada a dui. Nulla facilisi.
\end{description}
\end{runninglinenumbers*}%
 
\end{document}
MfG
Rainer
One of the joys of travel is visiting new towns and meeting new people---G.Khan (Robert Asprin, Another Fine Myth)

Antworten