\documentclass[12pt,titlepage]{article} \usepackage{amsmath} \usepackage{mathrsfs} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsthm} \usepackage{mathtools} \usepackage{graphicx} \usepackage{color} \usepackage{ucs} \usepackage[utf8x]{inputenc} \usepackage{xparse} \usepackage{hyperref} %----Macros---------- % % Unresolved issues: % % \righttoleftarrow % \lefttorightarrow % % \color{} with HTML colorspec % \bgcolor % \array with options (without options, it's equivalent to the matrix environment) % Of the standard HTML named colors, white, black, red, green, blue and yellow % are predefined in the color package. Here are the rest. \definecolor{aqua}{rgb}{0, 1.0, 1.0} \definecolor{fuschia}{rgb}{1.0, 0, 1.0} \definecolor{gray}{rgb}{0.502, 0.502, 0.502} \definecolor{lime}{rgb}{0, 1.0, 0} \definecolor{maroon}{rgb}{0.502, 0, 0} \definecolor{navy}{rgb}{0, 0, 0.502} \definecolor{olive}{rgb}{0.502, 0.502, 0} \definecolor{purple}{rgb}{0.502, 0, 0.502} \definecolor{silver}{rgb}{0.753, 0.753, 0.753} \definecolor{teal}{rgb}{0, 0.502, 0.502} % Because of conflicts, \space and \mathop are converted to % \itexspace and \operatorname during preprocessing. % itex: \space{ht}{dp}{wd} % % Height and baseline depth measurements are in units of tenths of an ex while % the width is measured in tenths of an em. \makeatletter \newdimen\itex@wd% \newdimen\itex@dp% \newdimen\itex@thd% \def\itexspace#1#2#3{\itex@wd=#3em% \itex@wd=0.1\itex@wd% \itex@dp=#2ex% \itex@dp=0.1\itex@dp% \itex@thd=#1ex% \itex@thd=0.1\itex@thd% \advance\itex@thd\the\itex@dp% \makebox[\the\itex@wd]{\rule[-\the\itex@dp]{0cm}{\the\itex@thd}}} \makeatother % \tensor and \multiscript \makeatletter \newif\if@sup \newtoks\@sups \def\append@sup#1{\edef\act{\noexpand\@sups={\the\@sups #1}}\act}% \def\reset@sup{\@supfalse\@sups={}}% \def\mk@scripts#1#2{\if #2/ \if@sup ^{\the\@sups}\fi \else% \ifx #1_ \if@sup ^{\the\@sups}\reset@sup \fi {}_{#2}% \else \append@sup#2 \@suptrue \fi% \expandafter\mk@scripts\fi} \def\tensor#1#2{\reset@sup#1\mk@scripts#2_/} \def\multiscripts#1#2#3{\reset@sup{}\mk@scripts#1_/#2% \reset@sup\mk@scripts#3_/} \makeatother % \slash \makeatletter \newbox\slashbox \setbox\slashbox=\hbox{$/$} \def\itex@pslash#1{\setbox\@tempboxa=\hbox{$#1$} \@tempdima=0.5\wd\slashbox \advance\@tempdima 0.5\wd\@tempboxa \copy\slashbox \kern-\@tempdima \box\@tempboxa} \def\slash{\protect\itex@pslash} \makeatother % math-mode versions of \rlap, etc % from Alexander Perlis, "A complement to \smash, \llap, and lap" % http://math.arizona.edu/~aprl/publications/mathclap/ \def\clap#1{\hbox to 0pt{\hss#1\hss}} \def\mathllap{\mathpalette\mathllapinternal} \def\mathrlap{\mathpalette\mathrlapinternal} \def\mathclap{\mathpalette\mathclapinternal} \def\mathllapinternal#1#2{\llap{$\mathsurround=0pt#1{#2}$}} \def\mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}} \def\mathclapinternal#1#2{\clap{$\mathsurround=0pt#1{#2}$}} % Renames \sqrt as \oldsqrt and redefine root to result in \sqrt[#1]{#2} \let\oldroot\root \def\root#1#2{\oldroot #1 \of{#2}} \renewcommand{\sqrt}[2][]{\oldroot #1 \of{#2}} % Manually declare the txfonts symbolsC font \DeclareSymbolFont{symbolsC}{U}{txsyc}{m}{n} \SetSymbolFont{symbolsC}{bold}{U}{txsyc}{bx}{n} \DeclareFontSubstitution{U}{txsyc}{m}{n} % Manually declare the stmaryrd font \DeclareSymbolFont{stmry}{U}{stmry}{m}{n} \SetSymbolFont{stmry}{bold}{U}{stmry}{b}{n} % Manually declare the MnSymbolE font \DeclareFontFamily{OMX}{MnSymbolE}{} \DeclareSymbolFont{mnomx}{OMX}{MnSymbolE}{m}{n} \SetSymbolFont{mnomx}{bold}{OMX}{MnSymbolE}{b}{n} \DeclareFontShape{OMX}{MnSymbolE}{m}{n}{ <-6> MnSymbolE5 <6-7> MnSymbolE6 <7-8> MnSymbolE7 <8-9> MnSymbolE8 <9-10> MnSymbolE9 <10-12> MnSymbolE10 <12-> MnSymbolE12}{} % Declare specific arrows from txfonts without loading the full package \makeatletter \def\re@DeclareMathSymbol#1#2#3#4{% \let#1=\undefined \DeclareMathSymbol{#1}{#2}{#3}{#4}} \re@DeclareMathSymbol{\neArrow}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\neArr}{\mathrel}{symbolsC}{116} \re@DeclareMathSymbol{\seArrow}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\seArr}{\mathrel}{symbolsC}{117} \re@DeclareMathSymbol{\nwArrow}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\nwArr}{\mathrel}{symbolsC}{118} \re@DeclareMathSymbol{\swArrow}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\swArr}{\mathrel}{symbolsC}{119} \re@DeclareMathSymbol{\nequiv}{\mathrel}{symbolsC}{46} \re@DeclareMathSymbol{\Perp}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\Vbar}{\mathrel}{symbolsC}{121} \re@DeclareMathSymbol{\sslash}{\mathrel}{stmry}{12} \re@DeclareMathSymbol{\bigsqcap}{\mathop}{stmry}{"64} \re@DeclareMathSymbol{\biginterleave}{\mathop}{stmry}{"6} \re@DeclareMathSymbol{\invamp}{\mathrel}{symbolsC}{77} \re@DeclareMathSymbol{\parr}{\mathrel}{symbolsC}{77} \makeatother % \llangle, \rrangle, \lmoustache and \rmoustache from MnSymbolE \makeatletter \def\Decl@Mn@Delim#1#2#3#4{% \if\relax\noexpand#1% \let#1\undefined \fi \DeclareMathDelimiter{#1}{#2}{#3}{#4}{#3}{#4}} \def\Decl@Mn@Open#1#2#3{\Decl@Mn@Delim{#1}{\mathopen}{#2}{#3}} \def\Decl@Mn@Close#1#2#3{\Decl@Mn@Delim{#1}{\mathclose}{#2}{#3}} \Decl@Mn@Open{\llangle}{mnomx}{'164} \Decl@Mn@Close{\rrangle}{mnomx}{'171} \Decl@Mn@Open{\lmoustache}{mnomx}{'245} \Decl@Mn@Close{\rmoustache}{mnomx}{'244} \makeatother % Widecheck \makeatletter \DeclareRobustCommand\widecheck[1]{{\mathpalette\@widecheck{#1}}} \def\@widecheck#1#2{% \setbox\z@\hbox{\m@th$#1#2$}% \setbox\tw@\hbox{\m@th$#1% \widehat{% \vrule\@width\z@\@height\ht\z@ \vrule\@height\z@\@width\wd\z@}$}% \dp\tw@-\ht\z@ \@tempdima\ht\z@ \advance\@tempdima2\ht\tw@ \divide\@tempdima\thr@@ \setbox\tw@\hbox{% \raise\@tempdima\hbox{\scalebox{1}[-1]{\lower\@tempdima\box \tw@}}}% {\ooalign{\box\tw@ \cr \box\z@}}} \makeatother % \mathraisebox{voffset}[height][depth]{something} \makeatletter \NewDocumentCommand\mathraisebox{moom}{% \IfNoValueTF{#2}{\def\@temp##1##2{\raisebox{#1}{$\m@th##1##2$}}}{% \IfNoValueTF{#3}{\def\@temp##1##2{\raisebox{#1}[#2]{$\m@th##1##2$}}% }{\def\@temp##1##2{\raisebox{#1}[#2][#3]{$\m@th##1##2$}}}}% \mathpalette\@temp{#4}} \makeatletter % udots (taken from yhmath) \makeatletter \def\udots{\mathinner{\mkern2mu\raise\p@\hbox{.} \mkern2mu\raise4\p@\hbox{.}\mkern1mu \raise7\p@\vbox{\kern7\p@\hbox{.}}\mkern1mu}} \makeatother %% Fix array \newcommand{\itexarray}[1]{\begin{matrix}#1\end{matrix}} %% \itexnum is a noop \newcommand{\itexnum}[1]{#1} %% Renaming existing commands \newcommand{\underoverset}[3]{\underset{#1}{\overset{#2}{#3}}} \newcommand{\widevec}{\overrightarrow} \newcommand{\darr}{\downarrow} \newcommand{\nearr}{\nearrow} \newcommand{\nwarr}{\nwarrow} \newcommand{\searr}{\searrow} \newcommand{\swarr}{\swarrow} \newcommand{\curvearrowbotright}{\curvearrowright} \newcommand{\uparr}{\uparrow} \newcommand{\downuparrow}{\updownarrow} \newcommand{\duparr}{\updownarrow} \newcommand{\updarr}{\updownarrow} \newcommand{\gt}{>} \newcommand{\lt}{<} \newcommand{\map}{\mapsto} \newcommand{\embedsin}{\hookrightarrow} \newcommand{\Alpha}{A} \newcommand{\Beta}{B} \newcommand{\Zeta}{Z} \newcommand{\Eta}{H} \newcommand{\Iota}{I} \newcommand{\Kappa}{K} \newcommand{\Mu}{M} \newcommand{\Nu}{N} \newcommand{\Rho}{P} \newcommand{\Tau}{T} \newcommand{\Upsi}{\Upsilon} \newcommand{\omicron}{o} \newcommand{\lang}{\langle} \newcommand{\rang}{\rangle} \newcommand{\Union}{\bigcup} \newcommand{\Intersection}{\bigcap} \newcommand{\Oplus}{\bigoplus} \newcommand{\Otimes}{\bigotimes} \newcommand{\Wedge}{\bigwedge} \newcommand{\Vee}{\bigvee} \newcommand{\coproduct}{\coprod} \newcommand{\product}{\prod} \newcommand{\closure}{\overline} \newcommand{\integral}{\int} \newcommand{\doubleintegral}{\iint} \newcommand{\tripleintegral}{\iiint} \newcommand{\quadrupleintegral}{\iiiint} \newcommand{\conint}{\oint} \newcommand{\contourintegral}{\oint} \newcommand{\infinity}{\infty} \newcommand{\bottom}{\bot} \newcommand{\minusb}{\boxminus} \newcommand{\plusb}{\boxplus} \newcommand{\timesb}{\boxtimes} \newcommand{\intersection}{\cap} \newcommand{\union}{\cup} \newcommand{\Del}{\nabla} \newcommand{\odash}{\circleddash} \newcommand{\negspace}{\!} \newcommand{\widebar}{\overline} \newcommand{\textsize}{\normalsize} \renewcommand{\scriptsize}{\scriptstyle} \newcommand{\scriptscriptsize}{\scriptscriptstyle} \newcommand{\mathfr}{\mathfrak} \newcommand{\statusline}[2]{#2} \newcommand{\tooltip}[2]{#2} \newcommand{\toggle}[2]{#2} % Theorem Environments \theoremstyle{plain} \newtheorem{theorem}{Theorem} \newtheorem{lemma}{Lemma} \newtheorem{prop}{Proposition} \newtheorem{cor}{Corollary} \newtheorem*{utheorem}{Theorem} \newtheorem*{ulemma}{Lemma} \newtheorem*{uprop}{Proposition} \newtheorem*{ucor}{Corollary} \theoremstyle{definition} \newtheorem{defn}{Definition} \newtheorem{example}{Example} \newtheorem*{udefn}{Definition} \newtheorem*{uexample}{Example} \theoremstyle{remark} \newtheorem{remark}{Remark} \newtheorem{note}{Note} \newtheorem*{uremark}{Remark} \newtheorem*{unote}{Note} %------------------------------------------------------------------- \begin{document} %------------------------------------------------------------------- \section*{Searching the nLab} \hypertarget{contents}{}\paragraph*{{Contents}}\label{contents} [[!include contents]] \hypertarget{contents_2}{}\section*{{Contents}}\label{contents_2} \noindent\hyperlink{searching_the_nlab}{Searching the nLab}\dotfill \pageref*{searching_the_nlab} \linebreak \noindent\hyperlink{google_search}{Google Search}\dotfill \pageref*{google_search} \linebreak \noindent\hyperlink{formula_search}{Formula Search}\dotfill \pageref*{formula_search} \linebreak \noindent\hyperlink{regular_expressions}{Regular Expressions}\dotfill \pageref*{regular_expressions} \linebreak \hypertarget{searching_the_nlab}{}\subsection*{{Searching the nLab}}\label{searching_the_nlab} There are two methods of searching the nLab: \begin{enumerate}% \item \textbf{The built-in search.} This is via the search box at the top of every page. The distinguishing characteristics of this search are: \begin{enumerate}% \item It uses \emph{regular expressions}. \item It searches the \emph{source} of each page. \end{enumerate} \item \textbf{Formula Search}: \href{https://nlabsearch.mathweb.org/}{nLab Formula Search} provides an instance of the \href{https://search.mathweb.org}{MathWebSearch} engine for nLab. To use it enter a formula query (LaTeX with query variables of the form {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char63a}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char63b}}, \ldots{}) into the central input box (or just select one of the examples), wait until the MathML has been rendered (query variables are red), and hit search. If you click on one of the hits, you get a URL, which puts you into nLab and highlights the formula hit (in gray). \item \textbf{An external search engine.} Most search engines allow you to restrict the search to a single site. The best site to use for the nLab is {\colorbox[rgb]{1.00,0.93,1.00}{\tt http\char58\char47\char47ncatlab\char46org\char47nlab}}. The distinguishing characteristics of an external search are: \begin{enumerate}% \item Most just search for alphanumeric characters. \item It searches the \emph{rendered version} of each page. \end{enumerate} \end{enumerate} \hypertarget{google_search}{}\subsection*{{Google Search}}\label{google_search} \emph{Search the nLab using Google:} \hypertarget{formula_search}{}\subsection*{{Formula Search}}\label{formula_search} \href{https://search.mathweb.org}{MathWebSearch} (MWS) is a content-based search engine for mathematical formulae. It indexes MathML formulae, using a technique derived from automated theorem proving: Substitution Tree Indexing. As the project is still under development, the authors would be happy to hear your feedback. If you have some comments you can leave it \href{https://nforum.ncatlab.org/discussion/9792/formula-search/#Item_0}{here}. If you have a bug report or a feature request please open a issue on the github \href{https://github.com/MathWebSearch/mws-frontend}{repository}. \hypertarget{regular_expressions}{}\subsection*{{Regular Expressions}}\label{regular_expressions} Regular expressions are a powerful way of extending search capabilities to take into account that one often wants to search for more than just a set phrase. In a regular expression, certain characters are declared to be ``special'' and have a particular interpretation (somewhat like TeX with its special catcodes). A special character can always be ``escaped'' to interpret it as an ordinary character. Thus {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char46}} means ``match any single character'' but {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~\char46}} means ``match a period''. As Instiki is written in ruby, it uses the ruby version of regular expressions (each language has its own version; the differences are usually minor). The following is based on the list at \href{http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html#UJ}{ruby-doc}. It has been condensed slightly to those aspects likely to be of use here: \begin{description} \item[Special characters] The special characters are: {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char46}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char124}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char40}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char41}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char94}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char123}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char43}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char36}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char42}}, and {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char63}}. To match one of these characters, precede it with a backslash. All other characters ordinarily just match themselves unless they are made somehow special by one of the special characters. \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt ~b}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~B}}] Match word boundaries and nonword boundaries respectively. Thus {\colorbox[rgb]{1.00,0.93,1.00}{\tt cat}} matches against {\colorbox[rgb]{1.00,0.93,1.00}{\tt category}} and {\colorbox[rgb]{1.00,0.93,1.00}{\tt cat}} but {\colorbox[rgb]{1.00,0.93,1.00}{\tt cat~b}} only matches {\colorbox[rgb]{1.00,0.93,1.00}{\tt cat}} (and {\colorbox[rgb]{1.00,0.93,1.00}{\tt scat}}). \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91}}\ldots{}{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char93}}] This matches against a single character in a list. The characters {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char124}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char40}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char41}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char94}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char36}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char42}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char63}} are treated as regular characters in such a list. You can specify a range using {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char45}}: thus, {\colorbox[rgb]{1.00,0.93,1.00}{\tt a\char45z}}. To include a {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char93}} or {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char45}} it must come at the start of the list. A {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char94}} at the start negates the list. \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt ~d}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~s}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~w}}] These match, respectively, digits, spaces, and word characters. \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt ~D}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~S}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ~W}}] These are the negations of the lowercase versions. \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char46}} (period)] Matches any character except a newline. \item[{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char40}}\ldots{}{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char41}}] Parentheses group pieces of the regular expression. This is important for the following modifications. In these, $x$ stands for a sub-expression which can be a single character, a {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char91}}\ldots{}{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char93}}, or a {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char40}}\ldots{}{\colorbox[rgb]{1.00,0.93,1.00}{\tt \char41}}. \item[$x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char42}}] Matches zero or more occurrences of $x$. Thus {\colorbox[rgb]{1.00,0.93,1.00}{\tt ab\char42}} matches {\colorbox[rgb]{1.00,0.93,1.00}{\tt a}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt ab}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt abb}}, and so forth. Similarly, {\colorbox[rgb]{1.00,0.93,1.00}{\tt \char40cat\char41\char42}} matches {\colorbox[rgb]{1.00,0.93,1.00}{\tt cat}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt catcat}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt catcatcat}}, and so forth. This will try to match as much as possible; use $x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char42\char63}} to make it match as little as possible. \item[$x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char43}}] Matches one or more occurrences of $x$. Thus {\colorbox[rgb]{1.00,0.93,1.00}{\tt ab\char43}} matches {\colorbox[rgb]{1.00,0.93,1.00}{\tt ab}}, {\colorbox[rgb]{1.00,0.93,1.00}{\tt abb}}, but not {\colorbox[rgb]{1.00,0.93,1.00}{\tt a}}. This will try to match as much as possible; use $x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char43\char63}} to make it match as little as possible. \item[$x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char123}}$m${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char44}}$n${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char125}}] Matches at least $m$ and at most $n$ occurrences of $re$. This will try to match as much as possible; use $x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char123}}$m${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char44}}$n${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char125\char63}} to make it match as little as possible. \item[$x${\colorbox[rgb]{1.00,0.93,1.00}{\tt \char63}}] Matches zero or one occurrence of $x$. \item[$x_1$|$x_2$] Matches either $x_1$ or $x_2$. \end{description} [[!redirects Searching nLab]] [[!redirects searching nLab]] [[!redirects Searching the nLab]] [[!redirects searching the nLab]] [[!redirects Searching in the nLab]] [[!redirects searching in the nLab]] category: meta \end{document}