]> git.lyx.org Git - features.git/commitdiff
Add support for linguistic trees (via forest)
authorJuergen Spitzmueller <spitz@lyx.org>
Mon, 20 Apr 2015 16:14:42 +0000 (18:14 +0200)
committerJuergen Spitzmueller <spitz@lyx.org>
Mon, 20 Apr 2015 16:14:42 +0000 (18:14 +0200)
development/FORMAT
lib/chkconfig.ltx
lib/examples/de/linguistics.lyx
lib/examples/linguistics.lyx
lib/layouts/linguistics.module
lib/lyx2lyx/LyX.py
lib/lyx2lyx/lyx_2_2.py
src/LaTeXFeatures.cpp
src/version.h

index fd3be4cf0f30ecc3b84fcbe044a275b15c1704cf..ff9cd12e9e279f459801c2c8d1f70f23569f10d4 100644 (file)
@@ -11,6 +11,11 @@ adjustments are made to tex2lyx and bugs are fixed in lyx2lyx.
 
 -----------------------
 
 
 -----------------------
 
+2015-04-20 Jürgen Spitzmüller <spitz@lyx.org>
+       * Format incremented to 487: Support the forest environment of the forest package.
+          Note that this inset does not escape brackets in braces, i.e. [ and ] are output
+         verbatim, not as {[] and {]}.
+
 2015-04-20 Jürgen Spitzmüller <spitz@lyx.org>
        * Format incremented to 486: Support item arguments in the
          "Numbered Examples (consecutive)" and "Subexample" layouts of
 2015-04-20 Jürgen Spitzmüller <spitz@lyx.org>
        * Format incremented to 486: Support item arguments in the
          "Numbered Examples (consecutive)" and "Subexample" layouts of
index 7429f60d1092da5b82f53dd6089e0151c5ca9402..e8cb02728ff284017840beb01afe8898a992ac26 100644 (file)
 \TestPackage{float}
 \TestPackage{fontspec}
 \TestPackage{footmisc}
 \TestPackage{float}
 \TestPackage{fontspec}
 \TestPackage{footmisc}
+\TestPackage{forest}
 \TestPackage{framed}
 \TestPackage{geometry}
 \TestPackage{graphicx}
 \TestPackage{framed}
 \TestPackage{geometry}
 \TestPackage{graphicx}
index df81805143638ade5a5f585008eae663ab13ca73..9fcbebe95b77a5cfde68e947d2465d3d39237efa 100644 (file)
@@ -1,5 +1,5 @@
 #LyX 2.2 created this file. For more info see http://www.lyx.org/
 #LyX 2.2 created this file. For more info see http://www.lyx.org/
-\lyxformat 486
+\lyxformat 487
 \begin_document
 \begin_header
 \textclass article
 \begin_document
 \begin_header
 \textclass article
@@ -116,7 +116,8 @@ In diesem Text werden einige Funktionen von \SpecialChar LyX
  vorgestellt, die spezifisch
  auf die Bedürfnisse von Linguistinnen und Linguisten ausgerichtet sind.
  Es wird gezeigt, wie nummerierte Beispiele, Glossen, OT-Tableaux, semantische
  vorgestellt, die spezifisch
  auf die Bedürfnisse von Linguistinnen und Linguisten ausgerichtet sind.
  Es wird gezeigt, wie nummerierte Beispiele, Glossen, OT-Tableaux, semantische
- Auszeichnung und phonetische Notation (IPA) erzeugt werden können.
+ Auszeichnung, Strukturbäume und phonetische Notation (IPA) erzeugt werden
+ können.
 \end_layout
 
 \begin_layout Section
 \end_layout
 
 \begin_layout Section
@@ -1400,6 +1401,217 @@ lingmeaning
 ) verändert werden.
 \end_layout
 
 ) verändert werden.
 \end_layout
 
