Skip to content

Commit ae67d58

Browse files
committed
add template example (LaTeX)
1 parent 0617ea9 commit ae67d58

File tree

4 files changed

+275
-2
lines changed

4 files changed

+275
-2
lines changed

advanced/template.go

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
package main
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"log"
7+
"os"
8+
"text/template"
9+
"time"
10+
)
11+
12+
type Person []struct {
13+
Name struct {
14+
Title string `json:"title"`
15+
First string `json:"first"`
16+
Middle string `json:"middle"`
17+
Last string `json:"last"`
18+
} `json:"name"`
19+
Address struct {
20+
Street string `json:"street"`
21+
Zip string `json:"zip"`
22+
Location string `json:"location"`
23+
Country string `json:"country"`
24+
} `json:"address"`
25+
Contact struct {
26+
Phone string `json:"phone"`
27+
Mobile string `json:"mobile"`
28+
Email string `json:"email"`
29+
Web string `json:"web"`
30+
} `json:"contact"`
31+
Gender string `json:"gender"`
32+
Birthday string `json:"birthday"`
33+
}
34+
35+
func shortMiddleName(input string) string {
36+
if len(input) > 0 {
37+
return input[0:1] + "."
38+
}
39+
return ""
40+
}
41+
42+
func getDate() string {
43+
return time.Now().Format("2006-01-02")
44+
}
45+
46+
func getPlace() string {
47+
return "Munich"
48+
}
49+
50+
func main() {
51+
jsonstr, latexstr := getExampleData()
52+
53+
person := Person{}
54+
55+
err := json.Unmarshal([]byte(jsonstr), &person)
56+
if err != nil {
57+
log.Println(err)
58+
}
59+
60+
fmap := template.FuncMap{
61+
"shortMiddleName": shortMiddleName,
62+
"getDate": getDate,
63+
"getPlace": getPlace,
64+
}
65+
66+
t := template.New("letter").Delims("<<", ">>").Funcs(fmap)
67+
68+
_, err = t.Parse(latexstr)
69+
if err != nil {
70+
log.Println(err)
71+
}
72+
73+
f, err := os.OpenFile("./template_latex.tex", os.O_WRONLY|os.O_CREATE, 0755)
74+
if err == nil {
75+
err = t.Execute(f, person)
76+
if err != nil {
77+
fmt.Println(err)
78+
}
79+
return
80+
}
81+
fmt.Println(err)
82+
t.Execute(os.Stdout, person)
83+
}
84+
85+
func getExampleData() (string, string) {
86+
jsonstr := `
87+
[
88+
{
89+
"Name": {
90+
"Title": "Dr.",
91+
"First": "John",
92+
"Middle": "F.",
93+
"Last": "Doe"
94+
},
95+
"Address": {
96+
"Street": "Musterweg 2",
97+
"Zip": "12345",
98+
"Location": "Bielefeld",
99+
"Country": "Germany"
100+
},
101+
"Gender": "m",
102+
"Birthday": "1970-01-01"
103+
},
104+
{
105+
"Name": {
106+
"Title": "Prof. Dr.",
107+
"First": "Jane",
108+
"Middle": "A.",
109+
"Last": "Doe"
110+
},
111+
"Address": {
112+
"Street": "Musterweg 3",
113+
"Zip": "12345",
114+
"Location": "Bielefeld",
115+
"Country": "Germany"
116+
},
117+
"Gender": "f",
118+
"Birthday": "1980-01-03"
119+
},
120+
{
121+
"Name": {
122+
"Title": "Dr.",
123+
"First": "Sascha",
124+
"Middle": "",
125+
"Last": "Doe"
126+
},
127+
"Address": {
128+
"Street": "Musterweg 4",
129+
"Zip": "12345",
130+
"Location": "Bielefeld",
131+
"Country": "Germany"
132+
},
133+
"Gender": "d",
134+
"Birthday": "1978-01-02"
135+
}
136+
]`
137+
latexstr := `
138+
\documentclass[
139+
sender,
140+
paper=a4,
141+
version=last,
142+
fontsize=12pt,
143+
DIV=13,
144+
BCOR=0mm]{scrlttr2}
145+
\parskip4mm
146+
\parindent0mm
147+
\usepackage[english,ngerman]{babel}
148+
\usepackage[utf8]{inputenc}
149+
\usepackage{csquotes}
150+
151+
\usepackage{lmodern}
152+
\renewcommand*\familydefault{\sfdefault}
153+
\usepackage[T1]{fontenc}
154+
155+
\usepackage{changepage}
156+
\changepage{+3cm}{}{}{}{}{}{}{}{-5cm}
157+
\LoadLetterOption{sender}
158+
159+
\begin{document}
160+
<< range . >>
161+
\newpage
162+
\setkomavar*{enclseparator}{Appendix}
163+
\setkomavar{subject}{Subject: This is an Example}
164+
\setkomavar{date}{<< getDate >>}
165+
\setkomavar{place}{<< getPlace >>}
166+
167+
\begin{letter}{
168+
<< .Name.Title >> << .Name.First >> << .Name.Middle | shortMiddleName >> << .Name.Last >> \\
169+
<< .Address.Street >>\\
170+
<< .Address.Zip >> << .Address.Location >>
171+
}
172+
\opening{Dear Recipient}
173+
174+
\selectlanguage{english}
175+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
176+
177+
\closing{kind regards}
178+
<< end >>
179+
\end{letter}
180+
181+
\end{document}
182+
`
183+
184+
return jsonstr, latexstr
185+
}

