summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/morehype/use/texlinks.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/morehype/use/texlinks.sty')
-rw-r--r--macros/latex/contrib/morehype/use/texlinks.sty1554
1 files changed, 1554 insertions, 0 deletions
diff --git a/macros/latex/contrib/morehype/use/texlinks.sty b/macros/latex/contrib/morehype/use/texlinks.sty
new file mode 100644
index 0000000000..49469b247a
--- /dev/null
+++ b/macros/latex/contrib/morehype/use/texlinks.sty
@@ -0,0 +1,1554 @@
+\NeedsTeXFormat{LaTeX2e}[1994/12/01] %% \newcommand* etc.
+\ProvidesPackage{texlinks}[2015/07/20 v0.83 TeX-related links (UL)]
+%% copyright (C) 2011 2012 2013 2015 Uwe Lueck,
+%% http://www.contact-ednotes.sty.de.vu
+%% -- author-maintained in the sense of LPPL below.
+%%
+%% This file can be redistributed and/or modified under
+%% the terms of the LaTeX Project Public License; either
+%% version 1.3c of the License, or any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% We did our best to help you, but there is NO WARRANTY.
+%%
+%% Please report bugs, problems, and suggestions via
+%%
+%% http://www.contact-ednotes.sty.de.vu
+%%
+%% === \cs{newlet} === %% 2013/01/21
+%% |\newlet<cmd><cnd>| is a guarded `\let':
+\providecommand*{\newlet}[2]{\@ifdefinable#1{\let#1#2}}
+%%
+%% == Links in General == %% 2012/12/15
+%% === Outline ===
+%% % Almost %% 2011/07/23
+%% % all the %% including https 2011/08/27
+%% The link macros of 'texlinks' are based on macros
+%% |\httpref| and |\httpsref|. For use of 'texlinks' with 'blog.sty',
+%% the latter provides definitions of `\httpref' and `\httpsref'
+%% suitable for \HTML, where a choice of opening a new
+%% tab or window---or not---is relevant.
+%%
+%% For use with 'hyperref' (or ...?), 'texlinks' may
+%% provide definitions of `\httpref' and `\httpsref'
+%% based on `\href'. The decision to do so or not may happen at
+%% `\begin{document}'. 'blog.sty' generates \HTML\ without
+%% using the `{document}' environment, so we might assume
+%% that when `\begin{document}' is found, we are running
+%% 'hyperref', or just \emph{something} that provides a
+%% useful `\href'. We might then execute a definition of
+%% `\httpref' in terms of `\href'. Well, not sure ...
+%%
+%% Moreover, a \acro{PDF} file with links may be \emph{printed},
+%% and klicking the links on the paper may fail.
+%% \URL s in main text, on the other hand, sometimes are
+%% troublesome. I consider it a good idea to present
+%% links with their \URL\ as the displayed text in \emph{footnotes}
+%% (or endnotes). It may even be useful with \HTML\ to present
+%% the \URL s displayed in some
+%% %% 2011/01/27: %% rm. 2011/10/20
+%% ``appendix."---This idea has been resumed in v0.2 only, |\urlfoot|
+%% (\secref{urlfoot}). %% 2012/12/15
+%% %
+%% % I tend to introduce something for this ... and there might be a
+%% % package option forcing `\httpref' to use this style.
+%% % Well, better \emph{not today} ... [2011/01/24, TODO]
+%%
+%% === Package Options ===
+%% \label{sec:opt} %% 2013/01/21
+%% Somebody may want to suppress a definition of `\httpref'
+%% at `\begin{document}' ... [2011/01/24, TODO]
+%% %% 2011/02/10:
+%%
+%% v0.3: Package option |[blog]| suppresses \emph{any}
+%% `\AtBeginDocument' actions---fine for use with 'blog.sty'.
+\DeclareOption{blog}{\let\AtBeginDocument\@gobble}
+%% This option may be improved, and another option may be
+%% useful for different purposes than running 'blog.sty'.
+\ProcessOptions
+%%
+%% === Obvious Shorthands ===
+%% |\htm|, |\html|, and |\pdf| for typical filename extensions
+%% save a few tokens in macro definitions (v0.83):
+\newcommand*{\htm}{.htm}
+\newcommand*{\html}{\htm l} %% 2012/12/08 below previously
+\newcommand*{\pdf}{.pdf}
+%% |\DoubleArg{<cmd-maybe-args>}{<arg>}| (v0.83) works like
+%% \[`<cmd-maybe-args>{<arg>}{<arg>}'\]
+%% It replaces `\@double@first@arg' from v0.8;
+%% it may also be useful as a user command.
+%% It differs from \LaTeX's `\@dblarg' that adds
+%% a missing optional argument:
+\newcommand*{\DoubleArg}[2]{#1{#2}{#2}}
+%%
+%% === Formatting \URL s and File/Package Names ===
+%% %% <- was "Fonts for" 2013/02/20
+%% \label{sec:fonts} %% 2012/12/19
+%% %% ** Fonts for \URL s, File Names, and Package Names **
+%% %% new 2011/10/19, TODO: `meansltx'? vgl. `makedoc.cfg'
+%% This section ``provides" markup for displaying \URL s (|\urlfmt|),
+%% file names (|\filenamefmt|---thinking of single files
+%% that may be found in the internet or on your computer---,
+%% and ``packages" (|\pkgnamefmt|).
+%% For the latter two, in certain files I use shorthands
+%% |\file| and |\pkg|, resp., ...
+%% `\providecommand' will be used so that the user may choose %% 2012/12/28
+%% the style before loading 'texlinks'.
+%% (Once I may provide a variant of `\providecommand' %% 2012/12/28
+%% that postpones the ``provision" to the ``beginning" of the
+%% ``document", even with 'blog.sty' TODO)
+%%
+%% It is usual to use
+%% the same font as with %% 2012/12/28
+%% `\texttt' for formatting \TeX\ code
+%% (``verbatim", `\verb' etc.). It may also be common to use
+%% `\texttt' for file names, perhaps even for \URL s.
+%% Therefore we provide |\urlfmt{<url>}| as follows:
+\providecommand*{\urlfmt}{\texttt}
+%% The user may (later) choose a more advanced treatment by
+%% loading \ctanpkgstyref{url} and
+%% \[`\renewcommand{\urlfmt}{\url}'\]
+%%
+%% The file name format |\filenamefmt{<file-name>}|
+%% may differ from the format for \URL s---if somebody
+%% wants/adjusts it, \emph{here} it is the \emph{same:}
+\providecommand*{\filenamefmt}{\texttt}
+%% ...
+%% I favor `\code' over `\texttt' as ``logical markup,"
+%% inspired by the \xmltagcode{code} element in \HTML,
+%% but it is too difficult to provide this right now here ...
+%%
+%% (TODO 2012/12/29: This section seems to be relevant for
+%% \secref{url-text} only and might move there.)
+%%
+%% %% Instead of |\pkgnamefmt{<pack-name>}|,
+%% %% 'blog.sty' had `\pkg{<pack-name>}', %% was `prg' 2011/10/20
+%% %% without a proper implementation.
+%% |\pkgnamefmt{<package-name>}| displays the name of a ``package".
+%% Using `\textsf' for `\pkgnamefmt'
+%% seems to conform to common practice today---implemented here.
+%% The following code may later be suppressed at some package options,
+%% as with the choice for `\httpref': %% TODO 2011/01/24
+% \@ifdefinable\pkgnamefmt {\let\pkgnamefmt\@firstofone}
+% \AtBeginDocument {\let\pkgnamefmt\textsf}
+%% <- This was here until v0.7, makes a difference for \acro{PDF}
+%% vs.\ 'blog'/\HTML. %% / 2012/12/28
+%% [Cf.~\secref{opt}!? TODO]---%% 2013/01/21
+%% Now we choose the same as with `\urlfmt':
+\providecommand*{\pkgnamefmt}{\textsf}
+%% Indeed, the same day we are providing `\textsf' in 'blog.sty'.
+%% However, the rationale of the earlier solution was
+%% that web pages use sans-serif as the \emph{normal} font ...
+%%
+%% %% moving \httpsref 2011/08/27:
+%% === Providing &\httpref\ and &\httpsref ===
+%% %% rm. \kern-\baselineskip 2011/10/10
+%% \[|\httpref{<host-path[#frag]>}{<text>}|\]
+%% should display <text>
+%% as a link to `http://<host-path[#frag]>';
+%% \[|\httpsref{<host-path[#frag]>}{<text>}|\]
+%% is the obvious analogue for `https:' \URL s.
+%% In case `\begin{document}' is found with a definition of
+%% `\href' present, we provide definitions of `\httpref'
+%% and `\httpsref' in terms of `\href' there:
+\AtBeginDocument{%
+ \@ifundefined{href}{%
+% \PackageError ... TODO!? 2011/01/24
+ }{\newcommand*{\httpref} [1]{\href {http://#1}}%
+ \newcommand*{\httpsref}[1]{\href{https://#1}}}}
+%%
+%% === Variants of &\httpref\ and &\httpsref ===
+%% |\NormalHTTPref| may be used as an alias for `\httpref'
+%% in situations where the latter has been redefined %% v0.2
+%% (as in \secref{urlfoot}):
+\AtBeginDocument{\newlet\NormalHTTPref\httpref} %% TODO: sec:opt
+%% |\ithttpref{<url>}{<text>}| displays <text> in italics:
+% \newcommand*{\ithttpref}[2]{\NormalHTTPref{#1}{\textit{#2}}}
+%% However, I seem never to have used it. And I would now
+%% prefer |\metahttpref| TODO ...
+%%
+%% ==== Protocol Prefix ==== %% 2012/12/15
+%% |\httpprefix| is an idea that was missing in 'blog.sty' up to v0.3.
+%% It may be used to determine generally whether a display of an
+%% \URL\ should include `http://'. I choose as default what was default
+%% in 'blog.sty'
+%% (i.e., ``don't include"): %% add. 2011/01/27
+\newlet\httpprefix\@empty %% \newlet 2015/05/25
+%% `\let\httpprefix\relax' would be bad for 'blog.sty'
+%% (would display `\relax'),
+%% while it would be somewhat more efficient.%%%---%%%
+%%
+%% Now you may customize `\httpprefix' by
+%% \[`\renewcommand{\httpprefix}{http://}'\]
+%% %% v0.2:
+%% ---or by `\let\httpprefix'|\theHTTPprefix|:
+\newcommand*{\theHTTPprefix}{http://}
+%% With |\urlhttpsref{<url>}|, we \emph{force} displaying \qtd{`https://'}:
+\newcommand*{\urlhttpsref}[1]{\httpsref{#1}{\urlfmt{https://#1}}}
+%%
+%% ==== The \URL\ (or a Part) as the Link Text Phrase ==== %% (...) 2012/12/28
+%% \label{sec:url-text}
+%% With |\urlhttpref{<url>}|, that \URL\ <url> is displayed:
+\newcommand*{\urlhttpref}[1]{%
+ \NormalHTTPref{#1}{\urlfmt{\httpprefix#1}}}
+%% %% moved up here 2011/10/20
+%% In 'blog.sty' (as of 2010/05/26), there was a command
+%% `\urlref' instead of `\urlhttpref'. It did not provide `\urlfmt'.
+%%
+%% |\domainref{<domain>}{<path>}| is similar, but is intended
+%% to show the domain part <domain> of the \URL\
+%% `<domain>/<path>' only.
+%% This may be useful when the entire \URL\ does not look
+%% nice, while the domain name is a kind of logo,
+%% and when comparing what different web portals have
+%% to say about the same matter, such as the web versions
+%% of newspapers or magazines. So you may compare how
+%% %% v0.83 new example, \tugctanorg gone:
+%% % \domainref{www.ctan.org}{pkg/morehype} and
+%% % \domainref {\tugctanorg}{pkg/morehype} inform about %% \tugc... 2012/12/29
+%% % the 'morehype' bundle (v0.8).
+%% \domainref{www.ctan.org}{tex-archive/macros} and
+%% \domainref{tug.ctan.org}{tex-archive/macros}
+%% display the top-level `macros' directory of the \TeX\ archive.
+%% % The command is also used in \secref{wiki-stack}
+%% % for `tex.stackexchange.com'. %% why? rm. 2015/05/24 -- see below
+%% %% texblog 2012/06/08; v0.8 here
+\newcommand*{\domainref}[2]{\httpref{#1/#2}{\urlfmt{#1}}}
+%% Note that on some domains
+%% only domain, an article \acro{ID} and maybe the `.html'
+%% suffix and/or a ``category" between domain and \acro{ID}
+%% is required for a working \URL, as opposed to an \URL
+%% that is displayed in the browser's address line
+%% and contains a kind of transcription of the article's title---e.g.,
+%% \urlhttpref{tex.stackexchange.com/questions/84878}.
+%%
+%% v0.83 adds \ |\prefixref{<prefix>}{<suffix>}{<text>}| \
+%% just as an alias for `\domainref' because the same function
+%% may be useful in some cases when `<domain>/<path>',
+%% for some code strings <prefix> and <suffix>,
+%% is the same as `<prefix><suffix>' and `<prefix>'
+%% for some <category>,
+%% is the same as `<domain>/<category>':
+\newlet\prefixref\domainref
+%% Then you may compair how
+%% \[\prefixref{www.ctan.org/tex-archive}{macros}\]
+%% and \[\prefixref{tug.ctan.org/tex-archive}{macros}\]
+%% display the `generic' subdirectory of the `macros' directory.
+%%
+%% ==== Linking \URL s in Footnotes ==== %% 2011/08/27
+%% \label{sec:urlfoot}
+%% |\foothttpurlref{<url>}| just is like
+%% `\footnote{\urlhttpref{<url>}}':
+\newcommand*{\foothttpurlref}[1]{\footnote{\urlhttpref{#1}}}
+%% |\urlfoot{<short>}{<id>}|
+%% redefines `\httpref' so that you can use all the shorthand
+%% macros based on `\httpref' to get the according \URL\
+%% display (as provided by `\urlhttpref')
+%% in a footnote without the need to include the
+%% entire \URL\ in your source code. `\urlfoot' is available
+%% with <short> and <id>
+%% when a shorthand |\<short>{<id>}{<text>}| has been defined
+%% where `\<short>' is the macro name and <id> is the target
+%% identifier (usually part of the \URL\ generated from <id>)
+%% according to the syntax declaration of `\<short>'.
+\newcommand*{\urlfoot}[2]{{%
+ \let\httpref\foothttpurlref
+ \let\httpprefix\theHTTPprefix %% TODO customizable!?
+ \csname #1\endcsname{#2}{}}}
+%% \begin{example}\leavevmode
+%% \[`\CtanPkgRef{morehype}{MoreHype}'
+%% \mbox{\quad and\quad } `\ctanpkgref{morehype}'\]
+%% are provided in \secref{sing-pkgs} for linking to
+%% `http://ctan.org/pkg/morehype'.
+%% \begin{itemize}
+%% \item
+%% % Try `CtanPkgRef' \emph{here}:
+%% % \CtanPkgRef{morehype}{MoreHype},\\
+%% % for the \emph{footnote} try
+%% % `\urlfoot{CtanPkgRef}{morehype}';%%%
+%% % \urlfoot{CtanPkgRef}{morehype}
+%% \simpleyields{\CtanPkgRef{morehype}{MoreHype}} %% etc. 2012/12/30
+%% \item
+%% \simplecodefbox{\urlfoot{CtanPkgRef}{morehype}}
+%% yields \urlfoot{CtanPkgRef}{morehype}
+%% \item
+%% % try `ctanpkgref' \emph{here}: \ctanpkgref{morehype},\\
+%% \simpleyields{\ctanpkgref{morehype}}
+%% \item
+%% % for the \emph{footnote} try
+%% % `\urlfoot{ctanpkgref}{morehype}'.%%%
+%% % \urlfoot{ctanpkgref}{morehype}
+%% \simplecodefbox{\urlfoot{ctanpkgref}{morehype}}
+%% yields \urlfoot{ctanpkgref}{morehype}
+%% \end{itemize}
+%% The lonely \qtd{\pkgnamefmt{morehype}} you see there above
+%% demonstrates that it doesn't work with `ctanpkgref' because
+%% `\ctanpkgref' doesn't have separate arguments for
+%% <id> and <text>, it actually doubles <id>.
+%% A local `\let\ctanpkgref\CtanPkgRef' could help,
+%% but right now I prefer waiting for a better idea.
+%% [TODO] %% 2011/01/27
+%% \end{example}
+%%
+%% v0.3: Now that using `\urlfoot' and `ctanpkgref' together
+%% is so clumsy, while I use it quite often, %% 2011/02/10
+%% we get |\urlpkgfoot{<package-id>}|, abbreviating
+%% `\urlfoot{CtanPkgRef}{<package-id>}':
+\newcommand* {\urlpkgfoot} {\urlfoot{CtanPkgRef}}
+%% ==== \URL\ Bases ==== %% 2012/03/09
+%% \label{sec:bases}
+%% We typically refer to many web pages under a certain domain,
+%% or in certain subdirectories there. Before v0.6,
+%% I made many definitions like
+%% \[`\newcommand*{\myref}[1]{\httpref{<my-base>/#1}}'\]
+%% for this purpose.
+%% Storing the definition of such a `\myref' uses 8 tokens
+%% %% including parameter ... %% todo done 2012/12/17
+%% in addition to those from <my-base>.
+%% With
+%% \[`\newcommand*{\myref}{\httpbaseref{<my-base>}}'\] %% } 2012/12/17
+%% we need 5 %% was 3 2012/12/17
+%% tokens instead, using \ |\httpbaseref{<base>}{<rest>}{<text>}| \
+%% %% <- added text 2013/01/21
+%% defined as follows:
+\newcommand*{\httpbaseref}[2]{\httpref{#1/#2}}
+%% Then `\myref{<rest>}{<text>}' will work like %% 2013/01/21
+%% \[`\httpref{<my-base>/<rest>}{<text>}'\]
+%% We change many definitions in ensuing sections accordingly---and
+%% with v0.82 we add a shorthand for definitions like the avove one
+%% for `\myref'. \[|\MakeBasedHref{<cmd>}{<base>}|\] may be applied
+%% as \[`\MakeBasedHref{\myref}{<my-base>}'\] above. In the general
+%% situation, `<cmd>{<path>}{<text>}' will work like
+%% \[`\httpref{<base>/<path>}{<text>}'\] %% own line 2015/03/27
+%% v0.83 extends this to `https'
+%% (has been tested in `texblog.fdf' for more than a year):
+\newcommand*{\httpsbaseref}[2]{\httpsref{#1/#2}} %% 2014/03/21
+%% provides |\httpsbaseref{<base>}{<rest>}{<text>}|.
+\newcommand*{\MakeBasedHref}[3][http]{% %% 2014/03/21
+ \ifx#2\@undefined \else \ifx#2\relax %% was \ifx#1 2014/12/23
+ \PackageWarning{texlinks}{Redefining \string#2.}%
+ \fi \fi
+ \expandafter\def\expandafter#2\expandafter{%
+%% ... or `\DefExpandStart' from \ctanpkgstyref{dowith} TODO ...
+ \csname#1baseref\endcsname{#3}}%
+}
+%% This also provides an optional argument for choosing `https'
+%% instead of `http':
+%% \[|\MakeBasedHref[https]{<cmd>}{<base>}|\]
+%% Now `\newcommand*{\mysecureref}{\httpsbaseref{<my-secure-base>}}'
+%% may be replaced by
+%% \[`\MakeBasedHref{\mysecureref}{<my-base>}'\] --
+%% However, `\MakeBasedHref' does not act like `\newcommand'
+%% when <cmd> has been defined earlier, it rather resembles
+%% `\DeclareRobustCommand', in that it just \emph{warns} in such a case.
+%% I don't actually make <cmd> robust because I guess it is anyway:
+%% The reason for allowing redefinitions has been application
+%% to cases where the user should be able to customize commands
+%% (\secref{custom-ref})---well,
+%% I could have `\NewBasedHref' and `\RenewBasedHref' some time
+%% TODO\footnote{And for sections \ref{sec:wiki-back} and
+%% \ref{sec:wikibooks}, an optional argument
+%% would have been nice.};
+%% TODO: `\@onlypreamble'?
+%%
+%% The situation is similar with (many) anchors of a (large) web page.
+%% With v0.6, we introduce
+%% \[|\httpancref{<page-url>}{<anchor>}|\]---\emph{perhaps},
+%% with `\mirrorctanref' (\secref{texcat}) etc.? TODO
+% \newcommand*{\httpancref}[2]{\httpref{#1\##2}}
+%%
+%%
+%% == Google == %% 2012/12/17
+%% |\googleref{<keywords>}{<text>}| \ generates a \Wikiref{Google}
+%% search page with keywords from <keywords> in which they
+%% are separated by \qtdcode{+}, as in
+%% \[`\googleref{tex+friends}{\TeX~\& friends}'\]
+%% which results in (I'm curious ...)
+%% \googleref{tex+friends}{\TeX~\& friends:}
+\newcommand*{\googlecom}{google.com/}
+% \newcommand*{\googleref}[1]{\httpref{\googlecom\#q=#1}}
+%% ... correct link has been very different since 2012: %% 2014/05/25
+\newcommand*{\googleref}[1]{\httpref{\googlecom/search?q=#1}}
+%% |\googlemapsref{<keywords>}{<text>}| \ generates a
+%% \wikiref{Google Maps}{Google map} from the <keywords>.
+%% <keywords> may compose an address for a \TeX\ users' meeting,
+%% so Google may show them their way.
+%% \[<keywords>=\mbox{\qtdcode{munich+offenbachstrasse+21}}\]
+%% results in \googlemapsref{munich+offenbachstrasse+21}
+%% {where this has been written.}
+\newcommand*{\googlemapsref}[1]{\httpref{maps.\googlecom maps?q=#1}}
+%%
+%% == Wikipedia ==
+%% === Overview ===
+%% \label{sec:wiki-stack}
+%% The present section on links to Wikipedia articles
+%% starts with the rather obvious
+%% \[|\wikilangref{<language-code>}{<lemma>}{<text>}|\]
+%% but then gets somewhat technical. \secref{langcode}
+%% may please the user again by
+%% \[|\Wikiref{<lemma>}|\]
+%% where the language version of the Wikipedia is chosen
+%% according to a macro `\langcode' expanding to \qtdcode{en}
+%% by default. On
+%% \domainref{tex.stackexchange.com}{/questions/84878},
+%% I have posted the following ``minimal working example:"
+%% \begin{verbatim}
+%% \documentclass{minimal}
+%% \usepackage{hyperref,texlinks}
+%% \begin{document}
+%% Look up \wikiref{Charlie Bucket}{Wikipedia}
+%% for \Wikiref{Charlie Bucket}.
+%% \end{document}
+%% \end{verbatim}
+%% You may find it as `wiki_mwe.tex' with outcome `wiki_mwe.pdf'.
+%% See \secref{langcode} for more examples. %% 2012/12/30
+%%
+%% Apart from `\langcode', more advanced things are
+%% \emph{disambiguation} (\secref{wiki-back}),
+%% ``piped links" (\secref{wiki-pipe}), and
+%% special characters in \URL s (\secref{wiki-urls}).
+%%
+%% %% 2015/05/19:
+%% Starting in spring 2015, the 'morehype' bundle offers
+%% an additional package 'wikimed.sty' that includes
+%% Wikipedias ``sister projects" like Wiktionary and
+%% provides a variant of \wikienref{URL encoding}{\URL\ encoding},
+%% converting punctuation and things like umlauts for valid \URL s.
+%%
+%% === Backbones ===
+%% \label{sec:wiki-back}
+%% As of v0.6, we have a \dqtd{backbone} macro
+%% \[|\wikilangref{<language-code>}{<lemma>}{<text>}|\]
+%% for links to Wikipedia.
+%% (It was |\wikiref| before, starting with v0.4---sorry!)
+%% <language-code> consists of
+%% two characters like \lq`de'\rq\ for German Wikipedia articles
+%% or \lq`en'\rq\ for English ones. <lemma> is the identifier of
+%% the article, and <text> is displayed as the link:
+% \newcommand*{\wikilangref}[2]{\httpref{#1.wikipedia.org/wiki/#2}}
+%% <- 2012/03/09 etc. with \secref{bases} ->
+\newcommand*{\wikilangref}[1]{\httpbaseref{#1.wikipedia.org/wiki}}
+%% There is |\Wikilangref{<language-code>}{<lemma>}|
+%% for the case that <lemma> and <text> are the same.
+%% With v0.7 however, this command becomes more powerful,
+%% see \secref{wiki-pipe}.
+% \newcommand*{\Wikilangref}[2]{\wikilangref{#1}{#2}{#2}}
+%% `\wikilangref{<lang>}[<lemma>]{<text>}' would be nicer;
+%% %% <- shortened 2012/01/06 ->
+%% however, the present code is to work with 'blog.sty'
+%% which does not support optional arguments.%%%---
+%%
+%% Quite often, programs share their names with movies,
+%% biological species, etc., then lemma disambiguation is required.
+%% Usually, we don't want to display the disambiguation.
+%% \[|\Wikilangdisambref{<language-code>}{<term>}{<tag>}|\]
+%% will link to
+%% \[`http://<language-code>.wikipedia.org/wiki/<term>_(<tag>)'\]
+\newcommand*{\Wikilangdisambref}[3]{\wikilangref{#1}{#2 (#3)}{#2}}
+%% There %% was `Their' 2011/07/23
+%% was something like a more general variant |\wikidisambref|,
+%% now I doubt its usefulness and \textcolor{blue}{omit} it
+%% in order to see where it occurs (2011/05/13).
+%%
+%% For \strong{anchors}, \qtd{&#} can be used with 'blog.sty'---and
+%% even with 'hyperref'.
+%% \simpleexample{\wikilangref{en}{TeX#History}{history}}
+%%
+%% === Piped Links ===
+%% \label{sec:wiki-pipe}
+%% v0.7 emulates Wikipedia's
+%% \wikiref{Help:Links\#Piped_link}{piped links} %% was "Piped links" 2012/12/01
+%% as with Wikipedia source code \[`[[Pipeline|Pipe]]'\]
+%% to get a link to article \qtd{\Wikiref{Pipeline}} %% \Wikiref 2012/12/01
+%% with displayed text
+%% \qtd{\wikiref{Pipeline}{Pipe}}. The same syntax
+%% (double brackets) is actually supported by
+%% 'blog.sty' with 'markblog.sty', %% was `blogexec' 2012/12/06
+%% while otherwise only
+%% \[\GenCmdBox+\Wikilangref{<language-code>}{<lemma>|<text>}+\]
+%% works---with settings more below something like
+%% \GenCmdBox+\Wikiref{<lemma>|<text>}+---which
+%% admittedly is not much better than the equivalent
+%% \[`\wikiref{<lemma>}{<text>}'\]
+%%
+%% Even Wikipedia's feature that empty <text> removes
+%% the disambiguation term as with `[[Pipe (computing)|]]'
+%% resulting in \qtd{\wikiref{Pipe (computing)}{Pipe}}
+%% is supported.
+\newcommand*{\Wikilangref}[2]{%
+ \@wikilpref{#1}#2\BiteSep|\@nnil\BiteSep\@nil{#2}}
+%% I have introduced `\BiteSep' and this kind of parsing
+%% in the \ctanpkgdref{bitelist} package.
+\def\@wikilpref#1#2|#3\BiteSep#4\@nil#5{%
+ \ifx\@nnil#3\@empty
+ \wikilangref{#1}{#5}{#5}%
+ \else
+ \wikilangref{#1}{#2}{%
+ \ifx\@three#3\@three
+ \wiki@noparen#2\@nil%
+ \else
+ #3%
+ \fi}%
+ \fi}
+\def\wiki@noparen#1 (#2\@nil{#1}
+%% (Removing 'bitelist' considerations 2015/05/22 ...
+%% % I have thought about improving 'bitelist.sty', resulting
+%% % in the following code. In the present application,
+%% % I do not consider it superior. It uses
+%% % the same number of tokens but new one has additional
+%% % expansion step. The situation is different to the general case
+%% % because doing everything before `\fi' is okay here.
+%% % \newcommand*{\Wikilangref}[2]{%
+%% % \@wikilPref{#1}#2\BiteSep\@secondoftwo
+%% % |\BiteSep\@firstoftwo\@nil{#2}}
+%% % \def\@wikilPref#1#2|#3\BiteSep#4#5\@nil#6{%
+%% % #4{\wikilangref{#1}{#6}{#6}}%
+%% % {\wikilangref{#1}{#2}{%
+%% % \ifx\@three#3\@three
+%% % \wiki@noparen#2\@nil%
+%% % \else
+%% % #3%
+%% % \fi}}}
+%%
+%% === English and German ===
+%% The next macros just save you from typing braces around
+%% the language codes for English and German:
+%% |\wikienref{<lemma>}{<text>}| refers to the English Wikipedia,
+%% |\wikideref{<lemma>}{<text>}| refers to the German one.
+\newcommand*{\wikideref}{\wikilangref{de}}
+\newcommand*{\wikienref}{\wikilangref{en}}
+%% |\Wikideref{<lemma>}| refers to article <lemma> in the German
+%% Wikipedia and displays <lemma> as <text>:
+\newcommand*{\Wikideref}{\Wikilangref{de}}
+%% |\Wikienref{<lemma>}| is `\Wikideref''s analogue for English:
+\newcommand*{\Wikienref}{\Wikilangref{en}}
+%% |\Wikidedisambref{<lemma>}{<tag>}| chooses a disambiguation
+%% according to <tag> for the German Wikipedia,
+%% |\Wikiendisambref{<lemma>}{<tag>}| for the English one:
+\newcommand*{\Wikidedisambref}{\Wikilangdisambref{de}}
+\newcommand*{\Wikiendisambref}{\Wikilangdisambref{en}}
+%%
+%% === ``Implicit" Choice of Language === %% 2012/01/06
+%% \label{sec:langcode}
+%% With v0.6, |\wikiref{<lemma>}{<text>}| works like
+%% \[`\wikilangref{<lc>}{<lemma>}{<text>}'\] %% ref 2012/10/24
+%% when |\langcode| expands to <lc>
+%% (the two-letter language code according to \Wikiref{ISO 639-1}).
+%% The default for <lc> is \qtdcode{en} for English.
+%% It can be overridden even before loading 'texlinks'
+%% (e.g., by an earlier `\newcommand\langcode{de}'):
+\providecommand*{\langcode}{en}
+%% %% mod. 2012/10/24:
+%% For the German versions, use \ `\renewcommand{\langcode}{de}'. \
+%% The \ctanpkgref{langcode} package provides a command \
+%% |\uselangcode{<lc>}| \ that works like
+%% \ `\renewcommand*{\langcode}{<lc>}' \
+%% and adjusts a number of other settings.
+\newcommand*{\wikiref}{\wikilangref\langcode}
+%% %% adding args 2012/12/17:
+%% |\Wikiref{<lemma>}| and |\Wikidisambref{<term>}{<add>}| %% second \ 2012/12/29
+%% are the obvious analogues (cf. \secref{wiki-back}):
+\newcommand*{\Wikiref}{\Wikilangref\langcode}
+\newcommand*{\Wikidisambref}{\Wikilangdisambref\langcode}
+%% \begin{simpleexamples}
+%% \simpleexample{\Wikiref{LaTeX}}
+%% \simpleexample{\wikiref{LaTeX}{&\LaTeX}}
+%% \simpleexample{\Wikidisambref{Latex}{disambiguation}}
+%% \end{simpleexamples}
+%%
+%% === Blanks and Umlauts in \URL s and Anchors ===
+%% \label{sec:wiki-urls}
+%% %% <- renamed 2011/05/17 reworked:
+%% |\underscorechar| seemed to be useful in macro
+%% definitions. The name was inspired by \LaTeX's
+%% `\@backslashchar' and `\@percentchar'.
+%% However, I am now trying what happens without it.
+%% It occurred in `blog.tex' for the documentation of
+%% the 'blog' package, but `\string_' seems to be a good
+%% replacement.
+% \newcommand \underscorechar {}
+% {\@makeother\_ \gdef\underscorechar{_}}
+%% Anyway, in my notes I have a more elegant macro for
+%% providing ``other" versions of special characters.
+%%
+%% Guessing what `\underscorechar' was good for (2011-05-17):
+%% Wikipedia lemmas and anchors often or even \emph{typically}
+%% contain \emph{blank spaces}.
+%% The Wikipedia software usually converts them into
+%% underscore characters. Blank spaces in \emph{lemmas}
+%% seem \emph{not} to need treatment here in 'texlinks'.
+%% However, Wikipedia also creates \emph{anchors} from
+%% \emph{section headings}, which typically contain blank spaces.
+%% This has been more difficult ...
+%%
+%% Likewise with umlauts: text encoding suffices for \emph{lemmas}
+%% (my `\urluml' is not needed for this purpose).
+%% But umlauts in \emph{anchors}
+%% generated from \emph{section headings} are different.
+%% While umlauts in \emph{lemmas} are represented by sequences
+%% starting with a \emph{percent} character, the anchors
+%% use a \emph{dot} instead of the percent character.
+%% Therefore now |\ancuml{<char>}| is provided:
+\newcommand*{\ancuml}[1]{\csname ancuml:#1\endcsname}
+\@namedef{ancuml:a}{.C3.A4}
+\@namedef{ancuml:o}{.C3.B6}
+\@namedef{ancuml:u}{.C3.BC}
+\@namedef{ancuml:s}{.C3.9F}
+%% %% comments removed 2012/01/11:
+%% % What you read in the rest of the section is
+%% % \textcolor{blue}{wrong}, the commands are
+%% % \textcolor{blue}{dropped} for testing as of 2011/05/13.
+%% % |\itwikideref| is an italic variant of `\wikideref':
+% \newcommand*{\itwikideref}[2]{\wikideref{#1}{\textit{#2}}}
+%% % By analogy to `\Wikideref',
+%% % The following macros save you from typing the underscore
+%% % (didn't spaces suffice sometimes?) %% TODO 2011/01/24
+%% % and the round parantheses.
+%% % Italic variant |\itwikienref| of `\wikienref'
+%% % ('blog.sty' had `\emwikienref' instead):
+% \newcommand*{\itwikienref}[2]{\wikienref{#1}{\textit{#2}}}
+%% % |\urluml{<ascii-char>}| as of 2010/05/25
+%% % (not sure if it ever worked or was actually needed):
+% \newcommand*{\urluml}[1]{\csname urluml:#1\endcsname}
+% \@namedef{urluml:a}{\#C3\#A4}
+% \@namedef{urluml:o}{\#C3\#B6}
+% \@namedef{urluml:u}{\#C3\#BC}
+% \@namedef{urluml:s}{\#C3\#9F} %% 2010/08/09
+%%
+%% == \TeX-related == %% 2010/08/24
+%% === \CTAN ===
+%% \label{sec:ctan}
+%% %% new from scratch 2015/05/16f.:
+%% ==== Personal motivation ====
+%% When I created `texlinks.sty' originally, referring to
+%% \CTAN\ material seemed simple to me. Well, what is \CTAN?
+%% Please don't ask me, see the \wikiref{CTAN}{Wikipedia article}
+%% and/or its major ``home page" \urlhttpref{www.ctan.org}---or
+%% \CTAN\ introducing itself on \urlhttpref{ctan.org/ctan}---or
+%% the \ukfaqref{ctan}{\acro{UK FAQ}!}---Well,
+%% in order to generate \wikiref{URL}{\URL}s from human-readable
+%% or memorizable input and to document my macros that try to
+%% serve this purpose, I must guess what a domain or \CTAN\ has in
+%% mind when they provide \URL s, while they don't seem to tell us
+%% what they have in mind and what rules they follow. So I am just
+%% reporting what I observed and what I guess, and I am trying to
+%% introduce two technical terms ... \ The ``discovery" section
+%% (\secref{ctan-discovery}) may be confusing, then I hope that
+%% the ``summarizing section" (\secref{ctan-tables})
+%% will help by its tables.---The present \CTAN\ section (\secref{ctan})
+%% became especially difficult in December 2012
+%% (cf. \ctanannpref{12-12-006718}{\CTAN\ announcement})
+%% and January 2013 when some \URL s stopped to work
+%% or changed their behavior---several times very much
+%% within a few days---and I struggled to follow.
+%%
+%% ==== \CTAN ology: kinds of \CTAN\ \URL s (archives, bases) ====
+%% % \subsubsection{\CTAN ology:\titlefootnote{A moment ago,
+%% % \wikienref{L. Ron Hubbard}{L.~Ron Hubbard}
+%% % kindly suggested the section's title to me.}
+%% % \ \ kinds of \CTAN\ \URL s (archives, bases)}
+%% \label{sec:ctan-discovery}
+%% \strong{One thing} are \strong{files} that have been \strong{contributed}
+%% to the \strong{\CTAN\ archive} so that \strong{users} can download
+%% them in order to run \TeX\ on their computers, especially for new
+%% features that have been made available only in recent months.
+%% Such files are submitted to the/a \CTAN\ archive, available through
+%% certain \URL s over the internet.
+%%
+%% It seems that after some years it became difficult to understand
+%% what features have been provided by so many contributors and
+%% how to find them. For a while, the `help' subtree of a \CTAN\ archive
+%% tried to help here (especially the \emph{\TeX\ catalogue}) ...
+%% but eventually only experts could understand the abundance.
+%% So a starting page just for providing tools for
+%% \strong{exploring} the \TeX\ archive became useful and was
+%% provided---over certain \URL s. Here I have called pages
+%% available by such \URL s as ``\CTAN\ \strong{description}"
+%% pages or so---\strong{second thing}.
+%%
+%% In order to save internet capacity (per time,
+%% and to save users' patience), \strong{\Wikiref{web mirror}}s
+%% of both archive and description pages have been established
+%% and maintained---copies of the central directory structure.
+%%
+%% I have seen two kinds of \strong{\URL s} interesting here:
+%% \begin{itemize}
+%% \item \strong{domains} ending on `ctan.org'
+%% \item \URL s ending on `/tex-archive'
+%% \end{itemize}
+%%
+%% \TeX\ \strong{archive} \URL s show (only) a list of top-level
+%% directories `biblio'..., `dviware', `fonts', `graphics',
+%% `help', `indexing', `info', `install', `language'...,
+%% `macros', `obsolete', `support', `systems', `tds',
+%% `usergrps', and `web'. This is what characterizes \TeX\
+%% \emph{archives} or their \emph{roots}, as opposed to
+%% \emph{description} pages, by their \strong{content}
+%% (as opposed to characterization by the form of \strong{\URL s}).
+%% Including deeper subdirectories, the directory structures
+%% of all \TeX\ archives are the same (``mirrors"). They
+%% change by new contributions, but within 24 hours,
+%% other \TeX\ archives copy the changes of the first
+%% one.---There are several \strong{designs} of archive root pages,
+%% varying between archive \emph{mirrors.}
+%%
+%% \CTAN\ \strong{description} pages have \emph{roots} as well,
+%% and 'texlinks' previously has chosen macro names containing
+%% `ctanorgbase' for accessing them, so there is an idea to call those roots
+%% \strong{\CTAN\ bases}. In spring 2015, all bases I know
+%% have the same \strong{design}, and they actually \emph{combine}
+%% archive and description: an upper section shows the
+%% archive top-level directories, the remaining page offers
+%% the description/exploring tools. To compare bases with archives
+%% in terms of top-level subdirectories, I know of \CTAN\ base
+%% subdirectories `pkg', `author', `topic', and `tex-archive'.
+%%
+%%
+%% ==== Summary tables with macro names ====
+%% \label{sec:ctan-tables}
+%% In the following tables, a macro in the right-hand column
+%% is just \emph{one} to access paths under the corresponding
+%% \URL\ in the left-hand column, so the list of macros
+%% probably is not complete here, it just is to give an \emph{idea}
+%% for the following sections. The `\nullctan'\codedots\
+%% macros keep some `\ctan'\codedots\ control sequences free
+%% so the latter are available as shorthands for accessing the users'
+%% favorite domains.
+%%
+%% \vskip\medskipamount %%% \noindent
+%% The first table is a list of \URL s resolving to
+%% \CTAN\ description bases according to the previous subsection
+%% (\secref{ctan-discovery}) I know of.
+%% (It shrinked and changed much after some very recent discoveries of mine.)
+%% Sections starting at \secref{sing-pkgs} tell about many more
+%% macros for accessing description pages. %% 2015/05/20
+%% \MakeOther\|\MakeNormal\&
+%% % \noNiceVerb
+%% \begin{center}
+%% \begin{tabular}{|r|r|}
+%% \hline
+%% \multicolumn{2}{|c|}{\strong{\CTAN\ bases for package descriptions}} \\
+%% \hline \hline
+%% \multicolumn{1}{|c|}{\strong{\URL}} & \multicolumn{1}{c|}{\strong{macro}} \\
+%% \hline \hline
+%% \urlhttpref{www.ctan.org} & `\wwwctanorgbaseref{<path>}{<text>}' \\
+%% \hline
+%% \urlhttpref{ctan.org} & `\nullctanorgbaseref{<path>}{<text>}' \\
+%% \hline
+%% \urlhttpref{dante.ctan.org} & \multicolumn{1}{c|}{---}\\
+%% \hline
+%% \end{tabular}
+%% \end{center}
+%% \MakeActiveLet\|\nvCmdBox\MakeActiveLet\&\CmdSyntaxVerb
+%% % \useNiceVerb
+%% \strong{Remarks:}\enspace (a)~|www.ctan.org| and |ctan.org|
+%% have the same functionality.
+%%
+%% (b)~|\nullctanorgbaseref| appears here rather than |\ctanorgbaseref|
+%% because the latter is used as an alias for either
+%% |\wwwctanorgbaseref| or `\nullctanorgbaseref', by default for
+%% `\ctanorgbaseref', cf. \secref{sing-pkgs}.
+%%
+%% (c)~|dante.ctan.org| just redirects to |www.ctan.org|.
+%% \vskip\medskipamount %%% \pagebreak %%% \noindent
+%% The second table is a list of \URL s resolving to
+%% \CTAN\ \TeX\ archives according to the previous subsection
+%% (\secref{ctan-discovery}) I know of.
+%% Macros are described from \secref{texarc} onwards.
+%% \MakeOther\|\MakeNormal\&
+%% % \noNiceVerb
+%% \begin{center}
+%% \begin{tabular}{|r|r|}
+%% \hline
+%% \multicolumn{2}{|c|}{\strong{\CTAN\ archives}} \\
+%% \hline \hline
+%% \multicolumn{1}{|c|}{\strong{\URL}} & \multicolumn{1}{c|}{\strong{macro}} \\
+%% \hline \hline
+%% \urlhttpref{www.ctan.org/tex-archive} & `\wwwctanref{<path>}{<text>}' \\
+%% \hline
+%% \urlhttpref{ctan.org/tex-archive} & `\nullctanref{<path>}{<text>}' \\
+%% \hline \hline
+%% \urlhttpref{tug.ctan.org/tex-archive} & \multicolumn{1}{c|}{---} \\
+%% \hline
+%% \urlhttpref{tug.ctan.org} & `\tugctanref{<path>}{<text>}' \\
+%% \hline
+%% \urlhttpref{dante.ctan.org/tex-archive} & `\dantectanref{<path>}{<text>}'\\
+%% \hline
+%% \urlhttpref{ctan.sciserv.eu} & `\sciservref{<path>}{<text>}' \\
+%% \hline \hline
+%% \urlhttpref{mirror.ctan.org} & `\mirrorctanref{<path>}{<text>}'\\
+%% \hline
+%% `<domain>/<path>tex-archive' & \multicolumn{1}{c|}{TODO} \\
+%% \hline
+%% `<domain>/<path>ctan/' & \multicolumn{1}{c|}{TODO} \\
+%% \hline
+%% `<domain>' & \multicolumn{1}{c|}{TODO} \\
+%% \hline
+%% \end{tabular}
+%% \end{center}
+%% \MakeActiveLet\|\nvCmdBox\MakeActiveLet\&\CmdSyntaxVerb
+%% % \useNiceVerb
+%% \strong{Remarks:}\enspace \ \ (a)~|\nullctanref|
+%% rather than |\ctanref| appears here because the latter
+%% is used as an alias for one of the other `ctanref' commands,
+%% by default for `\mirrorctanref', cf. \secref{texarc}.
+%%
+%% (b)~|tug.ctan.org/tex-archive|,\quad |tug.ctan.org|,
+%% \[|dante.ctan.org/tex-archive|\mbox{,\quad and\quad} |ctan.sciserv.eu|\]
+%% have the same functionality;
+%% which includes (i)~that they show the same page of its own
+%% design and (z)~that this page includes a few lines of links
+%% to the basic functions of `www.ctan.org'. The design is much
+%% less heavy than the design of `www.ctan.org' with respect
+%% to ($\alpha$)~graphics and to ($\beta$)~the number of columns.
+%% At its bottom, the page describes itself as ``experimental"
+%% and as dating from February~2015 (observed in May 2015).
+%%
+%% (c)~\strong{Examples} for |<domain>/<path>/tex-archive|, %%%\quad
+%% |<domain>/<path>ctan| and |<domain>|
+%% (as listed below `mirror.ctan.org')
+%% are \strong{\wikienref{web mirror}{mirrors}} of
+%% \[|ctan.org/tex-archive|\mbox{\quad or \quad}
+%% |www.ctan.org/tex-archive|\]
+%% and appear as (somewhat random) resolutions of |mirror.ctan.org|.
+%% <path> may be empty.
+%% |tug.ctan.org| and |ctan.sciserv.eu| listed earlier
+%% actually are examples of the last entry,
+%% and |dante.ctan.org/tex-archive| exemplifies the other
+%% lower entry. The file \ctanfileref{CTAN.sites}
+%% in the root directory of any \TeX\ archive should
+%% contain all the example \URL s to which `mirror.ctan.org'
+%% resolves. However, my intention (which failed) for
+%% the final table entries was that they exemplify mirrors
+%% with rather \emph{simple} directory designs,
+%% as opposed to the \URL s listed in the upper part
+%% of the table.
+%%
+%%
+%% ==== Some \CTAN\ Domains ====
+%% \label{sec:domains} %% 2015/05/22
+%% |\ctanorg| saves a few tokens, using |\nullctanorg| for |ctan.org|
+%% (latter new with v0.83, keeping ultimate expansion of `\ctanorg' from prior
+%% versions).
+\newcommand*{\nullctanorg}{ctan.org}
+\newcommand*{\ctanorg}{.\nullctanorg}
+%% `\nullctanorg' and |\wwwctanorg| are useful both for
+%% description pages and \TeX\ archives:
+\newcommand*{\wwwctanorg}{www\ctanorg}
+%% % Instances are |tug.ctan.org| (|\tugctanorg|),
+%% % |www.ctan.org| (|\wwwctanorg|):
+%% % |dante.ctan.org| (|\dantectanorg|):
+%% % \newcommand*{\tugctanorg} {tug\ctanorg}
+%% % \newcommand*{\wwwctanorg} {www\ctanorg}
+%% % \newcommand*{\dantectanorg} {dante\ctanorg}
+%% % \newcommand*{\mirrorctanorg}{mirror\ctanorg}
+%% Referring to \strong{``description"} pages
+%% according to \secref{ctan-discovery}
+%% (`\httpbaseref' from \secref{bases}):\MDdocnewline
+%% |\wwwctanorgbaseref{<path>}{<text>}| \ links to |www.ctan.org|:
+\newcommand*{\wwwctanorgbaseref}{\httpbaseref\wwwctanorg}
+%% |\nullctanorgbaseref{<path>}{<text>}| is like
+%% the previous command without `www.':
+\newcommand*{\nullctanorgbaseref}{\httpbaseref\nullctanorg}
+%% |\metactan@ref{<sub>}{<ref-cmd>}| for some ``null" vs.
+%% `www'-commands that are defined in \secref{sing-pkgs}:
+\newcommand*{\metactan@ref}[3]{#2{#1/#3}}
+%%
+%% ==== Fixed Macros for Paths in Various \TeX\ Archives ==== %% 2015/05/22
+%% \label{sec:texarc} %% 2013/01/19
+%% \paragraph{Shorthands for paths.}
+%% |\texarchive| saves a few tokens: %% 2015/05/21
+\newcommand*{\texarchive}{/tex-archive}
+%% Typically, \LaTeX\ macro packages in `macros/latex/contrib/'
+%% are discussed, so here is |\ltxcontrib| saving both characters
+%% and tokens
+%% (no starting slash so it can be used with `\httpbaseref';
+%% likewise no final one---hopefully only used in present demos
+%% before v0.83):
+\newcommand*{\ltxcontrib}{macros/latex/contrib}
+%% We now proceed along the second table of \secref{ctan-tables}:
+%% \paragraph{Advanced design of directories.}
+%% \TeX\ archive directories on |www.ctan.org|
+%% and |ctan.org| show an advanced design,
+%% as compared with mirror \TeX\ archives.
+%% They can be accessed by
+%% \begin{itemize}
+%% \item |\wwwctanref{<path>}{<text>}| and
+%% \item |\nullctanref{<path>}{<text>}| respectively
+%% \end{itemize}
+%% (<path> without starting slash):
+\MakeBasedHref{\wwwctanref} {\wwwctanorg/\texarchive}
+\MakeBasedHref{\nullctanref}{\nullctanorg/\texarchive}
+%% \begin{simpleexamples}
+%% \simpleexample{\wwwctanref{}{Archive root}}
+%% \simpleexample{\wwwctanref{macros/generic}{generic macros}}
+%% \simpleexample{\nullctanref{macros/generic}{generic macros}}
+%% % \longsimpleexample{\nullctanref{macros/generic}{generic macros}}
+%% \simpleexample{\nullctanref{\nvCSV\ltxcontrib/morehype}{hypertext}}
+%% \end{simpleexamples}
+%% In the final example, you see that the ``directory" design
+%% even includes something like the corrsponding
+%% \strong{\ctanpkggenref{morehype}{package description}}---especially
+%% the ``\acro{README}" is displayed in a ``frame."
+%%
+%% \paragraph{Advanced root page design.}
+%% Next, there are archive roots showing a special \emph{starting page},
+%% while subdirectories show a rather simple design.
+%% \begin{itemize}
+%% \item |\tugctanref{<path>}{<text>}|,
+%% \item |\dantectanref{<path>}{<text>}|, and
+%% \item |\sciservref{<path>}{<text>}|
+%% \end{itemize}
+%% make <text> a link to a \TeX~Archive directory or file <path>
+%% on the corresponding domain:
+\MakeBasedHref{\tugctanref}{tug\ctanorg}
+%% (`tug.ctan.org' once behaved like `alan.smcvt.edu',
+%% Jim Hefferon's former \CTAN\ interface.)
+\MakeBasedHref{\dantectanref}{dante\ctanorg/\texarchive}
+\MakeBasedHref{\sciservref}{dante\ctanorg}
+%% Using the \emph{empty} <path> may be most interesting
+%% for that starting page; otherwise they may simply serve as
+%% (known) \emph{nearby mirrors}---speed preferred over design.
+%% \begin{simpleexamples}
+%% \simpleexample{\tugctanref{}{Archive root}}
+%% \simpleexample{\tugctanref{info}{Info}}
+%% \end{simpleexamples}
+%% \paragraph{Random mirrors.}
+%% For speed, saving energy (i.e., the \emph{world}),
+%% and certain servers from overload,
+%% using |mirror.ctan.org| is recommended,
+%% which automatically chooses a \CTAN\ \wikienref{web mirror}{\emph{mirror}}.
+%% \[|\mirrorctanref{<path>}{<text>}|.\] %% 2011/10/10 :->.2011/10/21:
+%% is provided for this purpose:
+\MakeBasedHref{\mirrorctanref}{mirror\ctanorg}
+%% Resulting design may be poor ...
+%% \begin{simpleexamples}
+%% \simpleexample{%
+%% \mirrorctanref{}{Archive root}}
+%% \simpleexample{%
+%% \mirrorctanref{help}{Help}}
+%% \end{simpleexamples}
+%%
+%% ==== \cs{ctanref} for Favourite Mirror, Customizing ==== %% fav. 2015/05/21
+%% \label{sec:custom-ref}
+%% |\ctanref| should work like one out of
+%% \begin{itemize}
+%% \item `\wwwctanref', `\nullctanref',
+%% \item `\tugctanref', `\dantectanref', `\sciservctanref', and
+%% \item `\mirrorctanref',
+%% \end{itemize}
+%% %%%(as introduced in \secref{texarc})
+%% (as listed in the second table of \secref{ctan-tables})
+%% depending on which out of
+%% \begin{itemize}
+%% \item |\usewwwctan|, |\usenullctan|,
+%% \item |\usetugctan|, |\usedantectan|, |\usesciservctan|, and
+%% \item |\usemirrorctan|,
+%% \end{itemize}
+%% appeared most recently.
+%% By \strong{default}, `\ctanref' works like `\mirrorctanref'.
+%% So in any case its syntax is \[|\ctanref{<path>}{<text>}|.\]
+%% The idea is that it is a shorthand to access the user's
+%% favourite \CTAN\ mirror, or just to save the `www'
+%% in `\wwwctanref', for instance. It may also be modified directly
+%% using
+%% \[|\MakeBasedHref{\ctanref}{<ctan-mirror>}|\]
+%% where <ctan-mirror> is a \URL\ of a root of
+%% a \CTAN\ mirror (imitate code from \secref{texarc}---TODO:
+%% more \URL s in \secref{domains}?),
+%% or by
+%% \[|\renewcommand{\ctanref}{\<prefix>ctanref}|\]
+\newcommand*{\let@ctanref}{\let\ctanref} %% v0.83 2015/05/22
+\newcommand*{\usemirrorctan}{\let@ctanref\mirrorctanref
+ %% v0.83 rm. reminiscence of \let\ctanfileref
+}
+%% |\usemirrorctan| \emph{sets} the \strong{default}
+%% meaning for |\ctanref| as announced
+%% (so it uses \urlhttpref{mirror.ctan.org}):
+\usemirrorctan
+\RequirePackage{domore}
+\setdo[2]{\newcommand*#1{\let@ctanref#2}}
+%% TODO `\DoDoWithMore'?
+\DoWithMore\do{\usewwwctan \wwwctanref }
+ {\usenullctan \nullctanref }
+ {\usetugctan \tugctanref }
+ {\usedantectani \dantectanref}
+ {\usesciservctan \sciservref }\StopDoing
+%% v0.83 drops |\myctanref|, while it might be useful for the user's
+%% preferred mirror. However, \secref{texarc} should show how to
+%% set up `\myctanref' then, and
+%% \[|\renewcommand*{\ctanref}{\myctanref}|\]
+%% could replace the |\usemyctan| I haven't put here.
+%% % \begin{singthm}{Remark} (TODO) \ Another implementation
+%% % of adjusting `\ctanref' I consider is
+%% % using some `\ctanurl'\-`prefix' that you can redefine for
+%% % accessing your favourite mirror.
+%% % \end{singthm}
+%%
+%% ==== Opening/Downloading Files from an Archive ==== %% 2015/05/25
+%% %% moved down 2015/05/18
+%% You may actually want to \emph{open} a file <file-name> in <path>
+%% of a \TeX\ archive
+%% % <file-name> displayed as the link text, %% 2011/10/21
+%% % by %% 2013/01/21
+%% by clicking on <file-name> (which is formatted by
+%% |\filenamefmt| from \secref{fonts})---or
+%% to \emph{offer} this opportunity to readers of your document.
+%% In this case, the formatting of \CTAN\ pages
+%% (directories) doesn't matter at all,
+%% so a randomly chosen archive mirror should do:
+%% |\mirrorctanfileref{<path>}{<file-name>}|
+\newcommand*{\CTANfileref}[3]{#1{#2/#3}{\filenamefmt{#3}}}
+\newcommand*{\mirrorctanfileref}{\CTANfileref\mirrorctanref}
+%% |\ctanfileref{<path>}{<file-name>}| is provided as an alias
+%% or shorthand for `\mirrorctanfileref':
+\newlet\ctanfileref\mirrorctanfileref
+%% \begingroup\hfuzz=14pt %% TODO
+%% \begin{simpleexamples}
+%% \simpleexample{\ctanfileref{\nvCSV\ltxcontrib/filedate/doc}{filedate.pdf}}
+%% \simpleexample{\ctanfileref{\nvCSV\ltxcontrib/filedate}{README}}
+%% \simpleexample{\ctanfileref{\nvCSV\ltxcontrib}{filedate.zip}}
+%% \end{simpleexamples}
+%% \endgroup
+%% %% 2013/01/21: rm. \tugctanfileref %%%% 2015/05/21
+%% |\mirrorctanfileref| should not be changed,
+%% while the user might
+%% \[|\renewcommand*{\ctanfileref}{\CTANfileref<archive-ref>}|\]
+%% with <archive-ref> from the previous section or the
+%% second table in \secref{ctan-tables}
+%% (immitate the earlier definition of `\mirrorctanfiler'),
+%% or s(h)e might
+%% \[|\newcommand*{\myctanfileref}{\CTANfileref<archive-ref>}|\]
+%% and (temporarily)
+%% \[|\renewcommand*{\ctanfileref}{\myctanfileref}|\]
+%% (|\filectanref| that I earlier offered for customizing
+%% is dropped with v0.83.)
+%%
+%% It may be psychologically useful to have an \emph{opposite}
+%% to `\ctanfileref' %% 2015/05/23: filectan -> ctanfile
+%% that can easily be recognized as such,
+%% while `\ctanref' may be unclear. I offer
+%% |\dirctanref{<path>}{<text>}| ...
+%% %. It may be an alias %% was \dirfile... 2015/05/21
+%% %for `\ctanref', even respecting the `\use'\codedots\ commands
+%% %from above. Another proposal above is dangerous with the present idea:
+%% as a kind of alias for `\ctanref'---you might change that
+%% by `\renewcommand':
+\newcommand*{\dirctanref}{\ctanref}
+%% \strong{Note:}\enspace Links for opening \CTAN\ files
+%% with a different link text than the filename
+%% can be generated by `ctanref' commands discribed earlier.
+%%
+%% ==== The \TeX\ Catalogue OnLine ====
+%% \label{sec:texcat} %% 2012/12/18
+%% % We are not providing access to everything in the
+%% % \catalogueref{}{\TeX~catalogue}.
+%% Before v0.8, only
+%% J\"urgen Fenn's Topical Index of the Catalogue
+%% was supported. v0.8 adds package descriptions displayed
+%% by the Catalogue. The following shorthand
+%% |\catalogueref{<path[#frag]>}{<text>}| is an auxiliary for
+%% both of them (and other <path>s the user might want).
+%% With empty <path>,
+%% it generates an \URL\ of a \catalogueref{}{root}
+%% in a \CTAN\ mirror %% shorthand 2012/12/17
+%% of \meta{The \TeX~Catalogue OnLine}:
+\newcommand*{\catalogueref}[1]{\mirrorctanref{help/Catalogue/#1}}
+%% The user may modify this by
+%% \begin{center}
+%% `\renewcommand*{\catalogueref}[1]{\myctanref{help/Catalogue/#1}}'
+%% \end{center}
+%% or by
+%% \begin{center}
+%% `\MakeBasedHref{\catalogueref}{texcatalogue\ctanorg}'
+%% \end{center}
+%% ---cf. \urlhttpref{texcatalogue\ctanorg}.
+%%
+%% Some mirrors seem to display the Catalogue's root directory
+%% only this way, while others display the ``Welcome" page.
+%% |\cataloguestartref{<text>}| accesses the
+%% \cataloguestartref{\strong{Welcome} (\strong{start})} page surely:
+\newcommand*{\cataloguestartref}{\catalogueref{index\html}}
+%% |\bytopicref{<anchor>}{<text>}|
+%% \ %% 2011/10/21
+%% makes <text> a link to <anchor> of
+%% \strong{J\"urgen Fenn's Topical Index} %% 2012/12/18
+%% of the \TeX\ Catalogue. You find the <anchor>
+%% by clicking at the respective \acro{TOC} entry on top of the page
+%% and then read the \URL\ from the browser's navigation display.
+\newcommand*{\bytopicref}[1]{\catalogueref{bytopic\html\##1}}
+%% \simpleexample{\bytopicref{html}{&\TeX~to HTML}}
+%% \par %% recplaces \[\] 2015/05/20
+%% |\catpkgref{<pkg-name>}| makes <pkg-name>
+%% a link to the description of the \strong{package} <pkg-name>
+%% in \meta{The \TeX~Catalogue Online}.
+%% \[|\CatPkgRef{<name>}{<Name>}|\]
+%% is a variant for the cases where authors have a special idea
+%% <Name> using some capital letters when they describe their packages
+%% (\acro{ASCII} %%% ASCII %% 2012/12/14
+%% versions of ``logos" such as `BibTeX') %% was Logos 2012/10/24
+%% while the identifier <name> doesn't allow capital letters.
+%% %% 2011/01/24:
+%% Also, <Name> may be a package from a \emph{bundle} <name>
+%% where <name> has a description page while <Name>
+%% doesn't have its \emph{own} description page~...
+%% \simpleexample{\CatPkgRef{morehype}{texlinks}}
+\newcommand*{\catpkgref}{\DoubleArg\CatPkgRef}
+%\newcommand*{\CatPkgRef}[1]{%
+% \cat@ctan@pkg@ref\catalogueref{entries/#1\html}}
+%% <- v0.83 2015/05/20 ->
+ \newcommand*{\CatPkgRef}{\cat@ctan@pkg@ref\catpkggenref}
+%% v0.83 introduces |\catpkggenref{<pkg-name>}{<text>}|
+%% where formatting <text> is up to the user
+%% (or not special formatting required):
+\newcommand*{\catpkggenref}[1]{\catalogueref{entries/#1\html}}
+%% |\cat@ctan@pkg@ref<cmd>{<path>}{<text>}| %% 2012/12/19, rm. frag 2015/05/26
+%% \ ensures that <Name> is typeset as the argument of
+%% `\pkgnamefmt' (\secref{fonts}).
+%% It is used in \secref{sing-pkgs} again:
+\newcommand*{\cat@ctan@pkg@ref}[3]{#1{#2}{\pkgnamefmt{#3}}}
+%% \simpleexample{\catpkgref{morehype}}
+%% % \begin{example}
+%% % \makeatletter \def\ex@mple{\catpkgref{morehype}}%
+%% % \fbox{\strut\expandafter\code\expandafter{\expandafter&\ex@mple}}%
+%% % %% <- bad spaces
+%% % \hskip\labelsep for\hskip\labelsep
+%% % \fbox{\strut\ex@mple}
+%% % |\catpkgref{morehype}| \ for \
+%% % \fbox{\catpkgref{morehype}}
+%% % \end{example}
+%%
+%% ==== Single Packages without The \TeX~Catalogue ====
+%% \label{sec:sing-pkgs} %% 2012/12/19
+%% v0.83 introduces a way to refer to a package description without
+%% telling a package's name. |\wwwctanpkggenref{<id>}{<text>}|
+%% does not coerce <text> into a special format:
+\newcommand*{\metactan@pkgref}{\metactan@ref{pkg}}
+\newcommand*{\wwwctanpkggenref}{\metactan@pkgref\wwwctanorgbaseref}
+%% \longsimpleexample
+%% {\wwwctanpkggenref{morehype}{an awesome bundle}}
+%% |\nullctanpkggenref{<id>}{<text>}| similarly without `www.':
+\newcommand*{\nullctanpkggenref}{\metactan@pkgref\nullctanorgbaseref}
+%% |\wwwctanpkgref{<pkg-name>}| makes <pkg-name> %% 2015/05/26
+%% a link to a package info page for the package <pkg-name>
+%% on `www.ctan.org'. <pkg-name> is displayed and formatted
+%% by `\pkgnamefmt{<pkg-name>}'. |\WwwCtanPkgRef{<name>}{<Name>}|
+%% is a variant of `\wwwctanpkgref' relating to the latter
+%% as `\CatPkgRef' relates to `\catpkgref' (\secref{texcat}):
+\newcommand*{\wwwctanpkgref}{\DoubleArg\wwwCtanPkgRef}
+\newcommand*{\WwwCtanPkgRef}{\cat@ctan@pkg@ref\wwwctanpkggenref}
+% %% Using `\cat@ctan@pkg@ref' from \secref{texcat}:
+% \newcommand*{\Ct@nPkgRef}[2]{\cat@ctan@pkg@ref#1{pkg/#2}}
+%% |\wwwctanpkgstyref{<name>}| %% 2012/11/27
+%% adds \qtdcode{.sty} to the package name:
+\newcommand*{\wwwctanpkgstyref}[1]{\wwwCtanPkgRef{#1}{#1.sty}}
+%% Likewise |\nullctanpkgstyref{<name>}| etc.:
+\newcommand*{\nullctanpkgstyref}[1]{\nullCtanPkgRef{#1}{#1.sty}}
+\newcommand*{\nullctanpkgref}{\DoubleArg\nullCtanPkgRef}
+\newcommand*{\NullCtanPkgRef}{\cat@ctan@pkg@ref\nullctanpkggenref}
+%% Command names \ |\ctanpkgstyref|, \ |\ctanpkgref|, \ |\CtanPkgRef|, \
+%% and \ |\ctanpkggenref| \ interrelate analogously.
+%% I expect these ones are mainly used.
+%% Their exact behavior can be chosen from the `\nullctan'\codedots,
+%% `\wwwctan'\codedots\ things, they even can use the \TeX\ catalogue:
+\newcommand*{\ctanpkgstyref}[1]{\CtanPkgRef{#1}{#1.sty}}
+\newcommand*{\ctanpkgref}{\DoubleArg\CtanPkgRef}
+\newcommand*{\CtanPkgRef}{\cat@ctan@pkg@ref\ctanpkggenref}
+\newcommand*{\ctanpkggenref}{\metactan@pkgref\ctanorgbaseref}
+%% v0.83 abolishes `tugctanorgbaseref' as
+%% \urlhttpref{tug.ctan.org} no longer has a
+%% `pkg' top-level subdirectory:
+% \newcommand*{\useTUGpkgpages}{\let\CtanPkgRef\TugCtanPkgRef}
+%% After |\useWWWpkgpages|,
+%% the package descriptions from `www.ctan.org' are used:
+\newcommand*{\let@ctanobref}{\let\ctanorgbaseref}
+\newcommand*{\useWWWpkgpages}{\let@ctanobref\wwwctanorgbaseref}
+%% After |\useOpkgpages|, `\CtanPkgRef' and `\ctanpkgref'
+%% use the package descriptions from `ctan.org'. This command
+%% and the previous |\useOpkgpages| also decide whether
+%% author (\secref{pkg-au}), topic, and search pages
+%% (\secref{pkg-search}) have `www.' in their \URL\ or not:
+\newcommand*{\useOpkgpages}{\let@ctanobref\nullctanorgbaseref}
+%% And the latter is the \strong{default:}
+\useOpkgpages
+%% After |\useCATpkgpages|, `\CtanPkgRef' and `\ctanpkgref'
+%% use the \TeX~Catalogue to display package informations.
+%% The content should be much the same as with
+%% [`www.']`ctan.org', the same database is used,
+%% it is the design that differs:
+\newcommand*{\useCATpkgpages}{\let\CtanPkgRef\CatPkgRef}
+%% Finally, we provide experimental
+%% \[|\AllPkgRefs{<name>}{<Name>}| \mbox{\quad and\quad}
+%% |\allpkgrefs{<name>}|\]
+%% offering choice between the two interfaces for each package.
+%% \qtdcode{c} will stand for The \TeX~Catalogue and
+%% \qtdcode{w} for `www.ctan.org'. After |\useALLpkgpages|,
+%% this is what `\CtanPkgRef' and `\ctanpkgref' offer:
+\newcommand*{\AllPkgRefs}[2]{%
+ \pkgnamefmt{#2}\,[\CatPkgRef{#1}{c}\textbar
+ % \TugCtanPkgRef{#1}{t}\textbar %% rm. v0.83
+ \WwwCtanPkgRef{#1}{w}]}
+\newcommand*{\allpkgrefs}{\DoubleArg\AllPkgRefs}
+\newcommand*{\useALLpkgpages}{\let\CtanPkgRef\AllPkgRefs}
+%% \simpleexample{\allpkgrefs{morehype}}
+%% (With 'blog.sty', this requires some `\def\textbar{|}' TODO.)
+%%
+%% ==== Package Author Pages ====
+%% \label{sec:pkg-au}
+%% |\wwwctanpkgauref{<id>}{<description>}| creates a link
+%% to the list of packages somebody described by <description>
+%% maintains:
+\newcommand*{\metactan@auref}{\metactan@ref{author}}
+\newcommand*{\wwwctanpkgauref}{\metactan@auref\wwwctanorgbaseref}
+%% \simpleexample{\wwwctanpkgauref{lueck}{mine}}
+%% |\nullctanpkgauref{<id>}{<description>}| removes `www.':
+\newcommand*{\nullctanpkgauref}{\metactan@auref\nullctanorgbaseref}
+%% |\ctanpkgauref{<id>}{<description>}| chooses from the former
+%% possibilities according to the `\use'\codedots\ commands
+%% in the previous \secref{sing-pkgs}:
+\newcommand*{\ctanpkgauref}{\metactan@auref\ctanorgbaseref}
+%%
+%% ==== Other Ways to Search for Packages ====
+%% \label{sec:pkg-search} %% 2012/12/29
+%% |\wwwctanpkgtopicref{<topic-id>}{<text>}| accesses a list of
+%% packages belonging to the ``topic" with identifier <topic-id>.
+\newcommand*{\metactan@topicref}{\metactan@ref{topic}}
+\newcommand*{\wwwctanpkgtopicref}{%
+ \metactan@topicref\wwwctanorgbaseref}
+%% \longsimpleexample{\wwwctanpkgtopicref{cvt-html}{make HTML}}
+%% |\nullctanpkgtopicref{<topic-id>}{<text>}| without `www.':
+\newcommand*{\nullctanpkgtopicref}{%
+ \metactan@topicref\nullctanorgbaseref}
+%% |\nullctanpkgsearch{<text>}| \ and \ |\wwwctanpkgsearch{<text>}| \
+%% create links to a page for searching packages
+%% with several options for search criteria:
+\newcommand*{\metactan@searchref}[1]{#1{search}}
+\newcommand*{\nullctanpkgsearchref}{%
+ \metactan@searchref\nullctanorgbaseref}
+%% \simpleexample{\ctanpkgsearchref{CTAN~search}}
+\newcommand*{\wwwctanpkgsearchref}{%
+ \metactan@searchref\wwwctanorgbaseref}
+%% |\ctanpkgtopicref| and |\ctanpkgsearchref| choose
+%% according to the `\use'\codedots\ commands in \secref{sing-pkgs}:
+\newcommand*{\ctanpkgtopicref}{\metactan@topicref\ctanorgbaseref}
+\newcommand*{\ctanpkgsearchref}{\metactan@searchref\ctanorgbaseref}
+%% The \TeX\ Catalogue OnLine has offered searching as well,
+%% yet today this search page is just the same as the one you
+%% get by \wwwctanpkgsearchref.
+%%
+%%
+%% === Mailing Lists ===
+%% \label{sec:mail}
+%% This section mainly provides tools for referring %% 2015/05/28
+%% to pages of or postings to the \CTAN\ announcments
+%% (\secref{ctan-ann}) and texhax (\secref{texhax}) mailing lists.
+%% v0.7 relies on package \ctanpkgref{langcode} for
+%% |\enmonthname{<month-number>}| and |\demonthname{<month-number>}|,
+%% for tricks with language codes extending those in
+%% \secref{langcode}:
+\RequirePackage{langcode}
+%% The next definitions are backbones for generating links to
+%% web pages about \TeX\ mailing lists.
+%% |\TL@piper@parse<year>-<month-number>-<id>| will be used
+%% for referring to single postings:
+\def\TL@piper@parse#1-#2-#3/{#1-\enmonthname{#2}/#3}
+%% \[|\texlistyearmonthref<list-ref>{<2-digits>-<month-no>}|\]
+%% will generate \ |<list-ref>{<path>}| \ for linking to the list of postings
+%% of the <month-no>th month in the year 20<2-digits>:
+\newcommand*{\texlistyearmonthref}[2]{\texlist@yearmonthref#1#2\@nil}
+\def\texlist@yearmonthref#1#2-#3\@nil{#1{20#2-\enmonthname{#3}}}
+%% \qtd{<path>} will be \qtdcode{20<2-digits>-<month>},
+%% and <month> will be the \emph{English} name of the
+%% <month-no>th month of the year.
+%%
+%% \[|\texlanglistmonthref<month-cmd><list-ref>{<2-digits>-<month-no>}|\]
+%% will generate \ |<list-ref>{<path>}{<month>}| \
+%% where <month> is determined from <month-no> by <month-cmd>:
+\newcommand*{\texlanglistmonthref}[3]{\texlanglistm@nthref#1#2#3\@nil}
+\def\texlanglistm@nthref#1#2#3-#4\@nil{%
+ #2{20#3-\enmonthname{#4}}{#1{#4}}}
+%% |\detexlistmonthref<list-ref>{<2-digits>-<month-no>}| \
+%% now could be used for `<list-ref>{<path>}{<month>}'
+%% \emph{German} <month> ...
+\newcommand*{\detexlistmonthref}{\texlanglistmonthref\demonthname}
+%% ... as could be \ |\entexlistmonthref<list-ref>{<2-digits>-<month-no>}| \
+%% for \emph{English} <month> ...
+\newcommand*{\entexlistmonthref}{\texlanglistmonthref\enmonthname}
+%% With proper use of \ctanpkgref{langcode} however,
+%% \[|\texlistmonthref<list-ref>{<2-digits>-<month-no>}|\]
+%% \emph{automatically} chooses between English and German <month>
+%% (according to intention ...):
+\newcommand*{\texlistmonthref}{\texlanglistmonthref\monthname}
+%%
+%% === \CTAN\ Announcements === %% 2011/06/27
+%% \label{sec:ctan-ann} %% 2015/05/28
+%% |\ctanannref{<id>}{<text>}| makes <text> a link
+%% to the DANTE web page displaying a \CTAN\
+%% announcement. You find <id> by searching
+%% \[\texttt{https://lists.dante.de/pipermail/ctan-ann/}\]
+%% and then reading the \URL.
+%% <id> is composed as
+%% \[`<year>-<month>/<6-digits>.html'\]%%%, \[\] 2012/10/24
+%% %% 2012/10/24:
+%% where <year> consists of 4 digits and <month> is an \emph{English}
+%% month name:
+\newcommand*{\ctanannref}[1]{%
+ \httpsref{lists.dante.de/pipermail/ctan-ann/#1}}
+%% |\ctanannpref{<id-code>}{<text>}| is a variant
+%% of `\ctanannref' where in place of <id>
+%% you only type the third and fourth digit of the
+%% year (<2-digits>), then a \qtdcode{-}, then the (arabic)
+%% number <month-no> of the month (cf. \secref{mail} so far),
+%% then another \qtdcode{-},
+%% and then the actual internal identifier <running-no>
+%% (a number of six digits preceding \qtdcode{.html} of the \URL).
+%% I.e., \qtd{<id-code>} is \qtdcode{<2-digits>-<month-no>-<running-no>}.
+\newcommand*{\ctanannpref}[1]{%
+ \ctanannref{20\TL@piper@parse#1/\html}} %% `20' 2012/12/08
+%% \[|\ctanannyearmonthref{<2-digits>-<month-no>}|\] generates
+%% `\ctanannref{<path>}' from \qtdcode{<2-digits>-<month-no>}---<path>
+%% as in \secref{mail} ...
+\newcommand*{\ctanannyearmonthref}{\texlistyearmonthref\ctanannref}
+%% \[|\ctanannmonthref{<2-digits>-<month-no>}|\] generates
+%% `\ctanannref{<path>}{<month>}' where <month> obeys `\langcode' ...
+%% % from \qtdcode{<2-digits>-<month-no>}
+\newcommand*{\ctanannmonthref}{\texlistmonthref\ctanannref}
+%%
+%% === \code{\dots stack\dots} Forums === %% 2012/12/17/18
+%% |\stackexref{<id-no>}{<text>}| \ shows exchange about
+%% Question No.~<id-no> on \urlhttpref{tex.stackexchange.com}.
+%% <id-no> is the number following \qtdcode{/questions/}
+%% in the \URL\
+%% (the part of the \URL\ reflecting the caption are not needed).
+%% See an example from
+%% $<id-no>=\stackexref{84878}{84878}$ in \secref{wiki-stack}.
+\newcommand*{\stackexref}{\stackquestionref{tex.stackexchange}}
+\newcommand*{\stackquestionref}[2]{\httpref{#1.com/questions/#2}}
+%% Likewise, \ |\stackoverref{<id-no>}{<text>}| \ links to
+%% \urlhttpref{stackoverflow.com}
+%% ($<id-no>=\stackoverref{2118972}{2118972}$ is about file dates):
+\newcommand*{\stackoverref}{\stackquestionref{stackoverflow}}
+%%
+%% === \TUG === %% \TUG 2012/12/15
+%% \label{sec:tug} %% 2012/12/29
+%% |\tugref{<path>}{<text>}| makes <text> a link
+%% to <path> on domain `tug.org':
+\MakeBasedHref{\tugref}{tug.org}
+%% ==== texhax ====
+%% \label{sec:texhax} %% 2015/05/28
+%% |\texhaxref{<id>}{<text>}| makes <text> a link
+%% to the \TUG\ web page displaying
+%% a texhax posting. You find <id> by searching
+%% `tug.org/pipermail/texhax/' and then reading the \URL.
+%% <id> is composed as `<year>-<month>/<6-digits>.html'.
+\newcommand*{\texhaxref}[1]{\tugref{pipermail/texhax/#1}}
+%% |\THref{<id>}| saves you from choosing <text>
+%% and uses `texhax' instead.
+\newcommand*{\THref}[1]{\texhaxref{#1}{texhax}}
+%% (It was `\prg{texhax}' in 'blog.sty', to have something
+%% logo-like, without a good idea how to implement it.)
+%%
+%% |\texhaxpref{<id-code>}{<text>}| is a variant
+%% of `\texhaxref' where in place of <id>
+%% you only type the third and fourth digit of the
+%% year, then a `-', then the (arabic) number of
+%% the month, then another `-', and then the actual
+%% internal identifier
+%% (a number of six digits preceding `.html' of the \URL).
+%% I made this macro because I prefer typing to copying
+%% from the \URL.
+\newcommand*{\texhaxpref}[1]{% %% 2010/09/07
+ \texhaxref{20\TL@piper@parse#1/\html}} %% 2011/05/03
+%% |\THpref{<id-code>}| is a variant of `\THref' using
+%% <id-code> as with `\texhaxpref':
+\newcommand*{\THpref}[1]{\texhaxpref{#1}{texhax}} %% 2011/03/24
+%% TODO: `\texhaxPref#1' searches list of offsets
+%% to determine year/month from id ...
+%%
+%% \[|\texhaxyearmonthref{<2-digits>-<month-no>}|\] generates
+%% `\texhaxref{<path>}' from \qtdcode{<2-digits>-<month-no>}---<path>
+%% as in \secref{mail} ...
+\newcommand*{\texhaxyearmonthref}{\texlistyearmonthref\texhaxref}
+%% \[|\texhaxmonthref{<2-digits>-<month-no>}|\] generates
+%% `\texhaxref{<path>}{<month>}' where <month> obeys `\langcode' ...
+\newcommand*{\texhaxmonthref}{\texlistmonthref\texhaxref}
+%%
+%% ==== Other ====
+%% %% 2011/04/27 corr. doc. vol/issue
+%% |\tugbartref{tb<vol>-<issue>/<filename-base>}{<text>}|
+%% makes <text> a link to the \TUG boat article
+%% `<filename-base>.pdf' in vol.~<vol> and issue~<issue>:
+% \newcommand*{\tugbartref}[1]{\tugref{TUGboat/Articles/#1\pdf}}
+\newcommand*{\tugbartref}[1]{\tugref{TUGboat/#1.pdf}}
+%% %% <- 2011/04/30
+%% That `tb' can be dropped with
+%% \[|\tugbArtref{<vol>-<issue>/<filename-base>}{<text>}|\]
+%% %% <- 2015/03/27 ->
+%% after this definition:
+\newcommand*{\tugbArtref}[1]{\tugbartref{tb#1}}
+%% |\tugiref{<anchor>}{<text>}| makes <text> %% <text> 2012/07/23 tugi 2012/08/05
+%% a link to an <anchor>
+%% on the \TUG\ web page entitled \qtd{TeX Resources on the Web}
+%% (e.g., $<anchor>=\mbox{\qtdcode{web}}$ shows the section entitled
+%% \tugiref{web}{\qtd{\TeX~web projects}}):
+\newcommand*{\tugiref}[1]{\tugref{interest\html\##1}}
+%% It was `\TUGIref' until v0.6, we keep this for compatibility
+%% (deprecated):
+\newlet\TUGIref\tugiref
+%%
+%% === \acro{UK FAQ} ===
+%% |\ukfaqref{<label>}{<text>}| makes <text> a link to
+%% the UK~\TeX~FAQ page with ``label"~= <label>:
+\newcommand*{\ukfaqref}[1]{\httpref{%
+% www.tex.ac.uk/cgi-bin/texfaq2html?label=#1}}
+ www.tex.ac.uk/FAQ-#1.html}} %% 2015/07/20
+%%
+%% === Wikibooks ===
+%% \label{sec:wikibooks} %% 2013/01/21
+%% |\wikilangbooksref{<language-code>}{<book>/<subject>}{<text>}|
+%% %% <- ref 2012/10/04, <book>/<subject>
+\newcommand*{\wikilangbooksref}[1]{% %% `lang' 2012/01/06
+ \httpbaseref{#1.wikibooks.org/wiki}}
+%% |\latexwikibookref{<subject>}{<text>}| \ %% \ 2012/12/16
+%% refers to the %% rm. extra arg. 2012/10/24
+%% (English) \latexwikibookref{}{\emph{\LaTeX} wikibook:} %% lc 2012/12/16
+\newcommand*{\latexwikibookref}[1]{\wikilangbooksref{en}{LaTeX/#1}}
+%% The German
+%% \wikilangbooksref{de}{LaTeX-Kompendium}{\dqtd{\LaTeX-Kompendium}}
+%% is somewhat difficult, I leave it for now~...
+%%
+%% %% 2012/12/16:
+%% |\texwikibookref{<subject>}{<text>}| \ refers to the
+%% % \texwikibookref{}{\emph{\TeX} wikibook.}
+%% \wikilangbooksref{en}{TeX}{\emph{\TeX} wikibook.}
+%% E.g., <subject> may access a description of the
+%% \wikilangbooksref{en}{TeX#TeX_Primitives}{\TeX\ \emph{primitive}}
+%% `\<subject>', such as `\texwikibookref{if}{\cs{if}}'
+%% for \texwikibookref{if}{\cs{if}}. However, some primitives
+%% have not been described yet, and the whole \TeX\ wikibook
+%% largely is just a list of what needs to be done.
+\newcommand*{\texwikibookref}[1]{\wikilangbooksref{en}{TeX/#1}}
+%%
+%% == Leaving and Version HISTORY == %% 2012/03/09
+\endinput
+%% VERSION HISTORY
+v0.1 2011/01/24 new file, code from blog.sty v0.3
+v0.2 2011/01/27 \urlfoot, \NormalHTTPref, \foothttpurlref,
+ "outline" adjusted;
+ more consistent use of \newcommand and
+ \@ifdefinable (TODO: guarded \let)
+v0.3 2011/02/10 [blog]; \urlpkgfoot
+v0.4 2011/04/27 doc. \tugbartref\ corrected
+ 2011/04/30 shortened link in \tugbartref
+ 2011/05/03 \TL@piper@parse, tried \ctanannref
+ 2011/05/13 reworking Wikipedia, arbitrary languages
+ 2011/06/27 doc.: \acro; \httpsref, \ctanannref
+ 2011/07/23 doc.: typo \acro{TUG}, `Almost all', page breaks;
+ \Wikidisambref: different order of arg.s
+ 2011/08/18 doc.: \acro with UK; wikibooks
+ 2011/08/27 doc. \acro with URL and PDF;
+ more doc and code changes for https
+uploaded with MOREHYPE r0.4 (not touched by r0.41)
+v0.41 2011/09/03 doc.: more specific on \urluml/Wikipedia
+ 2011/10/06 \mirrorctanref, \tugctanfileref,
+ \mirrorctanfileref, \ltxcontrib
+ 2011/10/10 doc. formatting of previous
+uploaded with MOREHYPE r0.5(1)
+v0.5 2011/10/19 doc. fix LaTeX Wikibook
+ 2011/10/20 \urlfmt, \filenamefmt and \pkgnamefmt
+ changed and moved, modified doc. on them,
+ doc. uses \URL
+ 2011/10/21 re-order CTAN, \pagebreak's, \ctanref and
+ choice for it, doc. modified; rm. \ithttpref
+uploaded with MOREHYPE r0.52
+v0.6 2012/01/06 \wikilangref etc., \wikiref etc. depend on
+ \langcode
+ 2012/01/11 removed old comments for Wikipedia; (C)
+ 2012/03/09 "URL bases" (\httpbaseref etc.), applied;
+ \bytopicref uses \mirrorctanref
+ 2012/03/12 fixed \texhaxref
+ 2012/04/09 \ctanorgbaseref, \ctanpkgauref
+ 2012/04/10 makedoc link works!
+ 2012/05/13 example for \wikilangref corrected
+uploaded with MOREHYPE r0.6
+v0.7 2012/07/23 doc.: <text>
+ 2012/08/05 \tugiref
+ 2012/10/04 doc. wikibooks: ref
+ 2012/10/24 ...monthref... requiring `langcode.sty', moving
+ links to mailing list pages from `texblog.fdf'
+ here; doc.: \pagebreak s, wikibooks: <book>...,
+ corr. args, \wikiref refers to `langcode.sty',
+ `ref', using \qtdcode (new in `makedoc.cfg')
+ 2012/11/08 doc.: Jim corr.
+ 2012/11/27 \ctanpkgstyref from 'texblog.fdf'
+ 2012/11/28 [[...|...]]
+uploaded with MOREHYPE r0.7
+v0.7a 2012/12/01 link fix "Piped link"
+ -> r0.7a
+v0.7b 2012/12/06 there again: blogexec -> markblog, above entry ...
+ -> r0.7b
+v0.71 2012/12/08 \ctanannpref like \texhaxpref
+ -> r0.71
+
+v0.8 2012/12/15 \domainref from `texblog.fdf'
+ doc.: \secref, gathering first subsections in
+ new section "Links in General"
+ 2012/12/16 \texwikibooksref; \domainref 1 code line,
+ mod. doc. LaTeX wikibook
+ 2012/12/17 \google..., \stackexref, \catalogueref;
+ doc.: todo done + corr. in sec:bases,
+ wiki extended, suffix -> tag
+ 2012/12/18 \cataloguestartref, \html
+ 2012/12/19 \cat@ctan@pkg@ref, \@double@first@arg;
+ doc. uses {example}, \fbox, etc.
+ 2012/12/20 \ctanpkgtopicref
+ -> r0.8
+v0.81 2012/12/28 doc.: "fonts" \provide, corr. \pkgnamefmt,
+ reworked \urlfoot
+ 2012/12/29 \tugctanorg; doc.: TODO on "fonts",
+ more on Jim ... \tugctanorg
+ 2012/12/30 ... in sec:search-pkg; mod. doc. \ctanpkgauref,
+ more doc. wiki "overview", \simplecodefbox etc.,
+ 2012/12/31 doc. "the" Welcome ...
+ -> r0.81
+v0.82 2013/01/18 \tugctanorg -> alan.smcvt.edu
+ 2013/01/19 reworking doc. on CTAN; \pagebreak
+ 2013/01/20 updated (C), reworking doc. on CTAN
+ 2013/01/21 \MakeBasedHref, \wwwctanref, \usewwwctan,
+ \newlet; doc.: typo fix, updated sec:x.ctan.org
+ 2013/01/21 applying \newlet, \myctanref, \usemyctan,
+ \ctanfileref reimplemented, \filectanref,
+ \dirctanref; doc.: \ltxcontrib with {example}
+ -> r0.82
+v0.83 2013/02/04 comment out code for alan.smcvt.edu and
+ reduce doc. on it -- started
+ 2013/02/20 \tugbArtref; sec. "Obvious Shorthands":
+ \hmtl moves, \htm, \pdf, \DoubleArg;
+ some adjustments for AZ's vanishing;
+ doc. "Fonts for" -> "Formatting"
+ 2014/05/25 updated Google search link
+ 2015/03/27 doc. lines on "dropped" and "URL bases";
+ 2015/05/16 short UK FAQ URL
+ 2015/05/17f. new doc. CTAN: overview/summary
+ 2015/05/18 rm. old doc. on Jim, reducing CTAN base cmd.s
+ 2015/05/19 CTAN domains, description pages reworked
+ 2015/05/20 more discovering, tidyingm and reworking
+ w.r.t. CTAN
+ 2015/05/21 doc. fix \dirctanref, ren. titles; \sciservref,
+ fewer CTAN domains, \texarchive and reworked ...
+ \awfulexample ... replaced
+ 2015/05/22 rm. bitelist considerations/\pagebreaks,
+ different titles
+ 2015/05/23 typo fix; \nullctanorgbases, reduce table text;
+ \paragraph -> again reworking early parts of
+ CTAN section
+ 2015/05/24 opening CTAN files ready; \prefixref;
+ doc.: removing page breaks
+ 2015/05/25 another \newlet; again reworking the CTAN
+ tables section.
+ 2015/05/26 doc. \cat@ctan...; \nullctanorgbaseref etc.
+ -- finished CTAN section
+ 2015/05/28 some more doc. on mailing lists; \THpref;
+ rm. "short UK FAQ" -- did *not* work!
+ 2015/06/14 rm. spurious section title
+ 2015/07/20 another short URL for the UK FAQ