+\begin_layout Section
+Linguistische Strukturbäume
+\end_layout
+
+\begin_layout Standard
+Mittlerweile gibt es mehrere \SpecialChar LaTeX
+-Pakete, die bei der Erstellung von Strukturbäumen
+ helfen.
+ \SpecialChar LyX
+ unterstützt das Paket 
+\family sans
+forest
+\family default
+, welches hohe Flexibilität und Mächtigkeit mit einer intuitiven Syntax
+ vereint.
+ Das Linguistik-Modul enthält eine Strukturbaum-Einfügung, die unter 
+\family sans
+Einfügen\SpecialChar menuseparator
+Benutzerdefinierte Einfügungen
+\family default
+ zu finden ist.
+ Innerhalb dieser Einfügung können Sie die Klammernotation verwenden, die
+ das Paket 
+\family sans
+forest
+\family default
+ (wie auch andere Pakete, z.
+\begin_inset space \thinspace{}
+\end_inset
+
+B.
+\family sans
+qtree
+\family default
+) anbietet.
+\end_layout
+
+\begin_layout Standard
+Hier ist ein einfaches Beispiel:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[Hans]] [V' [V[schickt]] [DP[Maria]] [DP[D[einen]][NP[Brief]]] ]
+ ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+Wenn Sie die PDF-Ausgabe ansehen, sehen Sie, dass die Notation
+\end_layout
+
+\begin_layout Quote
+
+\family typewriter
+\size footnotesize
+[VP [DP[Hans]] [V' [V[schickt]] [DP[Maria]] [DP[D[einen]][NP[Brief]]]]]
+\end_layout
+
+\begin_layout Standard
+als Strukturbaum ausgegeben wird.
+ Um das Ergebnis bereits im \SpecialChar LyX
+
+\begin_inset ERT
+status collapsed
+
+\begin_layout Plain Layout
+
+"=
+\end_layout
+
+\end_inset
+
+Eingabefenster zu sehen, können Sie die Strukturbaum-Einfügung einfach in
+ eine Vorschau-Einfügung (
+\family sans
+Einfügen\SpecialChar menuseparator
+Vorschau
+\family default
+) einbetten.
+ Wenn 
+\begin_inset Quotes gld
+\end_inset
+
+Sofortige Vorschau
+\begin_inset Quotes grd
+\end_inset
+
+ richtig eingerichtet und aktiviert ist, sollten Sie den Baum sofort sehen
+ (zur Bearbeitung klicken Sie einfach auf das Bild):
+\end_layout
+
+\begin_layout Standard
+\begin_inset Preview
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[Maria]] [V' [V[schickt]] [DP[Hans]] [DP[D[eine]][NP[Antwort]]] ]
+ ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+Dächer (
+\begin_inset Quotes gld
+\end_inset
+
+roofs
+\begin_inset Quotes grd
+\end_inset
+
+) können mittels der Option 
+\begin_inset Quotes gld
+\end_inset
+
+triangle
+\begin_inset Quotes grd
+\end_inset
+
+ erzeugt werden (beachten Sie, dass Kommata eine spezielle Bedeutung haben;
+ sie markieren Optionen):
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[Hans]] [V' [V[schickt]] [DP[Maria]] [DP[einen weiteren Brief, triangle]]
+ ] ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+Um die Knoten des Baums besser auszurichten, verwenden Sie die Option 
+\begin_inset Quotes gld
+\end_inset
+
+tier
+\begin_inset Quotes grd
+\end_inset
+
+.
+ Alle Knoten, denen dieselbe 
+\begin_inset Quotes gld
+\end_inset
+
+tier
+\begin_inset Quotes grd
+\end_inset
+
+ (Ebene) zugewiesen wurde, werden in einer vertikalen Linie ausgerichtet.
+ Hier ist ein Beispiel:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[Hans, tier=word]] [V' [V[schickt, tier=word]] [DP[Maria, tier=word]]
+ [DP[D[einen, tier=word]][NP[Brief, tier=word]]] ] ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+Das Paket bietet viel mehr Möglichkeiten, wie bspw.
+ Bewegungspfeile und Dekorationen.
+ Sie können hier nicht eingehend besprochen werden.
+ Bitte konsultieren Sie die ausführliche Dokumentation des Pakets 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "forest"
+
+\end_inset
+
+.
+\end_layout
+
 \begin_layout Section
 Phonetische Notation (IPA)
 \end_layout
 \begin_layout Section
 Phonetische Notation (IPA)
 \end_layout
@@ -1736,6 +1948,27 @@ http://www.ctan.org/tex-archive/macros/latex/contrib/float/
 .
 \end_layout
 
 .
 \end_layout
 
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "forest"
+
+\end_inset
+
+Das forest-Paket: 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://www.ctan.org/tex-archive/macros/latex/contrib/forest/
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
 \begin_layout Bibliography
 \begin_inset CommandInset bibitem
 LatexCommand bibitem
 \begin_layout Bibliography
 \begin_inset CommandInset bibitem
 LatexCommand bibitem
index 5536e2bfb41ddd325173ddced59e2ff94974071d..f0dc8539f6f6cab6dd64c7c9b3e4604cc1b2c5aa 100644 (file)
@@ -1,5 +1,5 @@
 #LyX 2.2 created this file. For more info see http://www.lyx.org/
 #LyX 2.2 created this file. For more info see http://www.lyx.org/
-\lyxformat 486
+\lyxformat 487
 \begin_document
 \begin_header
 \textclass article
 \begin_document
 \begin_header
 \textclass article
@@ -115,7 +115,8 @@ type "mailto:"
 This paper describes some features that \SpecialChar LyX
  provides to linguists.
  It demonstrates how to use some native support in order to produce numbered
 This paper describes some features that \SpecialChar LyX
  provides to linguists.
  It demonstrates how to use some native support in order to produce numbered
- examples, glosses, OT tableaux, semantic markup, and phonetic symbols (IPA).
+ examples, glosses, OT tableaux, semantic markup, structure trees, and phonetic
+ symbols (IPA).
 \end_layout
 
 \begin_layout Section
 \end_layout
 
 \begin_layout Section
@@ -317,6 +318,37 @@ arg   "float"
 .
 \end_layout
 
 .
 \end_layout
 
+\end_deeper
+\begin_layout Enumerate
+
+\emph on
+forest.sty
+\emph default
+\begin_inset CommandInset citation
+LatexCommand cite
+key "forest"
+
+\end_inset
+
+: This package is used to generate structure trees.
+\begin_inset Separator parbreak
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+Installed on your system: 
+\begin_inset Info
+type  "package"
+arg   "forest"
+\end_inset
+
+.
+\end_layout
+
 \end_deeper
 \begin_layout Section
 Numbered examples
 \end_deeper
 \begin_layout Section
 Numbered examples
@@ -1325,6 +1357,180 @@ lingmeaning
 ) can be modified.
 \end_layout
 
 ) can be modified.
 \end_layout
 
