%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% File: langsci-optional.sty %% Author: Language Science Press (http://langsci-press.org) %% Date: 2024-12-03 11:47:43 UTC %% Purpose: This file contains useful, but not essential, %% macros for books using langscibook.cls %% Language: LaTeX %% Licence: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{pbox} % boxes with maximum width % Heiko Oberdiek % http://tex.stackexchange.com/questions/136644/vertical-space-in-interaction-with-figure-center-environment \newcommand{\oneline}[1]{% \begingroup \sbox0{\ignorespaces#1\unskip}% \leavevmode \ifdim\wd0>\linewidth \hbox to\linewidth{% \hss\resizebox{\linewidth}{!}{\copy0 }\hss }% \else \copy0 % \fi \endgroup } \newcommand{\centerfit}[1]{% \begingroup \sbox0{\ignorespaces#1\unskip}% \leavevmode \ifdim\wd0>\linewidth \hbox to\linewidth{% \hss\resizebox{\linewidth}{!}{\copy0 }\hss }% \else \centerline{\copy0 }% \fi \endgroup } % Helps to fit verbatim onto one line: % http://tex.stackexchange.com/questions/140593/shrinking-verbatim-text/ \usepackage{fancyvrb} \newenvironment{fitverb} {\SaveVerbatim{rlwv}} {\endSaveVerbatim \sbox0{\BUseVerbatim{rlwv}} \begingroup\center % don't add indentation \ifdim\wd0>\linewidth \resizebox{\linewidth}{!}{\copy0}% \else \copy0 \fi \endcenter\endgroup} % \VerbatimFootnotes %breaks roman numbering for examples in footnotes % http://tex.stackexchange.com/questions/73464/inserting-rtl-text-in-verbatim-environment?rq=1 % verbatim with RTL text %\DefineVerbatimEnvironment{rtlverbatim}{Verbatim}{commandchars=+\[\]} %add intonation bars over morphemes or words \newcommand{\intline}[2]{\settowidth{\LSPTmp}{#2}\raisebox{#1pt}{\parbox{.1mm}{\rule{\LSPTmp}{.5pt}}}#2} %add rising or falling intonation \newcommand{\dline}[3]{% \parbox{.1mm}{\begin{picture}(0,0)% \put(0,#1){\line(#2,-1){#3}}% \end{picture}% }% } %% rotated table headers % create lengths \newlength{\rotheight} \newlength{\rotwidth} \newcommand{\rotatehead}[2][1cm]{ %width is the width of the parbox %height is the buffer space used to vertically stretch the headere \setlength{\rotwidth}{#1} \setlength{\rotheight}{.85\rotwidth} \begin{rotate}{33}~ %nbsp shifts the content away from the line underneath \parbox{\rotwidth}{\raggedright #2} \end{rotate}% \rule{0pt}{\rotheight} %add zero width rule to get the right table height } % example metadata \newcommand{\langinfo}[3]{{\upshape #1\il{#1}~(% \ifx\\#2\\% \else% #2; \fi% #3)}\nopagebreak[4]\ignorespaces} \newcommand{\langinfoverb}[3]{{\upshape #1~(% langinfo without index marker \ifx\\#2\\% \else% #2; \fi% #3)}\nopagebreak[4]\ignorespaces} \newcommand{\fitpagewidth}[1]{ \resizebox{\textwidth}{!}{#1} } \newcommand{\fittable}[1]{\resizebox{\textwidth}{!}{#1}} \usepackage{array} \newenvironment{widetabular}[1][1] {\tabularx{#1\textwidth}} {\endtabularx} % Vowel chart tikz commands \newcommand{\aeiou}{% \node at (1.5,0) (a) {a}; \node at (0,3) (i) {i}; \node at (3,3) (u) {u}; \node at (0.5,1.5) (e) {e}; \node at (2.5,1.5) (o) {o}; } \newcommand{\aeiouEO}{% \node at (1.5,0) (a) {a}; \node at (0,3) (i) {i}; \node at (3,3) (u) {u}; \node at (0.25,2) (e) {e}; \node at (2.75,2) (o) {o}; \node at (0.75,1) (E) {ε}; \node at (2.25,1) (O) {ɔ}; } \usepackage{tabularx} %no hyphenation left alingned \newcolumntype{Q}{>{\raggedright\arraybackslash}X} %no hyphenation right aligned \newcolumntype{Y}{>{\raggedleft\arraybackslash}X} %no hyphenation centered \newcolumntype{C}{>{\centering\arraybackslash}X} %no hyphenation fixed width \newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} %no hyphenation centered fixed width \newcolumntype{Z}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} %no hyphenation right aligned fixed width \newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}m{#1}} % Underlining in gb4e-example Environments. Usual underlining commands that span multiple words do not work, because gb4e would parse it as one word. % Example: \underline{My example phrase} should become \ulp{My}{~~~~~} \ulp{example}{~~~~~} \ule{phrase} % Note: The 2nd Argument of the \ulp command is filled in by experience - if you are not familiar with the command, you should experiment a bit. Usually, five tildes are enough, but be sure to check the outcome. % \ule is meant to be the last word in a phrase that is underlined. Therefore, \ule does not have an extra length. \usepackage[normalem]{ulem} \usepackage{calc} \newlength{\fulllength} \newcommand{\ulp}[2]{%#1: stuff to underline, #2: extra length to skip the whitespace between to components \settowidth{\LSPTmp}{#1}% % several boxes are need to assure that words with ascending and descending letters are underlined at the same % level, leading to the impression of a continuous stroke \parbox[t]{\LSPTmp}{%restrict first box to the length of first argument \settowidth{\fulllength}{\parbox{\LSPTmp}{~}\parbox{#2mm}{~}} %inner box is larger than outerbox, so underlining will extend beyond length of outer box % align parbox to bottom % | mbox to prevent hyphenation \uline{\parbox[b]{\fulllength}{\mbox{#1}}}% }% } \newcommand{\ule}[1]{%#1: stuff to underline, no extra length \ulp{#1}{0}% } \newlength{\fullllength} \newcommand{\soutp}[2]{%#1: stuff to underline, #2: extra length to skip the whitespace between to components \settowidth{\LSPTmp}{#1}% % several boxes are need to assure that words with ascending and descending letters are underlined at the same % level, leading to the impression of a continuous stroke \parbox[t]{\LSPTmp}{%restrict first box to the length of first argument \settowidth{\fullllength}{\parbox{\LSPTmp}{~}\parbox{#2mm}{~}}%inner box is larger than outerbox, so underlining will extend beyond length of outer box % align parbox to bottom % | mbox to prevent hyphenation \sout{\parbox[b]{\fullllength}{\mbox{#1}}}% }% } \newcommand{\soute}[1]{%#1: stuff to underline, no extra length \soutp{#1}{0}% } \newcommand{\longrule}{\rule{1em}{.3pt}} \usepackage{colortbl} \newcommand{\shadecell}{\cellcolor{black!20!white}} % vertical alignment of numbered example \newcommand{\eabox}[2][-.7\baselineskip]{ \ea \parbox[t]{.8\textwidth}{ \vspace{#1} #2 } \z } \newcommand{\exbox}[2][-.7\baselineskip]{ \ex \parbox[t]{.8\textwidth}{ \vspace{#1} #2 } } %fix \verb error in biblatex % \makeatletter % \def\blx@maxline{77} % \makeatother \usepackage{todonotes} \newcommand{\rephrase}[2]{{\color{yellow!30!black}#2}\todo{replaced `#1'}} \newcommand{\missref}[2][]{\todo[#1]{missing reference #2}} \newenvironment{indentquote}[1]% {\list{}{\leftmargin=#1\rightmargin=0pt}\item[]}% {\endlist} \newcommand{\phonrule}[3]{#1 $\to$ #2 / #3} \newcommand{\featurebox}[1]{$\left[\begin{tabular}{>{\scshape}c}#1\end{tabular}\right]$} %connect two elements with lines \newcommand{\connect}[2]{% \tikz[overlay,remember picture]{% \draw[-,thick] (#1) -- (#2) node {}; % } } \usetikzlibrary{arrows,arrows.meta} \newcounter{lsConnectTempGroup} % Arguments: % mandatory arg #1, % optional argument #2 with the current group counter as its default value. \NewDocumentCommand\ConnectTail{m O{\thelsConnectTempGroup}}{% \edef\lsConnectTempPosition{#2}%\edef reads the current value of the counter. {\tikz[remember picture, anchor=base, baseline, inner xsep=0pt, inner ysep=-.5ex] \node (ConnectTempTail\lsConnectTempPosition) {\strut{}#1};}% } % Arguments: % star #1, % optional argument (distance of arrow from text= std. one x-height), % mand. arg. (node text), % optional argument #2, the group specifier % optional argument #3, some node text \NewDocumentCommand\ConnectHead{s O{1ex} m O{\thelsConnectTempGroup}}{% \edef\lsConnectTempPosition{#4}% %We have a match, let's update the group counter \stepcounter{lsConnectTempGroup}% {\tikz[remember picture, anchor=base, baseline, inner xsep=0pt, inner ysep=-.5ex] \node (ConnectTempHead\lsConnectTempPosition) {\strut{}#3};% \tikz[remember picture] \draw[overlay, % Check if the starred version is used. The % starred version is right->left, the normal % version left->right \IfBooleanTF#1{{Triangle[]}-}{-{Triangle[]}}] (ConnectTempTail\lsConnectTempPosition.south) -- ++(0,-#2) -| (ConnectTempHead\lsConnectTempPosition.south);% }% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%% Extras for use in (some) edited volumes %%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % for chapters without abstract \newcommand{\noabstract}{\relax} %%%%%%%%%%%%%%%%%%%% %%%% %%%%% %%%% PLOTS %%%%% %%%% %%%%% %%%%%%%%%%%%%%%%%%%% \newcommand{\LSfrac}[1]{{\addfontfeature{Fractions=On}#1}}% Use the fraction glyphs shipped with Libertine. The argument is n/m, where n and m are integers % Provide a raised tie bar for diphthongs and affricates with ascenders \newcommand{\hitie}[2]{% \mbox{#1}% \raisebox{.5mm}{% ͡% }% \mbox{#2}% } \newcommand{\hitier}[3][.7]{% \mbox{#2}% \hspace*{#1mm}% \raisebox{.5mm}{% ͡% }% \hspace*{-#1mm}% \mbox{#3}% } \newcommand{\hitiel}[3][.7]{% \mbox{#2}% \hspace*{-#1mm}% \raisebox{.5mm}{% ͡% }% \hspace*{#1mm}% \mbox{#3}% } % commands moved here from cgloss \let\prmbrs=0 \def\primebars{\let\prmbrs=1} \def\obar#1{\ifmmode#1^{0}\else#1$^{0}$\fi} %% FIX \def\mbar#1{\ifmmode#1^{\mathrm{max}}\else#1\textsuperscript{max}\fi} \def\ibar#1{\ifx\prmbrs0% \ifmmode\overline{\mathrm{#1}}\else$\overline{\mbox{#1}}$\fi% \else\ifmmode#1^{'}\else#1$^{'}$\fi\fi} \def\iibar#1{\ifx\prmbrs0% \ifmmode\overline{\overline{\mathrm{#1}}}% \else$\overline{\overline{\mbox{#1}}}$\fi% \else #1P\fi} \def\spec#1{[Spec,#1]} %Def. of "Specifier of #1" % Check marks and crosses \usepackage{pifont} \newcommand*{\langscicheckmark}{\ding{51}} \newcommand*{\langscicross}{\ding{55}} \providecommand{\citegen}[2][]{\citeauthor{#2}'s (\citeyear*[#1]{#2})} \providecommand{\citeapo}[2][]{\citeauthor{#2}' (\citeyear*[#1]{#2})} \providecommand{\protectedex}[1]{\noindent\parbox{\linewidth}{#1}} \providecommand{\largerpage}[1][1]{\enlargethispage{#1\baselineskip}} % vertical space to structure tables \providecommand{\tablevspace}{\\[-.5em]} \providecommand{\biberror}[1]{{\color{red}#1}} \providecommand{\lsptoprule}{\midrule\toprule} \providecommand{\lspbottomrule}{\bottomrule\midrule} \providecommand{\REF}[2][]{(\ref{#2}#1)} \newcommand{\glottocodes}[1]{} \newcommand{\keywords}[1]{} \providecommand{\ob}{{\upshape [}} %opening bracket \providecommand{\cb}{{\upshape ]}} %closing bracket \providecommand{\op}{{\upshape (}} %opening paren \providecommand{\cp}{{\upshape )}} %closing paren \providecommand{\db}{\hphantom{[}} %dummy space for [ in IMT line % Shortcuts to langsci-affiliation styles % These commands allow switching between two frequently used output styles % for authors and affiliations: % The first command does not produce any superscripted indexes for affiliations. % Authors are output in their own line (not grouped in one line), with their % affiliations following in the line directly below their names. \NewDocumentCommand{\AffiliationsWithoutIndexing}{} {% \SetupAffiliations{output in groups = false, separator between two = {\bigskip\\}, separator between multiple = {\bigskip\\}, separator between final two = {\bigskip\\} } } % This commands reverts to the standards in langsci-affiliations: authors are % grouped in one line, with indexes pointing to their affiliations. Affiliations % are resolved in the line below. \NewDocumentCommand{\AffiliationsWithIndexing}{} {% \SetupAffiliations{output in groups = true, separator between two = {~\&~}, separator between multiple = {,~}, separator between final two = {~\&~} } } \newcommand{\licencebox}[2][]{\parbox{#1\textwidth}{\tiny\raggedright #2}}