\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