advanced/template_latex.pdf

45.4 KB
Binary file not shown.

advanced/template_latex.tex

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
2+
\documentclass[
3+
sender,
4+
paper=a4,
5+
version=last,
6+
fontsize=12pt,
7+
DIV=13,
8+
BCOR=0mm]{scrlttr2}
9+
\parskip4mm
10+
\parindent0mm
11+
\usepackage[english,ngerman]{babel}
12+
\usepackage[utf8]{inputenc}
13+
\usepackage{csquotes}
14+
15+
\usepackage{lmodern}
16+
\renewcommand*\familydefault{\sfdefault}
17+
\usepackage[T1]{fontenc}
18+
19+
\usepackage{changepage}
20+
\changepage{+3cm}{}{}{}{}{}{}{}{-5cm}
21+
\LoadLetterOption{sender}
22+
23+
\begin{document}
24+
25+
\newpage
26+
\setkomavar*{enclseparator}{Appendix}
27+
\setkomavar{subject}{Subject: This is an Example}
28+
\setkomavar{date}{2019-03-11}
29+
\setkomavar{place}{Munich}
30+
31+
\begin{letter}{
32+
Dr. John F. Doe \\
33+
Musterweg 2\\
34+
12345 Bielefeld
35+
}
36+
\opening{Dear Recipient}
37+
38+
\selectlanguage{english}
39+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
40+
41+
\closing{kind regards}
42+
43+
\newpage
44+
\setkomavar*{enclseparator}{Appendix}
45+
\setkomavar{subject}{Subject: This is an Example}
46+
\setkomavar{date}{2019-03-11}
47+
\setkomavar{place}{Munich}
48+
49+
\begin{letter}{
50+
Prof. Dr. Jane A. Doe \\
51+
Musterweg 3\\
52+
12345 Bielefeld
53+
}
54+
\opening{Dear Recipient}
55+
56+
\selectlanguage{english}
57+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
58+
59+
\closing{kind regards}
60+
61+
\newpage
62+
\setkomavar*{enclseparator}{Appendix}
63+
\setkomavar{subject}{Subject: This is an Example}
64+
\setkomavar{date}{2019-03-11}
65+
\setkomavar{place}{Munich}
66+
67+
\begin{letter}{
68+
Dr. Sascha Doe \\
69+
Musterweg 4\\
70+
12345 Bielefeld
71+
}
72+
\opening{Dear Recipient}
73+
74+
\selectlanguage{english}
75+
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
76+
77+
\closing{kind regards}
78+
79+
\end{letter}
80+
81+
\end{document}

readme.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,13 +307,13 @@ Calculate and print the fibonacci numbers
307307
go run fibonacci.go
308308
```
309309

310-
Calculate and print the requested (32th) prime number
310+
Calculate and print the requested (32th) prime number ([Golang Playground](https://play.golang.org/p/fB25PQlVWu4))
311311

312312
```Shell
313313
go run prime.go 32
314314
```
315315

316-
Do things with numbers, strings and switch-cases
316+
Do things with numbers, strings and switch-cases ([Golang Playground](https://play.golang.org/p/MvKDvR_wzlQ))
317317

318318
```Shell
319319
go run numbers.go
@@ -325,6 +325,13 @@ List files in working directory
325325
go run explorer.go
326326
```
327327

328+
Use a template to create and fill documents (this example uses [LaTeX](https://www.latex-project.org)) ([Golang Playground](https://play.golang.org/p/riy6SU21alH))
329+
330+
```Shell
331+
go run template.go
332+
pdflatex -interaction=nonstopmode template_latex.tex
333+
```
334+
328335
Start a ticker (do things periodically)
329336

330337
```Shell

0 commit comments

Comments
 (0)