+\begin_layout Section
+Linguistic structure trees
+\end_layout
+
+\begin_layout Standard
+Meanwhile, many \SpecialChar LaTeX
+ are available which help producing structure trees.
+ \SpecialChar LyX
+ supports the 
+\family sans
+forest
+\family default
+ package, which combines high flexibility and mightiness with a comfortable
+ input syntax.
+ The Linguistics module provides a Structure Tree inset, which can be inserted
+ via 
+\family sans
+Insert\SpecialChar menuseparator
+Custom Insets
+\family default
+.
+ Within this inset, you can insert the bracket notation used by 
+\family sans
+forest
+\family default
+ (and also by other similar packages such as 
+\family sans
+qtree
+\family default
+).
+\end_layout
+
+\begin_layout Standard
+Here is a simple example:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[John]] [V' [V[sent]] [DP[Mary]] [DP[D[a]][NP[letter]]] ] ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+If you view the PDF output, you will see that the input
+\end_layout
+
+\begin_layout Quote
+
+\family typewriter
+\size small
+[VP [DP[John]] [V' [V[sent]] [DP[Mary]] [DP[D[a]][NP[letter]]]]]
+\end_layout
+
+\begin_layout Standard
+expands to a real structure tree.
+ To view the result within the \SpecialChar LyX
+ workarea, you can simply embed the Structure
+ Tree inset into a Preview inset (
+\family sans
+Insert\SpecialChar menuseparator
+Preview
+\family default
+).
+ If instant preview is correctly installed and activated, you should see
+ the tree immediately (just click on the image in order to edit):
+\end_layout
+
+\begin_layout Standard
+\begin_inset Preview
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[Mary]] [V' [V[sent]] [DP[John]] [DP[D[a]][NP[response]]] ] ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+Roofs can be easily generated by means of the 
+\begin_inset Quotes eld
+\end_inset
+
+triangle
+\begin_inset Quotes erd
+\end_inset
+
+ option (note that the comma has special meaning, as it marks options):
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[John]] [V' [V[sent]] [DP[Mary]] [DP[another letter, triangle]] ]
+ ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+In order to align nodes of the tree more elegantly, use the 
+\begin_inset Quotes eld
+\end_inset
+
+tier
+\begin_inset Quotes erd
+\end_inset
+
+ option.
+ All nodes which have the same 
+\begin_inset Quotes eld
+\end_inset
+
+tier
+\begin_inset Quotes erd
+\end_inset
+
+ allocated get aligned.
+ Here is an example:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Flex Structure Tree
+status open
+
+\begin_layout Plain Layout
+[VP [DP[John,tier=word]] [V' [V[sent,tier=word]] [DP[Mary,tier=word]] [DP[D[a,ti
+er=word]][NP[letter,tier=word]]] ] ]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\noindent
+The package supports many additional features, such as movement arrows and
+ decorations, that cannot documented here (please refer to the detailed
+ package documentation 
+\begin_inset CommandInset citation
+LatexCommand cite
+key "forest"
+
+\end_inset
+
+).
+\end_layout
+
 \begin_layout Section
 Phonetic Symbols (IPA)
 \end_layout
 \begin_layout Section
 Phonetic Symbols (IPA)
 \end_layout
