From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/gmiflink/gmiflink.sty | 214 +++++++++++++++++++++++++++++
 1 file changed, 214 insertions(+)
 create mode 100644 macros/latex/contrib/gmiflink/gmiflink.sty

(limited to 'macros/latex/contrib/gmiflink/gmiflink.sty')

diff --git a/macros/latex/contrib/gmiflink/gmiflink.sty b/macros/latex/contrib/gmiflink/gmiflink.sty
new file mode 100644
index 0000000000..d383622f58
--- /dev/null
+++ b/macros/latex/contrib/gmiflink/gmiflink.sty
@@ -0,0 +1,214 @@
+%
+% \GetFileInfo{gmiflink.sty}
+% \title{The \pk{gmiflink} Package\thfileinfo}
+% \author{Grzegorz `Natror' Murzynowski}
+% \maketitle
+%
+%
+% \begin{copyrnote}
+%
+%%   Written by Grzegorz `Natror' Murzynowski,
+%%   natror at o2 dot pl
+%%
+%% \copyright\,2005, 2006 by Grzegorz `Natror' Murzynowski.
+%%
+%% This program is subject to the \LaTeX\ Project Public License.
+%% See ^^A
+%% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".\par
+%
+%\end{copyrnote}
+%
+% \CheckSum{61}
+%% 
+
+% \skiplines
+% This is a~driver. To learn how to use it, read the README
+% or the documentation in .pdf
+
+\ifnum\catcode`\@=12
+\documentclass[codespacesgrey, noindex, nochanges, pagella]{gmdocc}% ^^A
+% the package is to small to make an index of its macros and it's too
+% old to have the |\changes| ^^A( 
+% history ;-)\,.
+\begin{document}
+\DocInput{gmiflink.sty}
+\afterfi{\end{document}}
+\fi
+
+% \endskiplines
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmiflink}
+     [2006/08/16 v0.97 Conditionally hyperlinking package (GM)]
+
+%%
+%% \division{Introduction, usage}
+%%
+%% This package protects you against an error when a link is
+%% dangling and typesets some plain text instead of a hyperlink then. It
+%% is intended for use with the \pk{hyperref} package. Needs
+%% \emph{two} \LaTeX\ runs.
+%
+% I used it for typesetting the names of the objects in
+% a~documentation of a~computer program. If the object had been
+% defined a \cs{hyperlink} to its definition was made, otherwise a
+% plain object's name was typeset.  I also use this package in
+% authomatic making of hyperlinking indexes.
+% \dekmedskip
+%
+% The package provides the macros \cs{gmiflink}, \cs{gmifref} and
+% \cs{gmhypertarget} for conditional making of hyperlinks in your
+% document.
+%
+% \newcommand*\aName{\gmiflink[@name]{\hskip-1.5pt @name}}
+% \TextUsage\gmhypertarget\oarg{name}\marg{\gmiflink{text}} makes
+% a~\cs{hypertarget\marg{\aName}\marg{text}} and \possfil
+% a~\cs{label\marg{\aName}}.
+%
+% \TextUsage\gmiflink\oarg{name}\marg{text} makes
+% a~\cs{hyperlink\marg{\aName}\marg{text}} to a~proper hypertarget if
+% the corresponding \emph{label} exists, otherwise it typesets
+% \<text>.
+%
+% \TextUsage\gmifref\oarg{name}\marg{text} makes a~(hyper-)
+% \cs{ref\marg{\aName}} to the given label if the label exists,
+% otherwise it typesets \<text>.
+%
+% The \raisebox{1em}[0pt]{\gmhypertarget[@name]{}}\<\hskip-1.5pt @name>
+% ^^A~raisebox 'cause Acrobat sets the hypertarget at the baseline
+% argument is just \<name> if the \<name>
+% is given, otherwise it's \<text> in all three macros.
+%
+% For the example(s) of use, examine the \pk{gmiflink.sty} file, lines
+% 45--58.
+%
+% \begin{gmlonely}
+%   \subdivision{Installation}
+%
+%   Unpack the \file{gmiflink-tds.zip} (this is an archive conforming
+%   the \acro{TDS} standard, see \file{CTAN/tds/tds.pdf}) in
+%   a~\file{texmf} directory or put the \pk{gmiflink.sty} somewhere in
+%   the \file{texmf/\:tex/\:latex} branch on your own. (Creating
+%   a~\file{texmf/\:tex/\:latex/\:gm} directory may be advisable if
+%   you consider using other packages written by me.)
+%
+%   Then you should refresh your \TeX\ distribution's files' database
+%   most probably. 
+% \end{gmlonely}
+%
+%
+% \subdivision{Contents of the \pk{gmiflink.zip} archive}
+%
+% The distribution of the \pk{gmiflink} package consists of the
+% following three files and a~\acro{TDS}-compliant archive.
+% \begin{verse}
+%   \pk{gmiflink.sty}\\
+%   \pk{README}\\
+%   \pk{gmiflink.pdf}\\
+%   \pk{gmiflink.tds.zip}
+% \end{verse}
+%
+%
+% \begin{gmlonely}
+%   \subdivision{Compiling the Documentation}
+%
+%   The last of the above files (the \pk{.pdf}, i.e., \emph{this
+%     file}) is a~documentation compiled from the \pk{.sty} file by
+%   running \LaTeX\ on the \pk{gmiflink.sty} file 
+%   (|xelatex gmiflink.sty| in the directory you wish the
+%   documentation to be in, you don't have copy the \file{.sty} file
+%   there, \TeX\ will find it).  Compiling the documentation requires the
+%   packages: \pk{gmdoc} (\pk{gmdoc.sty} and \pk{gmdocc.cls}),
+%   \pk{gmverb.sty}, \pk{gmutils.sty}, \pk{gmiflink.sty} and also some
+%   standard packages: \pk{hyperref.sty}, \pk{xcolor.sty},
+%   \pk{geometry.sty}, \pk{multicol.sty}, \pk{lmodern.sty},
+%   \pk{fontenc.sty} that should be installed on your computer by
+%   default.
+%
+%   If you had not installed the \pk{mwcls} classes (available on
+%   CTAN and present in \TeX\ Live e.g.), the result of your
+%   compilation might differ a~bit from the \pk{.pdf} provided in this
+%   \pk{.zip} archive in formatting: If you had not installed
+%   \pk{mwcls}, the standard \pk{article.cls} class would be used.
+% \end{gmlonely}
+%
+% \StopEventually{\NoEOF}
+%
+% 
+% \division{The Code}
+
+\@ifpackageloaded{hyperref}{}{\message {^^J^^J gmiflink package:
+    There's no use of me without hyperref package, I end my input.^^J}\endinput}
+
+\providecommand\empty{} 
+% A~new counter, just in case
+\newcounter{GMhlabel}
+\setcounter{GMhlabel}{0}
+
+% The macro given below creates both hypertarget and hyperlabel, 
+% so that you may reference both ways: via |\hyperlink| and via |\ref|.
+% It's pattern is the |\label| macro, see \LaTeX\ Source2e, file x, line 32.
+%
+% But we don't want to gobble spaces before and after.
+% First argument will be a~name of the hypertarget,
+% by default the same as typeset text, i.e., argument |#2|.
+% \Define\gmhypertarget
+\DeclareRobustCommand*\gmhypertarget{%
+  \@ifnextchar{[}{\gm@hypertarget}{\@dblarg{\gm@hypertarget}}}
+%^^A]
+
+\def\gm@hypertarget[#1]#2{% ^^A
+  % If argument |#1|\equals|\empty|, then we'll use |#2|, i.e., the same as
+  % name of hypertarget.
+  \refstepcounter{GMhlabel}% ^^A
+  % we |\label{\gmht@firstpar}|
+  \hypertarget{#1}{#2}%
+  \protected@write\@auxout{}{%
+    \string\newlabel{#1}{{#2}{\thepage}{\relax}{GMhlabel.\arabic{GMhlabel}}{}}}%
+}% end of |\gm@hypertartget|.
+
+% We define a~macro such that if the target exists, it makes
+% |\ref|, else it typesets ordinary text.
+% \Define\gmifref
+\DeclareRobustCommand*\gmifref{\@ifnextchar{[}{\gm@ifref}{%]
+    \@dblarg{\gm@ifref}}}
+
+\def\gm@ifref[#1]#2{%
+  \expandafter\ifx\csname r@#1\endcsname\relax\relax%
+  #2\else\ref{#1}\fi%
+}%  end of |\gm@ifref|
+
+% \Define\gmiflink
+\DeclareRobustCommand*\gmiflink{\@ifnextchar{[}{\gm@iflink}{%^^A]
+    \@dblarg{\gm@iflink}}}
+
+\def\gm@iflink[#1]#2{%
+  \expandafter\ifx\csname r@#1\endcsname\relax\relax%
+  #2\else\hyperlink{#1}{#2}\fi%
+}% end of |\gm@iflink|
+%
+% It's robust because when just |\newcommand*|ed, use of |\gmiflink| in an
+% indexing macro resulted in errors: |\@ifnextchar| has to be
+% |\noexpand|ed in |\edef|s.
+
+\endinput
+
+% The old version --- all three were this way primarily.
+%\begin{verbatim}
+\newcommand*\gmiflink[2][\empty]{{%
+  \def\gmht@test{\empty}\def\gmht@firstpar{#1}%
+  \ifx\gmht@test\gmht@firstpar\def\gmht@firstpar{#2}\fi%
+  \expandafter\ifx\csname r@\gmht@firstpar\endcsname\relax\relax%
+  #2\else\hyperlink{\gmht@firstpar}{#2}\fi%
+}}
+% \end{verbatim}
+% \Finale
+
+% (For my GNU Emacs:)
+%%% Local Variables: 
+%%% mode: doctex
+%%% End: 
-- 
cgit v1.2.3

