/
poster.tex
234 lines (224 loc) · 10.6 KB
/
poster.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
\input{poster/header.tex}
% Set these inputs:
\date{2019-10-10}
\title{
\href{https://github.com/TheChymera/RepSeP}{\Large
github.com/TheChymera/RepSeP
}\\\vspace{.15em}
Reproducible Publishing --- Reference Poster Implementation
}
\author{
Horea-Ioan Ioanas$^{1}$,
Markus Rudin$^{1}$,
}
\institute[ETH]{
$^{1}$Institute for Biomedical Engineering, ETH and University of Zurich
}
% These need to be inline lest the URL is constructed with whitespace
\newcommand{\myDOI}{10.5281/zenodo.3477675}
\newcommand{\myemail}{ioanas@biomed.ee.ethz.ch}
%VARIABLES
%set up a more stable buffers (the normal ones gets blanked after the titlepage is invoked)
\begin{document}
\begin{myverbbox}[\small]{\tabcode}
\begin{table}[]
\py{
pytex_tab(
script='scripts/stim_table.py', label='sp',
caption='BIDS \cite{bids} event file table, from \cite{irsabi}',
options_pre='\\centering \\resizebox{0.9\\textwidth}{!}{',
data='data/JogB.tsv', options_post='}',
)
}
\end{table}
\end{myverbbox}
\begin{myverbbox}[\small]{\spcode}
\py{pytex_fig(
'scripts/3dplot.py',
conf='poster/3dplot.conf', label='3dplot',
caption='A 3D plot. Plot script from matplotlib exampes \cite{matplotlib}.',
)}
\end{myverbbox}
\begin{frame}
\begin{columns}
\begin{column}{.42\textwidth}
\begin{beamercolorbox}[center]{postercolumn}
\begin{minipage}{.98\textwidth} % tweaks the width, makes a new \textwidth
\parbox[t][\columnheight]{\textwidth}{ % must be some better way to set the the height, width and textwidth simultaneously
\begin{myblock}{Abstract}
\input{poster/abstract.tex}
\end{myblock}\vfill
\vspace{-0.3em}
\begin{myblock}{Dependency Management}
\begin{figure}
\captionsetup{width=.9\linewidth}
\vspace{-1.2em}
\includedot[width=0.9\textwidth]{data/dependencies}
\vspace{-1.8em}
\caption{
Small excerpt and conceptual representation of software dependencies for research articles doing even only simple neuroimaging analysis.
First-level dependencies are highlighted in green.
}
\vspace{1em}
\end{figure}
Explicit, unambiguous declaration (e.g. conforming to the Package Manager Specification \cite{pms}) of first-level dependencies is vital for software environment reproducibility.
Given such a specification, an effective package manager can automatically resolve all downstream steps (typically extending into the hundreds or thousands of packages) \cite{ng}.
\end{myblock}\vfill
\vspace{-0.3em}
\begin{myblock}{Technologies}
\vspace{0.75em}
\begin{minipage}{.28\textwidth}
\begin{figure}
\includegraphics[width=0.9\textwidth]{img/pythontex}
\end{figure}
\end{minipage}~
\begin{minipage}{.68\textwidth}
Arbitrarily complex plots leveraging the full capacity of matplotlib \cite{matplotlib}, higher-level packages building on it, or other Python plotting packages, are generated live on document compilation.
\vspace{0.6em}
The core technology of this infrastructure is provided by Python\TeX{} \cite{pytex}, which comes complete with \textit{codeblock} dependency tracking (n.b. not to be confused with dependency management for the software itself).
All figures are generated on the initial execution of a \LaTeX{} compile script, and subsequently regenerated when either code, data, or styling dependencies are changed.
\end{minipage}
\end{myblock}\vfill
\vspace{-0.3em}
\begin{myblock}{3D Plots}
\vspace{0.6em}
\py{pytex_fig(
'scripts/3dplot.py',
conf='poster/3dplot.conf', label='3dplot', caption='A 3D plot, from the matplotlib exampes \cite{matplotlib}.',
)}
\vspace{1.5em}
The above image is dynamically generated on document compilation by inserting the following code in the \TeX{} document source:
\vspace{.5em}
\begin{figure}
\fcolorbox{tlg}{elg}{\spcode}
\end{figure}
\end{myblock}\vfill
\vspace{-0.3em}
\begin{myblock}{Outlook}
\begin{itemize}
\item We are looking for \textbf{testers}, to apply this reference implementation to their own work (we have used it to great satisfaction in numerous articles, including \cite{irsabi}).
\item We are looking for potential \textbf{co-authors} for the reference article implementation, which is to be submitted to an academic journal.
\item We are looking for potential \textbf{web developers} or \textbf{co-founders} to launch a platform offering RepSeP-based publishing services (yes, a journal of reproducible code-based articles!).
\end{itemize}
\end{myblock}\vfill
}\end{minipage}\end{beamercolorbox}
\end{column}
\begin{column}{.59\textwidth}
\begin{beamercolorbox}[center]{postercolumn}
\begin{minipage}{.98\textwidth} % tweaks the width, makes a new \textwidth
\parbox[t][\columnheight]{\textwidth}{ % must be some better way to set the the height, width and textwidth simultaneously
\begin{myblock}{Why do we need this?}
\vspace{0.5em}
\begin{center}
\begin{minipage}{.47\textwidth}
Why do we need code-based publishing?
\begin{itemize}
\item Transparency $\longrightarrow$ verifiability
\item Reproducibility $\longrightarrow$ hackability, reusability
\item Version management $\longrightarrow$ sustainability
\end{itemize}
\end{minipage}
\begin{minipage}{.48\textwidth}
Why do we need distributed publishing?
\begin{itemize}
\item No external entry barrier $\longrightarrow$ citizen science
\item No institutional bias $\longrightarrow$ free science
\item \textit{Less} publication bias $\longrightarrow$ honest science
\end{itemize}
\end{minipage}
\end{center}
\end{myblock}\vfill
\begin{myblock}{Split Violin Plots}
\vspace{0.1em}
\py{pytex_subfigs(
[
{'script':'scripts/vc_violin.py',
'label':'vcv',
'conf':'poster/1col.conf',
'options_pre':'{.48\\textwidth}',
},
{'script':'scripts/vcc_violin.py',
'label':'vccv',
'conf':'poster/1col.conf',
'options_pre':'{.48\\textwidth}',
},
],
environment='figure',
options_pre='\captionsetup{width=.9\linewidth}',
caption='
Violin plots highlighting both the distribution densities and quartiles in a multifactorial comparison (from \cite{irsabi}).
The style is adapted in the source code of this document to improve quartile styling in excess of the capabilities offered by the upstream package, seaborn \cite{seaborn}.
',
label='fig:vc',
)}
\vspace{0.5em}
Custom plotting options can also be used, by distributing customization code inside the article source.
For \cref{fig:vc}, a patched module from the original code is distributed in \colorbox{elg}{\texttt{lib/categorical.py}}, and preferentially imported in the script files (e.g. \colorbox{elg}{\texttt{scripts/violin.py}}).
\end{myblock}\vfill
\begin{myblock}{Statistics and Tables}
\vspace{0.3em}
\begin{minipage}{.51\textwidth}
Automatically computed and formatted inline statistics:
\begin{itemize}
\item \py{pytex_printonly('scripts/anova.py')}
\item Processing Factor: \py{boilerplate.fstatistic('Processing', condensed=True)}
\item Template Factor: \py{boilerplate.fstatistic('Template', condensed=True)}
\item Processing:Template Intearction: \py{boilerplate.fstatistic('Processing:Template', condensed=True)}
\end{itemize}
\end{minipage}
\begin{minipage}{.46\textwidth}
\begin{table}[]
\vspace{0.4em}
\py{
pytex_tab(
script='scripts/stim_table.py',
label='sp',
caption='BIDS \cite{bids} event file table, from \cite{irsabi}',
options_pre='\\centering \\resizebox{0.9\\textwidth}{!}{',
data='data/JogB.tsv',
options_post='}',
)
}
\vspace{0.4em}
\end{table}
\end{minipage}
\vspace{-1em}
Text elements can also be auto-generated from code and data, allowing inline statistics to be dynamic.
Such elements can be based on single scripts (e.g. \colorbox{elg}{\texttt{\textbackslash py\{pytex\_printonly('scripts/anova.py')\}}}), or parameterized script calls (e.g. \colorbox{elg}{\texttt{\textbackslash py\{boilerplate.fstatistic('Processing', condensed=True)\}}}), allowing the same model to be used and different factors to be reported in different locations.
\vspace{.7em}
\begin{minipage}{.7\textwidth}
\begin{figure}
\fcolorbox{tlg}{elg}{\tabcode}
\end{figure}
\end{minipage}\hfill
\begin{minipage}{.25\textwidth}
Additionally, scripts such as the one invoked in the code block to the left allow tab or comma separated value files to be automatically read and typeset as \LaTeX{} tables.
\end{minipage}
\end{myblock}\vfill
\begin{myblock}{Manual Anchors}
\py{pytex_fig(
'scripts/bsc_percentage.py', conf='poster/wide.conf', label='bsc_percentage',
caption='
Percentage of Bachelor’s degrees conferred to women in the U.S.A. by major (1970-2011).
Plot script from matplotlib exampes \cite{matplotlib}.
',
)}
\vspace{0.5em}
The style application via hierarchical matplotlib configuration files (global, per-document, per-script --- in ascending order of priority) allows the selfsame script results to be adapted to individual document types.
Multiple views of the same data analysis summary (e.g. a plot) can thus rely on the same code, avoiding divergent editing.
Even sensitive plot elements, such as anchors, remain stable throughout various style applications, as exemplified here.
\end{myblock}\vfill
\begin{myblock}{References}
\vspace{-1em}
\begin{multicols}{2}
\scriptsize
\bibliographystyle{ieeetr}
\bibliography{common/bib}
\end{multicols}
\vspace{-1em}
\end{myblock}\vfill
}\end{minipage}\end{beamercolorbox}
\end{column}
\end{columns}
\end{frame}
\end{document}