diff options
Diffstat (limited to 'macros/latex/contrib/morehype/use/texlinks.sty')
-rw-r--r-- | macros/latex/contrib/morehype/use/texlinks.sty | 1554 |
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 |