Erster Querverweis auf Gleichung unterstrichen Thema ist als GELÖST markiert

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Mr_Nofreeze

Erster Querverweis auf Gleichung unterstrichen

Beitrag von Mr_Nofreeze »

Hallo zusammen,

ich habe ein hoffentlich kleines Anliegen. Ich schreibe derzeit an meiner Bachelorarbeit und habe hier die Vorgabe, dass das erste Vorkommen eines Querverweises im Text unterstrichen sein soll. Nun habe ich schon einige Stunden im Internet gesucht und bin auf die unten stehende Lösung gestoßen (über ein Internetforum). Leider ist hiermit nur der Fall der Abbildung sowie der Tabelle abgedeckt. Ich hab bei meinen Transferversuchen aber nicht geschafft die Gleichungensverweise genauso dargestellt zu bekommen. Kann mir hier jemand helfen? Grundsätzlich würde ich eqnarray bzw. align bevorzugen.

Vielen Dank schon mal!
Chris
\newif\ifMeinFormat
%\MeinFormattrue
\MeinFormatfalse

\makeatletter
\@ifdefinable\evtlfett{%
\ifMeinFormat
\let\evtlfett\@firstofone
\else
\let\evtlfett\underline
\fi
}%

\def\p@figure{\expandafter\p@@figure}%
\def\p@@figure#1{\@figmkdef{#1}}%
\DeclareRobustCommand\@figmkdef[1]{%
\@ifundefined{figmk#1}
{%
\global\@namedef{figmk#1}{}%
\evtlfett{Abbildung #1}%
}%
{Abbildung #1}%
}%

\def\p@table{\expandafter\p@@table}%
\def\p@@table#1{\@tablemkdef{#1}}%
\DeclareRobustCommand\@tablemkdef[1]{%
\@ifundefined{tblmk#1}
{%
\global\@namedef{tblmk#1}{}%
\evtlfett{Tabelle #1}%
}%
{Tabelle #1}%
}%
\makeatother
Minimalbeispiel:
\begin{document}
\section{test}
{\begingroup erster Verweis auf die Figur: \ref{fig} \endgroup}\\
zweiter Verweis auf die Figur: \ref{fig}\\
erster Verweis auf die Table: \ref{tab}\\
zweiter Verweis auf die Table: \ref{tab}

\begin{figure}
Irgend ne Figur
\caption{\label{fig}Text}
\end{figure}

\begin{table}
Irgend ne Table
\caption{\label{tab}Text}
\end{table}

\end{document}

Mr_Nofreeze

Erster Querverweis auf Gleichung unterstrichen

Beitrag von Mr_Nofreeze »

Hallo,

da sich bisher noch nichts weiteres getan hat, hab ich nochmal ein Minimalbeispiel gebastelt. Dies müste 1:1 ausführbar sein. Mein Wunsch wäre, die Gleichung genauso referenzieren zu können, wie die Tabellen und die Grafiken. Vielleicht könnte mir hier jemand helfen.

Vielen Dank schon mal!
\documentclass[
    pagesize,
    DIV = calc,
    liststotoc,
    bibtotoc,
    idxtotoc]{scrreprt}
    
    \usepackage{amsmath}


\newif\ifMeinFormat
%\MeinFormattrue
\MeinFormatfalse

\makeatletter
\@ifdefinable\evtlfett{%
\ifMeinFormat
\let\evtlfett\@firstofone
\else
\let\evtlfett\underline
\fi
}%

\def\p@figure{\expandafter\p@@figure}%
\def\p@@figure#1{\@figmkdef{#1}}%
\DeclareRobustCommand\@figmkdef[1]{%
\@ifundefined{figmk#1}
{%
\global\@namedef{figmk#1}{}%
\evtlfett{Abbildung #1}%
}%
{Abbildung #1}%
}%

\def\p@table{\expandafter\p@@table}%
\def\p@@table#1{\@tablemkdef{#1}}%
\DeclareRobustCommand\@tablemkdef[1]{%
\@ifundefined{tblmk#1}
{%
\global\@namedef{tblmk#1}{}%
\evtlfett{Tabelle #1}%
}%
{Tabelle #1}%
}%

\makeatother

\begin{document}
\section{test}
{\begingroup erster Verweis auf die Figur: \ref{fig} \endgroup}\\
zweiter Verweis auf die Figur: \ref{fig}\\
erster Verweis auf die Table: \ref{tab}\\
zweiter Verweis auf die Table: \ref{tab}\\
erster Verweis auf die Gleichung: \ref{eqn:abc}\\
zweiter Verweis auf die Gleichung: \ref{eqn:abc}\\

\begin{figure}
Irgend ne Figur
\caption{\label{fig}Text}
\end{figure}

\begin{table}
Irgend ne Table
\caption{\label{tab}Text}
\end{table}

\begin{align}
a + b = c \label{eqn:abc}
\end{align}

\end{document}

Hagbard Celine
Forum-Century
Forum-Century
Beiträge: 152
Registriert: Mi 23. Feb 2011, 22:13
Wohnort: Halle (Saale)

Beitrag von Hagbard Celine »

Hallo Mr. Nofreeze,

ich habe mir jetzt nicht die Mühe gemacht, deine ursprüngliche Lösung durchzuarbeiten, habe aber eine recht simple gefunden:
   \usepackage{etoolbox}
    


\let\oldref\ref

\listgadd{\labelliste}{dummy-label}

\renewcommand{\ref}[1]
	{%
		\ifinlist{#1}{\labelliste}%
			{\oldref{#1}}%
			{%
				\underline{\oldref{#1}}%
				\listgadd{\labelliste}{#1}%
			}%
	}
Dabei wird der Befehl \ref so umdefiniert, dass jedes bereits referenzierte Label in eine interne Liste (aus dem Paket etoolbox) eingetragen wird. Der Befehl kann also anhand dieser Liste sehen, ob ein Label schon referenziert wurde und entscheiden, ob die Referenz unterstrichen werden soll oder nicht.
Das funktioniert für alle Label.
Dabei wird nicht automatisch "Abbildung" bzw. "Tabelle" geschrieben. Es gibt aber viele Pakete, die das können. Ich empfehle dir das Paket cleveref. Dort musst du dann nicht den Befehl \ref, sondern \cref entsprechend umdefinieren.

Viele Grüße,
Jonas

Antworten