@@ -1682,6 +1888,27 @@ http://www.ctan.org/tex-archive/macros/latex/contrib/float/
 .
 \end_layout
 
 .
 \end_layout
 
+\begin_layout Bibliography
+\begin_inset CommandInset bibitem
+LatexCommand bibitem
+key "forest"
+
+\end_inset
+
+The forest package: 
+\begin_inset Flex URL
+status collapsed
+
+\begin_layout Plain Layout
+
+http://www.ctan.org/tex-archive/macros/latex/contrib/forest/
+\end_layout
+
+\end_inset
+
+.
+\end_layout
+
 \begin_layout Bibliography
 \begin_inset CommandInset bibitem
 LatexCommand bibitem
 \begin_layout Bibliography
 \begin_inset CommandInset bibitem
 LatexCommand bibitem
index 1527f8f8eb2cdaeda568852f4307eeda748ad6d2..22da764099d682a88fc48c80f44172cb650874f4 100644 (file)
@@ -1,4 +1,4 @@
-#\DeclareLyXModule[covington.sty]{Linguistics}
+#\DeclareLyXModule[covington.sty,enumitem.sty,forest.sty]{Linguistics}
 #DescriptionBegin
 #Defines some special environments useful for linguistics (numbered examples,
 #glosses, semantic markup, tableau floats).
 #DescriptionBegin
 #Defines some special environments useful for linguistics (numbered examples,
 #glosses, semantic markup, tableau floats).
@@ -123,6 +123,25 @@ InsetLayout Flex:Tri-Glosse
        ResetsFont true
 End
 
        ResetsFont true
 End
 
+# Structure trees via the forest package
+InsetLayout Flex:Structure_Tree
+       LyXType               custom
+       LabelString           Tree
+       LatexType             environment
+       LatexName             forest
+       Decoration            classic
+       LabelFont
+         Size                Small
+       EndFont
+       MultiPar              true
+       CustomPars            false
+       ParbreakIsNewline     true
+       FreeSpacing           true
+       Requires              forest
+       ResetsFont            true
+        PassThruChars         []
+End
+
 
 # Some semantik markup for Semantics
 InsetLayout Flex:Expression
 
 # Some semantik markup for Semantics
 InsetLayout Flex:Expression
index 9df4b422a1864a1763d4797babfc6f4cd3b14f1f..055fcbd010557e7948611a6521c30352591c901d 100644 (file)
@@ -85,7 +85,7 @@ format_relation = [("0_06",    [200], minor_versions("0.6" , 4)),
                    ("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
                    ("2_0", list(range(346,414)), minor_versions("2.0" , 8)),
                    ("2_1", list(range(414,475)), minor_versions("2.1" , 0)),
                    ("1_6", list(range(277,346)), minor_versions("1.6" , 10)),
                    ("2_0", list(range(346,414)), minor_versions("2.0" , 8)),
                    ("2_1", list(range(414,475)), minor_versions("2.1" , 0)),
-                   ("2_2", list(range(475,487)), minor_versions("2.2" , 0))
+                   ("2_2", list(range(475,488)), minor_versions("2.2" , 0))
                   ]
 
 ####################################################################
                   ]
 
 ####################################################################
