summaryrefslogtreecommitdiff
path: root/macros/xetex/latex/langsci/langsci-forest-setup.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/xetex/latex/langsci/langsci-forest-setup.sty')
-rw-r--r--macros/xetex/latex/langsci/langsci-forest-setup.sty240
1 files changed, 240 insertions, 0 deletions
diff --git a/macros/xetex/latex/langsci/langsci-forest-setup.sty b/macros/xetex/latex/langsci/langsci-forest-setup.sty
new file mode 100644
index 0000000000..49e0a854ca
--- /dev/null
+++ b/macros/xetex/latex/langsci/langsci-forest-setup.sty
@@ -0,0 +1,240 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% File: langsci-forest-setup.sty
+%% Author: Language Science Press (http://langsci-press.org)
+%% Date: 2016-01-16 16:47:43 UTC
+%% Purpose: This file contains optional styles and settings for the
+%% forest package. This version is for 2.0.
+%% Language: LaTeX
+%% Licence:
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+% texlive 2015 is broken (in comparison to texlive 2013)
+% a workaround is to use a different pgf driver.
+% See email from Akira Kakuto to Stefan Müller 15.01.2016
+
+% Do we need this for 2017?
+% We seem to be better off without it 31.10.2017
+%deceive the driver
+%\def\pdftexversion{140}
+%use the old driver for dvipdfm
+%\def\pgfsysdriver{pgfsys-dvipdfm.def}
+
+% http://en.wikibooks.org/wiki/LaTeX/Linguistics#Syntactic_trees
+\usepackage{tikz-dependency}
+
+\usetikzlibrary{tikzmark} % saves positions in tikz pictures, allows to connect arbitrary text
+
+
+% http://tex.stackexchange.com/questions/256280/drawing-complex-dependency-diagrams-with-tikz-forest
+\usetikzlibrary{arrows.meta}
+
+\tikzset{deparrow/.style={-Latex}}%,blue}}
+
+
+% does not work with forest v1.05 did not check later versions
+\usepackage[external,linguistics]{forest}
+\tikzset{external/up to date check=simple}
+% for texlive: -shell-escape, for miktex -enable-write18
+% All externalized graphics go go the \externaldirectory
+%\tikzexternalize[prefix=external-figures/,shell escape=-shell-escape]
+\tikzset{external/system call={xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
+%\usepackage{morewrites}
+
+
+
+
+% specification for all trees, "default preamble" appends to existing specification.
+% The version with apostrophe replaces it.
+\forestset{default preamble'={
+ for tree={align=center,parent anchor=south, child anchor=north,anchor=north,base=bottom},
+ before drawing tree={
+ sort by=y,
+ for min={tree}{baseline}
+ }
+ }}
+
+
+\forestset{
+ declare dimen={child anchor yshift}{0pt},
+ adjust childrens child anchors/.style={
+ if n children>=2{
+ before packing={
+ tempdima/.max={max_y}{children},
+ for children={
+ child anchor yshift=tempdima()-max_y()
+ },
+ }
+ }{}
+ },
+ default preamble={
+ for tree={
+ edge path'={(!u.parent anchor)--([yshift=\forestoption{child anchor yshift}].child anchor)},
+ adjust childrens child anchors
+ }
+ },
+}
+
+
+
+% http://www.texample.net/tikz/examples/borrowers-and-lenders/
+\usetikzlibrary{arrows} %,positioning}
+\tikzset{
+ %Define standard arrow tip
+ >=stealth'}
+
+
+
+%% \forestset{
+%% sn edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom,where n children=0{tier=word}{}}},
+%% background tree/.style={for tree={text opacity=0.2,draw opacity=0.2,edge={draw opacity=0.2}}}
+%% }
+
+
+
+% The following code fixes the size of triangles for examples with translations. The specification
+% ",delay=with translation" at the leaves is important to make this work.
+% http://tex.stackexchange.com/questions/167978/smaller-roofs-for-forest/205311#205311
+\forestset{
+ with translation/.style={
+ l sep=0,inner xsep=0,
+ append translation/.expanded/.wrap pgfmath arg={\gettranslation{##1}}{content},
+ content/.expanded/.wrap pgfmath arg={\gettext{##1}}{content},
+ },
+ append translation/.style={
+ if={strequal("#1","")}{}{
+ append={[#1,no edge,inner xsep=0,inner ysep=0,outer ysep=0,
+ tier=gloss,
+ l=\baselineskip + 0.2ex,
+ ]}
+ }
+ }
+}
+
+\def\gettext#1{\gettextA#1;;\endget}
+\def\gettextA#1;#2;{\removesep#1;}
+\def\gettranslation#1{\gettranslationA#1;;\endget}
+\def\gettranslationA#1;#2;{\removesep#2;}
+\def\removesep#1;#2\endget{#1}
+
+
+% a specific style that specifies the word tier: all nodes that do not have any children
+% to do: make this style default and change all other figures explicitely as is described here:
+% http://tex.stackexchange.com/questions/167983/getting-rid-of-a-default-where-specification
+\forestset{
+sm edges/.style={for tree={parent anchor=south, child anchor=north,base=top}, % changed base=bottom
+ % to top since we have NP and AVM nodes and the NP has to start
+ % right away at the same hight as the AVM St. Mü. 18.10.2017
+ where n children=0{tier=word,delay=with translation}{} %,delay=with translation
+ },
+sm edges without translation/.style={for tree={parent anchor=south, child anchor=north,base=bottom},
+ where n children=0{tier=word}{}
+ },
+word tier/.style={where n children=0{tier=word}{}
+ },
+%
+% dependency grammar trees, projective trees only, I guess. St. Mü. 29.09.2014
+dg edges/.style={for tree={parent anchor=south, child anchor=north,align=center,base=bottom},
+ where n children=0{tier=word,edge=dotted,calign with current edge,delay=with translation}{}
+ },
+%
+% Adjunct edges as suggested by Engels, 1977
+% http://tex.stackexchange.com/questions/204770/defining-a-special-edge-style-for-connecting-nodes-in-forest/204819#204819
+dg adjunct/.style={edge path={\noexpand\path[\forestoption{edge}]
+(!u.parent anchor)--(.child anchor)-- +(0,#1)\forestoption{edge label};}},
+%
+dg adjunct/.default=6pt,
+%
+% for Tesniere-style translations
+dg transfer/.style={edge path={\noexpand\path[\forestoption{edge}, rounded corners=3pt]
+ % the line downwards
+ (!u.parent anchor)-- +($(0,-l)-(0,4pt)$)-- +($(12pt,-l)-(0,4pt)$)
+ % the horizontal line
+ ($(!p.north west)+(0,l)-(0,20pt)$)--($(.north east)+(0,l)-(0,20pt)$)\forestoption{edge label};},!p.edge'={}},
+% for Tesniere-style junctions
+dg junction/.style={no edge, tikz+={\draw (!p.east)--(!.west) (.east)--(!n.west);} },
+%
+%
+%
+% http://tex.stackexchange.com/questions/256280/drawing-complex-dependency-diagrams-with-tikz-forest/256300#256300
+% in the tree draw the highest nodes of the inheritance network. For lower nodes insert empty nodes
+% "[]". These will be filled by the same word and the numbers will be provided with bars according
+% to remoteness from the word level.
+%
+% So cool! Thanks Sašo Živanović
+%
+ wg/.style={
+ for tree={
+ no edge,
+ draw,
+ outer ysep=1pt,
+ },
+ copy label/.style={
+ for children={
+ if content={}{
+ content/.pgfmath={content("!u")},
+ calign with current,
+ edge={draw,{-Triangle[open,reversed]}},
+ copy label,
+ !u.content/.pgfmath={content},
+ !u.content+=',
+ }{
+ copy label,
+ }
+ }
+ },
+ delay={
+ copy label,
+ for tree={name/.pgfmath={content}},
+ },
+ for tree={content format={\strut\forestoption{content}}},
+ where n children={0}{
+ tier=word,
+ }{},
+ },
+%
+%
+% TAG
+% http://tex.stackexchange.com/questions/207459/getting-old-school-trees-with-forest
+% fit -> fit=band causes all nodes to have nothing below them
+tag/.style={for tree={parent anchor=south, child anchor=north,align=center,base=top,fit=rectangle},
+ where n children=0{delay=with translation}{},
+% the following breaks the alignments in sets
+ begin draw/.code={\begin{tikzpicture}[baseline=(current bounding box.center)]}
+},
+%
+% like the tag style, but without fit rectangle
+no word baseline/.style={for tree={parent anchor=south, child anchor=north,align=center,base=top},
+ where n children=0{delay=with translation}{}},
+%
+% a style that creates an arrow pointing to the substitution node from a tree top node encoded as daughter
+substitution/.style={edge={<-,dashed},l+=\baselineskip},
+%
+%
+%
+typehierarchy/.style={for tree={parent anchor=south, child
+ anchor=north,align=center,base=top,font=\itshape,fit=rectangle}},
+% if there are instances as leaves in the hiarchy
+instance/.style={edge=dotted},
+%
+% auxiliary nodes without node label
+%empty nodes/.style={
+% delay={where content={}{shape=coordinate,for parent={for children={anchor=north}}}{}}}
+}
+
+
+
+% Manual page 52
+%% \forestset{
+%% nice empty nodes/.style={
+%% for tree={calign=fixed edge angles},
+%% delay={where content={}{shape=coordinate,for parent={for children={anchor=north}}}{}}
+%% }}
+
+
+% forest 2.0
+\forestset{
+ empty nodes/.style={
+ delay={where content={}{shape=coordinate,for siblings={anchor=north}}{}}
+ }
+}