summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gmiflink
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gmiflink
Initial commit
Diffstat (limited to 'macros/latex/contrib/gmiflink')
-rw-r--r--macros/latex/contrib/gmiflink/README72
-rw-r--r--macros/latex/contrib/gmiflink/gmiflink.pdfbin0 -> 57792 bytes
-rw-r--r--macros/latex/contrib/gmiflink/gmiflink.sty214
-rw-r--r--macros/latex/contrib/gmiflink/gmiflinkDoc.pdfbin0 -> 58373 bytes
-rw-r--r--macros/latex/contrib/gmiflink/gmiflinkDoc.tex15
5 files changed, 301 insertions, 0 deletions
diff --git a/macros/latex/contrib/gmiflink/README b/macros/latex/contrib/gmiflink/README
new file mode 100644
index 0000000000..515d63aa3f
--- /dev/null
+++ b/macros/latex/contrib/gmiflink/README
@@ -0,0 +1,72 @@
+The gmiflink.sty LaTeX package
+is a work of Grzegorz `Natror' Murzynowski,
+<natror at o2 dot pl>
+
+
+1. Copyright 2005, 2006 by Grzegorz `Natror' Murzynowski
+
+This program is subject to the LaTeX Project Public License.
+See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+for the details of that license.
+
+
+2. Introduction
+
+The gmiflink.sty 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 hyperref.sty package.
+
+I used it for typesetting the names of the objects in a documentation
+of a computer program. If the object had been defined a \hyperlink to its
+definition was made, otherwise a plain object's name was typeset.
+I also use this package in automatic making of hyperlinking indexes.
+
+It provides the macros \gmiflink, \gmifref and
+\gmhypertarget for conditional making of hyperlinks in your document.
+
+\gmhypertarget makes a \hypertarget and a \label of the given name.
+
+\gmiflink makes a \hyperlink to the given \hypertarget if the
+correspondent label exists, otherwise typesets an ordinary text.
+
+\gmifref makes a (hyper-)\ref to the given label if the label exists,
+otherwise it typesets an ordinary text.
+
+
+3. Installation
+
+Just put the gmiflink.sty somewhere in the texmf/tex/latex
+branch. Creating a /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.
+
+
+4. Contents
+
+The distribution of this package consists of the following three files.
+
+gmiflink.sty
+README
+gmiflink.pdf
+
+
+5. Documentation
+
+The last of the above files (the .pdf) is a documentation compiled
+from the .sty file by running LaTeX (twice) on the gmiflink.sty
+file:
+xelatex gmiflink.sty
+ in the directory you wish the documentation to be in,
+you don't have copy the .sty file there---TeX will find it.
+Compiling of the documentation requires the packages: gmdoc
+(gmdoc.sty and gmdocc.cls), gmverb.sty, gmutils.sty and also some
+standard packages: hyperref.sty, xcolor.sty, geometry.sty,
+multicol.sty, lmodern.sty, fontenc.sty that should be installed
+on your computer by default.
+
+If you have not installed the mwart.cls class (available on CTAN in
+mwcls package), the result of your compilation may differ a bit from
+the .pdf provided in this .zip archive in formattings: If you have not
+installed mwart.cls, the standard article.cls will be used.
diff --git a/macros/latex/contrib/gmiflink/gmiflink.pdf b/macros/latex/contrib/gmiflink/gmiflink.pdf
new file mode 100644
index 0000000000..9d6e49d183
--- /dev/null
+++ b/macros/latex/contrib/gmiflink/gmiflink.pdf
Binary files differ
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:
diff --git a/macros/latex/contrib/gmiflink/gmiflinkDoc.pdf b/macros/latex/contrib/gmiflink/gmiflinkDoc.pdf
new file mode 100644
index 0000000000..1da4d31904
--- /dev/null
+++ b/macros/latex/contrib/gmiflink/gmiflinkDoc.pdf
Binary files differ
diff --git a/macros/latex/contrib/gmiflink/gmiflinkDoc.tex b/macros/latex/contrib/gmiflink/gmiflinkDoc.tex
new file mode 100644
index 0000000000..2e49b4e965
--- /dev/null
+++ b/macros/latex/contrib/gmiflink/gmiflinkDoc.tex
@@ -0,0 +1,15 @@
+% This file is just a~driver. To learn how to use it, read the README
+% or the documentation in .pdf
+\documentclass[noindex,nochanges, pagella]{gmdocc}% 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}
+\end{document}
+
+% The following is just my GNU Emacs stuff.
+%
+%%% Local Variables:
+%%% mode: latex
+%%% TeX-master: t
+%%% End: \ No newline at end of file