index 95966197c16624b52a4d5a365b662c9dba02ca33..f885f57792d68271cbf5e4206372b473e956d8f4 100644 (file)
@@ -768,6 +768,46 @@ def revert_ex_itemargs(document):
         i += 1
 
 
         i += 1
 
 
+def revert_forest(document):
+    " Reverts the forest environment (Linguistics module) to TeX-code "
+
+    # Do we use the linguistics module?
+    have_mod = False
+    mods = document.get_module_list()
+    for mod in mods:
+        if mod == "linguistics":
+            have_mod = True
+            continue
+
+    if not have_mod:
+        return
+
+    i = 0
+    while True:
+        i = find_token(document.body, "\\begin_inset Flex Structure Tree", i)
+        if i == -1:
+            return
+        j = find_end_of_inset(document.body, i)
+        if j == -1:
+            document.warning("Malformed LyX document: Can't find end of Structure Tree inset")
+            i += 1
+            continue
+
+        beginPlain = find_token(document.body, "\\begin_layout Plain Layout", i)
+        endPlain = find_end_of_layout(document.body, beginPlain)
+        content = lyx2latex(document, document.body[beginPlain : endPlain])
+        document.warning("content: %s" % content)
+
+        add_to_preamble(document, ["\\usepackage{forest}"])
+
+        document.body[i:j + 1] = ["\\begin_inset ERT", "status collapsed", "",
+                "\\begin_layout Plain Layout", "", "\\backslash", 
+                "begin{forest}", "\\end_layout", "", "\\begin_layout Plain Layout",
+                content, "\\end_layout", "", "\\begin_layout Plain Layout",
+                "\\backslash", "end{forest}", "", "\\end_layout", "", "\\end_inset"]
+        # no need to reset i
+
+
 ##
 # Conversion hub
 #
 ##
 # Conversion hub
 #
@@ -788,10 +828,12 @@ convert = [
            [483, [convert_specialchar]],
            [484, []],
            [485, []],
            [483, [convert_specialchar]],
            [484, []],
            [485, []],
-           [486, []]
+           [486, []],
+           [487, []]
           ]
 
 revert =  [
           ]
 
 revert =  [
+           [485, [revert_forest]],
            [485, [revert_ex_itemargs]],
            [484, [revert_sigplan_doi]],
            [483, [revert_georgian]],
            [485, [revert_ex_itemargs]],
            [484, [revert_sigplan_doi]],
            [483, [revert_georgian]],
index 7491ef3757294cc5fe4cfca213652fa1930ba0f7..dcfb44c8ecc86ed53dbc3583858bf5cf504f04a0 100644 (file)
@@ -753,7 +753,8 @@ char const * simplefeatures[] = {
        "tcolorbox",
        "pdfcomment",
        "fixme",
        "tcolorbox",
        "pdfcomment",
        "fixme",
-       "todonotes"
+       "todonotes",
+       "forest"
 };
 
 char const * bibliofeatures[] = {
 };
 
 char const * bibliofeatures[] = {
index 7109a1da616b431ec858a70ac8ae082d11816874..31466b46377c7a2a26c064b82a7a49b2cafcce62 100644 (file)
@@ -32,8 +32,8 @@ extern char const * const lyx_version_info;
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
 
 // Do not remove the comment below, so we get merge conflict in
 // independent branches. Instead add your own.
-#define LYX_FORMAT_LYX 486 // spitz: support item argument in linguistic examples
-#define LYX_FORMAT_TEX2LYX 486
+#define LYX_FORMAT_LYX 487 // spitz: support for forest environment
+#define LYX_FORMAT_TEX2LYX 487
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER
 
 #if LYX_FORMAT_TEX2LYX != LYX_FORMAT_LYX
 #ifndef _MSC_VER