von Besserwisser » Sa 4. Okt 2014, 16:57
So schwer zu realisieren ist das gar nicht:
\documentclass{article}
\makeatletter
\newcommand*{\bledref}[2][]{%
{%
\@ifundefined{r@\detokenize{#2}@alreadyused}{%
\bfseries
\expandafter\gdef\csname r@\detokenize{#2}@alreadyused\endcsname{true}%
}{}%
\if\relax\detokenize{#1}\relax\else #1 \fi
\ref{#2}%
}%
}
\makeatother
\usepackage{mwe}% Zu Demozwecken.
\begin{document}
\section{Test}\label{sec:test}
\lipsum
This is \bledref[section]{sec:test}.
\section{Another Section}\label{sec:another}
See \bledref[section]{sec:test}--\bledref{sec:another}.
\end{document}
Das Beispiel zeigt aber auch gleich, wie wenig sinnvoll es ist. Wenn nämlich zwei Referenzen zusammen kommen, von denen eine bereits frühere genannt wurde und eine nicht, dann ist das sehr verwirrend. Im konkreten Fall müsste man sich auch noch überlegen, ob der bis-Strich in das optionale Argument des zweiten \bledref gehört.
So schwer zu realisieren ist das gar nicht: [code]\documentclass{article}
\makeatletter
\newcommand*{\bledref}[2][]{%
{%
\@ifundefined{r@\detokenize{#2}@alreadyused}{%
\bfseries
\expandafter\gdef\csname r@\detokenize{#2}@alreadyused\endcsname{true}%
}{}%
\if\relax\detokenize{#1}\relax\else #1 \fi
\ref{#2}%
}%
}
\makeatother
\usepackage{mwe}% Zu Demozwecken.
\begin{document}
\section{Test}\label{sec:test}
\lipsum
This is \bledref[section]{sec:test}.
\section{Another Section}\label{sec:another}
See \bledref[section]{sec:test}--\bledref{sec:another}.
\end{document}[/code]
Das Beispiel zeigt aber auch gleich, wie wenig sinnvoll es ist. Wenn nämlich zwei Referenzen zusammen kommen, von denen eine bereits frühere genannt wurde und eine nicht, dann ist das sehr verwirrend. Im konkreten Fall müsste man sich auch noch überlegen, ob der bis-Strich in das optionale Argument des zweiten \bledref gehört.