├── .gitignore ├── CV ├── CV.tex ├── Makefile ├── NSF_CV.tex ├── aaspp4.sty ├── enumitem.sty └── lastpage.sty ├── LICENSE.txt ├── Makefile ├── README.md ├── content ├── index.html ├── media │ ├── apple-touch-icon.png │ ├── css │ │ ├── site.css │ │ └── syntax.css │ ├── favicon.ico │ ├── images │ │ ├── dosewallips_meadows.jpg │ │ ├── jake.jpg │ │ ├── jake2.jpg │ │ ├── vanderplas-1-large.jpg │ │ ├── vanderplas-1-medium.jpg │ │ ├── vanderplas-1-thumb.jpg │ │ ├── vanderplas-2-large.jpg │ │ ├── vanderplas-2-medium.jpg │ │ ├── vanderplas-2-thumb.jpg │ │ ├── vanderplas-3-large.jpg │ │ ├── vanderplas-3-medium.jpg │ │ └── vanderplas-3-thumb.jpg │ ├── js │ │ ├── libs │ │ │ ├── dd_belatedpng.js │ │ │ ├── jquery-1.5.1.min.js │ │ │ ├── meta.yaml │ │ │ └── modernizr-1.7.min.js │ │ ├── scale.fix.js │ │ └── styles.css │ └── meta.yaml ├── photos.html ├── projects.html ├── speaking.html └── vitae.html ├── info.yaml ├── layout ├── analytics.j2 └── minimal.j2 ├── production.yaml └── site.yaml /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | 3 | build/ 4 | deploy/ 5 | deploy_production/ 6 | .hyde_deps 7 | content/.hyde_deps 8 | 9 | # LaTeX 10 | *.aux 11 | *.log 12 | *.out 13 | *.pdf -------------------------------------------------------------------------------- /CV/CV.tex: -------------------------------------------------------------------------------- 1 | % Adapted from layout by GaelVaroquaux 2 | % http://gael-varoquaux.info 3 | % 4 | 5 | \documentclass{article} %{{{-- 6 | 7 | \usepackage[paper=a4paper, 8 | top=2cm, 9 | left=1.35cm, 10 | width=18.2cm, 11 | bottom=2cm 12 | ]{geometry} 13 | %margin=4cm, 14 | 15 | \usepackage{calc} 16 | \usepackage[T1]{fontenc} 17 | \usepackage[utf8]{inputenc} 18 | \usepackage{lmodern} 19 | \usepackage{color,hyperref} 20 | \usepackage{graphicx} 21 | \usepackage{multicol} 22 | 23 | \usepackage{wasysym} % For phone symbol 24 | \usepackage{url} 25 | 26 | \def\bf{\bfseries} 27 | \def\sf{\sffamily} 28 | \def\sl{\slshape} 29 | % Semi condensed bold 30 | 31 | \definecolor{deep_blue}{rgb}{0,.2,.5} 32 | \definecolor{dark_blue}{rgb}{0,.1,.3} 33 | \definecolor{myblue}{rgb}{.01,0.21,0.71} 34 | \definecolor{gray}{rgb}{.5, .5, .5} 35 | 36 | \hypersetup{pdftex, % needed for pdflatex 37 | breaklinks=true, % so long urls are correctly broken across lines 38 | colorlinks=true, 39 | urlcolor=myblue, 40 | %linkcolor=darkblue, 41 | %citecolor=darkgreen, 42 | } 43 | 44 | 45 | %% This gives us fun enumeration environments. 46 | \usepackage{enumitem} 47 | 48 | %% More layout: Get rid of indenting throughout entire document 49 | \setlength{\parindent}{0in} 50 | 51 | %% Reference the last page in the page number 52 | % 53 | \usepackage{fancyhdr,lastpage} 54 | \pagestyle{fancy} 55 | %\pagestyle{empty} % Uncomment this to get rid of page numbers 56 | \fancyhf{}\renewcommand{\headrulewidth}{0pt} 57 | %\fancyfootoffset{\marginparsep}+\marginparwidth} 58 | \lfoot{ 59 | \hspace{-2\marginparsep} 60 | \,\hfill \arabic{page} of \protect\pageref*{LastPage} \hfill \,\\ 61 | \,\hfill {\footnotesize \textcolor{gray}{updated November 2019~~~~~}} \hfill\, 62 | } 63 | 64 | \newcommand{\mydate}[1]{{\textcolor{gray}{\footnotesize #1}}} 65 | 66 | 67 | \newcommand{\makeheading}[1]% 68 | {%\hspace*{-\marginparsep minus \marginparwidth}% 69 | %\begin{minipage}[t]{\textwidth+\marginparwidth+\marginparsep}% 70 | \begin{minipage}[t]{\textwidth}% 71 | {\Large #1}\\%[-0.5\baselineskip]% 72 | \vskip 0.2\baselineskip 73 | \color{deep_blue}{\rule{\columnwidth}{3pt}}% 74 | \end{minipage} 75 | \vskip 1.\baselineskip plus 2\baselineskip minus 1.\baselineskip 76 | } 77 | 78 | \newlength\sidebarwidth 79 | \setlength\sidebarwidth{3.6cm} 80 | 81 | \newcommand{\topic}[3][]% 82 | {\pagebreak[2]% 83 | \vskip 1.5\baselineskip plus 3\baselineskip minus 0.7\baselineskip 84 | \begin{minipage}{\textwidth} 85 | \phantomsection\addcontentsline{toc}{section}{#1}% 86 | \nopagebreak\hspace{0in}% 87 | \nopagebreak\begin{minipage}[t]{\sidebarwidth - .2cm} 88 | \raggedleft \bf\sf 89 | \color{deep_blue}{\Large #2} 90 | \end{minipage}% 91 | \hfill 92 | \begin{minipage}[t]{\linewidth - \sidebarwidth} 93 | \nopagebreak{\color{deep_blue}% 94 | \rule{0pt}{\baselineskip}% 95 | \rule{\linewidth}{2.5pt}% 96 | \llap{\raisebox{.3\baselineskip}{\sf #1}}% 97 | \vspace*{.1\baselineskip}% 98 | }% 99 | #3% 100 | \end{minipage} 101 | \end{minipage}} 102 | 103 | \newcommand{\smalltopic}[2]% 104 | {\pagebreak[2]% 105 | \vskip 1\baselineskip plus 2\baselineskip minus 0.3\baselineskip 106 | \begin{minipage}{\textwidth} 107 | %\hspace{-\marginparsep minus \marginparwidth}% 108 | \phantomsection\addcontentsline{toc}{subsection}{#1}% 109 | \nopagebreak\hspace{0in}% 110 | \nopagebreak\begin{minipage}[t]{\sidebarwidth - .2cm} 111 | \raggedleft \bf\sf %\vskip -0.5\baselineskip 112 | \textcolor{dark_blue}{\large #1}% 113 | \end{minipage}% 114 | \hfill 115 | \begin{minipage}[t]{\linewidth - \sidebarwidth} 116 | \nopagebreak{% 117 | %\vspace{-.7\baselineskip}% 118 | \rule{\linewidth}{.5pt}% 119 | \vspace{.1\baselineskip}% 120 | }% 121 | #2 122 | \end{minipage} 123 | \end{minipage}} 124 | 125 | \newcommand{\subtopic}[3][] 126 | {\begin{minipage}{\textwidth} 127 | \vspace*{.4\baselineskip} 128 | \nopagebreak\hspace{0in}% 129 | \nopagebreak\begin{minipage}[t]{\sidebarwidth - .2cm} 130 | % Super posh: using semi-bold condensed fonts. Works only with 131 | % lmodern 132 | \raggedleft {\sf\fontseries{sbc}\selectfont #2} 133 | %{\small\sl\\[-0.2\baselineskip] #1} 134 | {\\[-0.2\baselineskip] \textcolor{gray}{\footnotesize #1}} 135 | \end{minipage}% 136 | \hfill 137 | \begin{minipage}[t]{\linewidth - \sidebarwidth} 138 | #3% 139 | \end{minipage}% 140 | \vspace*{.2\baselineskip plus 1\baselineskip minus 141 | .2\baselineskip}% 142 | \end{minipage}} 143 | 144 | \newcommand{\dateonly}[2][] 145 | {\begin{minipage}{\textwidth} 146 | \vspace*{.4\baselineskip} 147 | \nopagebreak\hspace{0in}% 148 | \nopagebreak\begin{minipage}[t]{\sidebarwidth - .2cm} 149 | \raggedleft {~} 150 | {\\[-\baselineskip] \textcolor{gray}{\footnotesize #1}} 151 | \end{minipage}% 152 | \hfill 153 | \begin{minipage}[t]{\linewidth - \sidebarwidth} 154 | #2% 155 | \end{minipage}% 156 | \vspace*{.2\baselineskip plus 1\baselineskip minus 157 | .2\baselineskip}% 158 | \end{minipage}} 159 | 160 | \newcommand{\sidenote}[2] 161 | {\vspace*{-.2\baselineskip}\begin{minipage}{\textwidth} 162 | \nopagebreak\hspace{0in}% 163 | \nopagebreak\begin{minipage}[t]{\sidebarwidth - .2cm} 164 | \raggedleft {#1} 165 | \end{minipage}% 166 | \hfill 167 | \begin{minipage}[t]{\linewidth - \sidebarwidth} 168 | #2% 169 | \end{minipage}% 170 | \vspace*{.5\baselineskip plus 1\baselineskip minus 171 | .2\baselineskip}% 172 | \end{minipage}} 173 | 174 | % New lists environments 175 | \newlist{outerlist}{itemize}{1} 176 | \setlist[outerlist]{font=\sffamily\bfseries, label=\textbullet} 177 | \setitemize{topsep=0ex, partopsep=0ex} 178 | \setdescription{font=\normalfont\sffamily\bfseries, itemsep=.5ex, 179 | parsep=.5ex, leftmargin=3ex} 180 | 181 | \newcommand{\blankline}{\quad\pagebreak[2]} 182 | 183 | \def\mydot{\textcolor{deep_blue}{\rule{1ex}{1ex}}} 184 | 185 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%--}}}% 186 | \begin{document} 187 | \makeheading{ 188 | \begin{minipage}[B]{0.5\textwidth} 189 | %\vfill 190 | \vspace*{-.5\baselineskip}% 191 | \parbox{10cm}{ 192 | \hskip -0.1cm 193 | {\Huge\bf\sf \color{deep_blue} J\huge \hskip -0.05cm AKE % 194 | \Huge V\huge \hskip -0.05cm ANDER\Huge P\huge \hskip -0.05cm LAS} 195 | \\[-.1\baselineskip] 196 | {\bf\sf Software Engineer} 197 | \\ 198 | {\bf\sf Open Source Developer} 199 | \\ 200 | Google, Seattle WA 201 | } 202 | \end{minipage} 203 | \hfill 204 | \begin{minipage}[B]{8cm} 205 | \raggedleft 206 | \,\vskip -1em 207 | \small 208 | \url{http://www.vanderplas.com}\\ 209 | {\texttt {jakevdp@gmail.com}} 210 | \vspace*{-.5\baselineskip}% 211 | \end{minipage} 212 | } 213 | 214 | %\begin{center} 215 | %\begin{minipage}{15cm} 216 | 217 | \begin{center} 218 | I build software tools for engineers, data scientists, and researchers. 219 | \end{center} 220 | 221 | \begin{multicols}{2} 222 | \sloppy 223 | 224 | %\textcolor{deep_blue}{\bf\sf Research interests}: 225 | %Cosmology, weak lensing, data mining and automated learning algorithms for 226 | %large astronomical data sets. 227 | 228 | \begin{itemize}[leftmargin=2ex, itemsep=0ex] 229 | \item[\mydot] 230 | I am a software engineer at Google Research in Seattle, working on tools that support data-intensive research. 231 | 232 | \item[\mydot] 233 | I maintain a technical blog, \href{http://jakevdp.github.io/}{Pythonic Perambulations}, to share tutorials and opinions related to statistics, open software, and scientific computing in Python. 234 | 235 | \item[\mydot] 236 | I invest a significant amount of time in creating and developing 237 | Python tools for use in data-intensive science, including packages like 238 | {\it Scikit-Learn}, {\it SciPy}, {\it AstroPy}, {\it Altair}, and many others. 239 | 240 | \item[\mydot] 241 | Outside my employment, I participate in the broader data science community, 242 | developing and presenting talks and tutorials on scientific computing 243 | topics at various conferences in the data science world. 244 | 245 | \end{itemize} 246 | \end{multicols} 247 | \vspace*{-1.5em} 248 | \fussy 249 | %\end{minipage} 250 | %\end{center} 251 | 252 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 253 | \topic{E \large\hskip -1ex DUCATION}{~} 254 | 255 | \subtopic[2006-2012]{\bf PhD}{ 256 | Department of Astronomy, University of Washington, Seattle, WA\\ 257 | advised by Andrew Connolly and Bhuvnesh Jain (U. Penn)\\ 258 | Thesis: \href{http://adsabs.harvard.edu/abs/2013arXiv1301.6657V}{ 259 | Karhunen-Loeve Analysis for Weak Gravitational Lensing} 260 | } 261 | 262 | \subtopic[2006-2007]{\bf MS}{ 263 | Department of Astronomy, University of Washington, Seattle, WA\\ 264 | advised by Craig Hogan and Andrew Becker 265 | } 266 | 267 | \subtopic[1999-2003]{\bf BS}{ 268 | Calvin College, Grand Rapids, MI\\ 269 | Major: Physics; Minors: Mathematics \& Japanese\\ 270 | 4-year letterman \& 1-year captain of the swimming \& diving team 271 | } 272 | 273 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 274 | \topic{E \large\hskip -1ex XPERIENCE}{~} 275 | 276 | \vspace*{-0.5\baselineskip} 277 | \smalltopic{Employment}{} 278 | 279 | \subtopic[2020--present]{Google}{ 280 | Software Engineer, JAX Team\\ 281 | Google Research, Bay Area} 282 | 283 | \subtopic[2018--2020]{Google}{ 284 | Software Engineer, Colaboratory Team\\ 285 | Google Research, Seattle} 286 | 287 | \subtopic[2018]{Google}{ 288 | Visiting Researcher\\ 289 | Google Research, Seattle} 290 | 291 | \subtopic[2017--2018]{UW eScience}{ 292 | Director of Open Software \\ 293 | University of Washington eScience Institute.} 294 | 295 | \subtopic[2014--2018]{UW eScience}{ 296 | Senior Data Science Fellow \\ 297 | University of Washington eScience Institute.} 298 | 299 | \subtopic[2014--2017]{UW eScience}{ 300 | Director of Research, Physical Sciences\\ 301 | University of Washington eScience Institute.} 302 | 303 | 304 | \subtopic[2013--2014]{UW Computer Science}{ 305 | NSF post-doctoral fellowship, CI-TraCS program.\\ 306 | Department of Computer Science, University of Washington. 307 | Supervised by Magda Balazinska} 308 | 309 | \subtopic[2012--2013]{UW Astronomy}{ 310 | Postdoctoral Researcher, LSST Image Simulation group.\\ 311 | Department of Astronomy, University of Washington. 312 | Supervised by Andrew Connolly 313 | } 314 | 315 | \subtopic[2010--2012]{UW Planetarium}{ 316 | WorldWide Telescope Planetarium Project Coordinator\\ 317 | University of Washington Planetarium, Seattle WA \& Microsoft Research, Redmond WA 318 | } 319 | 320 | \subtopic[2008--2010]{UW Planetarium}{ 321 | K-12 and Community Outreach Coordinator\\ 322 | University of Washington Planetarium, Seattle WA 323 | } 324 | 325 | \subtopic[2004--2006]{Mount Hermon}{ 326 | Experiential Science Educator (4th-8th grade students)\\ 327 | Mount Hermon Outdoor Science School, Santa Cruz CA 328 | } 329 | 330 | \subtopic[2004--2005]{Summit Adventure}{ 331 | Wilderness Instructor: Backpacking, Rock Climbing, and Mountaineering\\ 332 | Summit Adventure, Bass Lake CA 333 | } 334 | 335 | \subtopic[2003--2004]{Japan ESL}{ 336 | Teacher and Tutor of English as a second language\\ 337 | Sendai, Japan 338 | } 339 | 340 | \smalltopic{Volunteering}{} 341 | 342 | \subtopic[2013--2015]{Neighborhood Advocacy}{ 343 | As co-chair of the North Delridge Neighborhood Council, I facilitated 344 | community gatherings, service work, and other advocacy 345 | in our mixed-income neighborhood in southwest Seattle. 346 | } 347 | 348 | \subtopic[2010--2014]{Safe Streets Advocacy}{ 349 | As a founder of West Seattle Greenways and transportation chair of 350 | the Delridge Neighborhood Council, I led the effort to secure grants 351 | and city funding totaling over \$2 million for pedestrian 352 | and bicycle safety improvements in the neighborhood. 353 | } 354 | 355 | \subtopic[2009--2013]{Pacific Science Center}{ 356 | As a Science Communication Fellow, I facilitated activities for 357 | museum visitors and gave occasional community talks on astronomy 358 | and astrophysics. 359 | } 360 | 361 | \subtopic[2007--2012]{Sierra Club}{ 362 | As a program leader for the Sierra Club's {\it Inner City Outings} 363 | program, I led 3-4 hiking \& camping trips each year with Seattle 364 | youth. 365 | } 366 | 367 | \subtopic[2006--2012]{UW Planetarium}{ 368 | Through my graduate career, I participated in the University of 369 | Washington Planetarium's K-12 outreach program, facilitating planetarium 370 | shows several times each quarter for visitors aged 4 to adult. 371 | } 372 | 373 | \smalltopic{Formal Teaching}{} 374 | 375 | \subtopic[Fall 2017]{CSE 583}{ 376 | Software Development for Data Scientists\\ 377 | {\it University of Washington}} 378 | 379 | \subtopic[Winter \& Fall 2016]{CSE 599/ChemE 599}{ 380 | Software Engineering for Data Scientists\\ 381 | {\it University of Washington}} 382 | 383 | \subtopic[Fall 2014]{Astr 599 / Applied Math 500}{ 384 | Python for Scientific Computing\\ 385 | {\it University of Washington}} 386 | 387 | \subtopic[Fall 2013]{Astr 599}{ 388 | Scientific computing for Astronomy\\ 389 | {\it University of Washington}} 390 | 391 | %\subtopic[Fall 2008]{Astr 102}{ 392 | % Introductory Astronomy for Science Majors\\ 393 | % {\it head teaching assistant -- University of Washington}} 394 | 395 | %\subtopic[Winter 2008]{Astr 150}{ 396 | % Planetary Astronomy\\ 397 | % {\it teaching assistant -- University of Washington}} 398 | 399 | %\subtopic[Fall 2007]{Astr 101}{ 400 | % Introductory Astronomy\\ 401 | % {\it teaching assistant -- University of Washington}} 402 | 403 | \smalltopic{Service}{} 404 | 405 | \subtopic[2018]{SciPy Conference}{ 406 | Co-chair of the Data Science symposium at SciPy 2018. 407 | } 408 | 409 | \subtopic[2016-present]{Journal of Open Source Software}{ 410 | Editor, Astronomy and Machine Learning 411 | } 412 | 413 | \subtopic[2014-2018]{Journal of Statistical Software}{ 414 | Associate Editor, primarily focusing on submissions involving Python-language software. 415 | } 416 | 417 | \subtopic[2014-2017]{Astro Hack Week}{ 418 | Creator of the annual Astro Hack Week conference series; 419 | sole organizer in 2014; co-organizer in 2015-2018. Since 2014, this model 420 | has been adapted by colleagues in other fields (including NeuroHackWeek 421 | and GeoHackWeek) 422 | } 423 | 424 | \subtopic[2017]{SciPy Conference}{ 425 | Co-chair of the Astronomy \& Astrophysics symposium at SciPy 2017. 426 | } 427 | 428 | \subtopic[2016]{Python in Astronomy}{SOC member \& LOC chair for this 60-person, week-long workshop focused on development of Python tools for astronomers.} 429 | 430 | \subtopic[2015]{PyData Seattle}{Member of the local organizing committee.} 431 | 432 | \subtopic[2015]{Computing the Universe}{SOC member for this week-long workshop at the University of California, Berkeley.} 433 | 434 | 435 | \subtopic[2014]{SciPy Conference}{ 436 | Tutorial co-chair for 2014 SciPy conference. 437 | } 438 | 439 | \subtopic[2013-2017]{PyCon}{ 440 | Member of the tutorial review committee for PyCon 2013-2017. 441 | } 442 | 443 | \subtopic[2012-2016]{PyData}{ 444 | Member of the organizing committee for several PyData 445 | conferences. 446 | } 447 | 448 | \smalltopic{Mentoring}{} 449 | 450 | \subtopic[2017-2018]{Callin Switzer}{ 451 | Postdoctoral Fellow, UW eScience Institute \& Biology Department 452 | } 453 | 454 | \subtopic[2017-2018]{Kathryn Neugent}{ 455 | Graduate Student, UW eScience Institute \& Astronomy Department 456 | } 457 | 458 | \subtopic[2015-2018]{David Fleming}{ 459 | Graduate Student, UW eScience Institute \& Astronomy Department 460 | } 461 | 462 | \subtopic[2015-2017]{Grace Telford}{ 463 | Graduate Student, UW eScience Institute \& Astronomy Department 464 | } 465 | 466 | \subtopic[2015-2016]{Jes Ford}{ 467 | Postdoctoral Fellow, UW eScience Institute \& Astronomy Department 468 | } 469 | 470 | \subtopic[2015-2017]{Xiaofeng Meng}{ 471 | Postdoctoral Fellow, UW eScience Institute \& Earth and Space Sciences 472 | } 473 | 474 | \subtopic[2012--2013]{SungWon Kwak}{ 475 | Undergraduate, University of Washington Astronomy\\ 476 | {\it Superimposed High Redshift Spectra} 477 | } 478 | 479 | \subtopic[2008--2009]{Andy Barr \&\\Devon McMinn}{ 480 | Undergraduates, University of Washington Pre-MAP program\\ 481 | {\it Astronomical Data Processing with LLE} 482 | } 483 | 484 | 485 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 486 | \topic{A \large\hskip -1ex WARDS \& HONORS}{~} 487 | 488 | \subtopic[2017-2018]{DIRAC Institute}{ 489 | Named {\it DIRAC Fellow} at the UW Data Intensive Research in Astronomy and Cosmology (DIRAC) Institute 490 | } 491 | 492 | \subtopic[July 2016]{International Astrostatistics Association}{ 493 | Winner of the 2016 {\it Outstanding Publication in Astrostatistics} award 494 | for {\it Statistics, Data Mining, and Machine Learning in Astronomy} 495 | (With Z. Ivezic, A. Connolly, and A. Gray) 496 | } 497 | 498 | \subtopic[November 2015]{Data Analysis Contest}{ 499 | Winner of ``Most Insightful'' analysis in the 2015 Pronto Cycle Share Data Challenge 500 | } 501 | 502 | \subtopic[2014-Present]{Data Science}{ 503 | Named {\it Senior Data Science Fellow} at the UW eScience Institute 504 | } 505 | 506 | \subtopic[July 2013]{Data Visualization}{ 507 | Runner-up in the 2013 {\it John Hunter Excellence in Plotting Competition} 508 | } 509 | 510 | \subtopic[October 2012]{CIDU Best Paper}{ 511 | Recipient of the Best Paper Award, 2012 Conference on Intelligent 512 | Data Understanding (CIDU). 513 | } 514 | 515 | \subtopic[2012]{NSF Fellowship}{ 516 | Recipient of a 3-year NSF prize fellowship through the 517 | office of CyberInfrastructure CI-TraCS program. 518 | NSF Award \#1226371. 519 | } 520 | 521 | \subtopic[1999-2003]{Calvin College}{ 522 | 4-year recipient of the Calvin College Presidential Scholarship; 523 | 4 years on MIAA Atheletic Honor Roll; 524 | recipient of the Roger D. Griffioen Physics Scholarship. 525 | } 526 | 527 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 528 | \topic{C \large\hskip -1ex OMPUTING}{ 529 | I am an active developer, maintainer, and contributor to several 530 | well-known scientific computing packages in the Python community. 531 | See my github profile 532 | (\href{http://github.com/jakevdp}{http://github.com/jakevdp}) 533 | for details.} 534 | 535 | %\vspace*{-0.5\baselineskip} 536 | \smalltopic{Skills}{ 537 | 538 | \begin{itemize}[leftmargin=0ex, itemsep=0ex, labelindent=-2ex, parsep=.5ex] 539 | \item[\mydot] Experienced open source developer, with a specialization in 540 | scientific computing, including visualization, data mining and machine 541 | learning. 542 | \item[\mydot] Expert in the Python Language and extensions such as Cython; 543 | very good knowledge of C, C++, and interfacing to legacy Fortran code. 544 | \item[\mydot] Experience with a variety of tools and languages, including 545 | bash, csh, \LaTeX{}, HTML, Javascript, D3js, Git, various database query 546 | languages, web templating engines such as Jinja, etc. 547 | \item[\mydot] Author of {\it Pythonic Perambulations}, a popular Python 548 | blog covering scientific computing, visualization, statistics, 549 | academia, and related topics: 550 | \href{http://jakevdp.github.io}{http://jakevdp.github.io} 551 | \end{itemize} 552 | 553 | } 554 | 555 | \smalltopic{Software}{} 556 | 557 | \subtopic[2010--Present]{Scikit-Learn}{ 558 | I a member of the core team of 559 | \href{http://scikit-learn.org}{scikit-learn}, 560 | a popular package for performing machine learning in Python. I 561 | have contributed in many areas, but most notably routines for efficient 562 | 2-point (e.g. nearest neighbors) queries, and algorithms based on these 563 | such as {\it k}-neighbor classification, kernel density estimation, 564 | and manifold learning. I have also presented tutorials on the subject 565 | on many occasions, including at the PyCon, SciPy, and PyData 566 | conferences.} 567 | 568 | \subtopic[2011--Present]{SciPy}{ 569 | I am a maintainer of 570 | \href{http://scipy.org}{SciPy}, the definitive repository for many 571 | scientific computing tools available in Python. 572 | My contributions are primarily in the sparse 573 | matrix package, including code for efficient solutions of large sparse 574 | eigenvalue problems, and for efficient traversal and analysis of 575 | large sparse graphs. 576 | } 577 | 578 | \subtopic[2016-Present]{Altair}{ 579 | I am co-creator of the \href{http://github.com/ellisonbg/altair}{Altair} 580 | project, a declarative statistical visualization library for Python built 581 | on the Vega-Lite visualization grammar. 582 | } 583 | 584 | \subtopic[2014--Present]{AstroPy}{ 585 | I have contributed several components of the suite of statistics tools 586 | for the \href{http://astropy.org}{AstroPy} project, a Python package aimed at astronomers. In 587 | particular, I wrote the modules for \href{http://docs.astropy.org/en/stable/visualization/histogram.html}{Bayesian Blocks} 588 | and the \href{http://docs.astropy.org/en/stable/stats/lombscargle.html}{Lomb-Scargle Periodogram}. 589 | } 590 | 591 | \subtopic[]{Others}{ 592 | I have created and contributed to many other Python projects, including 593 | Matplotlib, IPython, NumPy, Pandas, AstroML, SciDB-Py, Pelican, mpld3, 594 | and others. 595 | I have also open-sourced much of my research code and teaching materials. 596 | More information is available in my 597 | \href{http://github.com/jakevdp}{GitHub profile}. 598 | } 599 | 600 | 601 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 602 | \topic{S \large\hskip -1ex ELECTED TALKS}{{\small \\{\textcolor{gray}{\it $**$= invited talk}}}\\ 603 | Many of the slide-decks referenced below are archived at \url{http://speakerdeck.com/jakevdp/}.} 604 | 605 | \smalltopic{Keynote Addresses}{} 606 | 607 | \dateonly[**October 2019]{ 608 | {\it Python's Journey to Data Science}\\ 609 | PyCon India 2019, Chennai, India 610 | } 611 | 612 | \dateonly[**April 2019]{ 613 | {\it A Survey of the Pydata Stack}\\ 614 | PyCon Colombia 2019, Bogota, Colombia 615 | } 616 | 617 | \dateonly[**July 2017]{ 618 | {\it PyData 101: Everything you need to know to get started with data science in Python}\\ 619 | PyData Seattle 2017 620 | } 621 | 622 | \dateonly[**May 2017]{ 623 | {\it The Unexpected Effectiveness of Python in Science}\\ 624 | PyCon 2017, Portland OR 625 | } 626 | 627 | \dateonly[**July 2015]{ 628 | {\it The State of the Stack}\\ 629 | SciPy 2015, Austin TX 630 | } 631 | 632 | 633 | \smalltopic{Computing}{} 634 | 635 | \dateonly[July 2020]{ 636 | {\it JAX: Accelerated Machine Leaning Research}\\ 637 | SciPy 2020, Virtual 638 | } 639 | 640 | \dateonly[May 2019]{ 641 | {\it Talk: How to Think about Data Visualization}\\ 642 | PyCon 2019, Cleveland, OH 643 | } 644 | 645 | \dateonly[May 2018]{ 646 | {\it Tutorial: Exploratory Data Visualization with Altair}\\ 647 | {\it Talk: Performance Python: Seven Strategies for Optimizing Numeric Code}\\ 648 | PyCon 2018, Cleveland, OH 649 | } 650 | 651 | \dateonly[**April 2018]{ 652 | {\it Data Visualization in Colab}\\ 653 | Google Mountain View 654 | } 655 | 656 | \dateonly[**February 2018]{ 657 | {\it An Introduction to PyData}\\ 658 | IndexConf 2018, San Francisco CA 659 | } 660 | 661 | \dateonly[**February 2018]{ 662 | {\it Bespoke Visualizations with a Declarative Twist}\\ 663 | Convoy Tech Talk Series, Seattle WA 664 | } 665 | 666 | \dateonly[**September 2017]{ 667 | {\it Introduction to Machine Learning with Scikit-Learn}\\ 668 | Neuro Hack Week 2017 669 | } 670 | 671 | \dateonly[July 2017]{ 672 | {\it Scientific Analysis at Scale: a Comparison of Five Systems}\\ 673 | SciPy 2017, Austin TX 674 | } 675 | 676 | \dateonly[**May 2017]{ 677 | {\it Python's Visualization Landscape (Submitted Talk)}\\ 678 | PyCon 2017, Portland OR 679 | } 680 | 681 | \dateonly[**April 2017]{ 682 | {\it The Python Visualization Landscape}\\ 683 | Puget Sound Python Meetup, Seattle WA 684 | } 685 | 686 | \dateonly[March 2017]{ 687 | {\it Software Engineering for Data Science}\\ 688 | Week-long short-course through PNNL, taught with David Beck and Joe Hellerstein 689 | } 690 | 691 | \dateonly[**November 2016]{ 692 | {\it Declarative Visualization in Python}\\ 693 | Puget Sound Python Meetup, Seattle WA 694 | } 695 | 696 | \dateonly[**October 2016]{ 697 | {\it Python and Machine Learning in Astronomy}\\ 698 | TalkPython podcast \#81 699 | } 700 | 701 | \dateonly[**July 2016]{ 702 | {\it The Python Data Science Stack}\\ 703 | JSM 2016, Chicago IL 704 | } 705 | 706 | \dateonly[May 2016]{ 707 | {\it Statistics for Hackers}\\ 708 | PyCon 2016, Portland OR 709 | } 710 | 711 | \dateonly[**April 2016]{ 712 | {\it Driving Reproducibility at UW}\\ 713 | NYU Reproducibility Symposium, Brooklyn NY 714 | } 715 | 716 | \dateonly[**March 2016]{ 717 | {\it Introduction to Scikit-Learn}\\ 718 | PyData @ Strata, San Jose CA 719 | } 720 | 721 | \dateonly[**March 2016]{ 722 | {\it Data Analysis with Pandas}\\ 723 | Fred Hutchinson Cancer Research Institute 724 | } 725 | 726 | \dateonly[**December 2015]{ 727 | {\it Statistics for Hackers}\\ 728 | CSSS Seminar, University of Washington 729 | } 730 | 731 | \dateonly[**December 2015]{ 732 | {\it An Overview of the Python Scientific Stack}\\ 733 | Python in Geosciences Seminar, University of Washington 734 | } 735 | 736 | \dateonly[**September 2015]{ 737 | {\it Statistics for Hackers}\\ 738 | Multithreaded Data Meetup, San Francisco, CA 739 | } 740 | 741 | \dateonly[July 2015]{ 742 | {\it Machine Learning with Scikit-Learn} (2 hour tutorial)\\ 743 | {\it Data Science at University of Washington} (30 minute talk)\\ 744 | PyData Seattle 2015, Redmond WA 745 | } 746 | 747 | \dateonly[**June 2015]{ 748 | {\it Astronomy, Python, and Data Science at UW}\\ 749 | Seattle DAML (Data/Analytics/Machine Learning) meetup 750 | } 751 | 752 | \dateonly[April 2015]{ 753 | {\it Losing Your Loops: Fast Numerical Computing with NumPy} (30 minute talk)\\ 754 | {\it Introductory Machine Learning with Scikit-Learn} (3 hour tutorial)\\ 755 | PyCon 2015, Montreal, QC 756 | } 757 | 758 | \dateonly[**December 2014]{ 759 | {\it Data Science with Python.} (Invited Instructor for 3-day course)\\ 760 | Institute of Health \& Society, University of Oslo, Norway 761 | } 762 | 763 | \dateonly[**October 2014]{ 764 | {\it Machine Learning with Python}\\ 765 | Practice of Machine Learning Conference, Redmond WA 766 | } 767 | 768 | \dateonly[**October 2014]{ 769 | {\it Introduction to NumPy and Matplotlib}\\ 770 | PyData \@ Strata 2014, New York NY 771 | } 772 | 773 | \dateonly[July 2014]{ 774 | {\it Frequentism and Bayesianism: What's the Big Deal?}\\ 775 | SciPy 2014, Austin, TX 776 | } 777 | 778 | \dateonly[**July 2014]{ 779 | {\it Parallel Computing in Python}\\ 780 | Invited guest lecture, CodeFellows course 781 | } 782 | 783 | \dateonly[**April 2014]{ 784 | {\it Python in the Browser Age: Data Exploration in the IPython Notebook}\\ 785 | OpenVisConf 2014, Boston MA 786 | } 787 | 788 | \dateonly[April 2014]{ 789 | {\it Exploring Machine Learning with Scikit-learn} (3-hour tutorial)\\ 790 | {\it Diving deeper into Machine Learning with Scikit-learn} (3-hour tutorial)\\ 791 | with Olivier Grisel\\ 792 | PyCon 2014, Montreal, QC 793 | } 794 | 795 | \dateonly[November 2013]{ 796 | {\it Financial Time-series Data in SciDB}\\ 797 | with Bryan Lewis\\ 798 | PyData NYC 2013 799 | } 800 | \dateonly[November 2013]{ 801 | {\it Efficient Computing with NumPy} (1.5-hour tutorial)\\ 802 | PyData NYC 2013 803 | } 804 | \dateonly[November 2013]{ 805 | {\it Machine Learning with Scikit-Learn} (1.5-hour tutorial)\\ 806 | PyData NYC 2013 807 | } 808 | \dateonly[August 2013]{ 809 | {\it Big Analytics for Python Users Without the Hassles}\\ 810 | with Bryan Lewis, \& Travis Oliphant\\ 811 | Webinar presented by Paradigm4 812 | } 813 | \dateonly[**July 2013]{ 814 | {\it Interactive Computing with IPython and ASCOT}\\ 815 | Clawpack Workshop, University of Washington 816 | } 817 | \dateonly[July 2013]{ 818 | {\it An Introduction to Scikit-Learn} (2-part, 8-hour tutorial)\\ 819 | with Gael Varoquaux, \& Olivier Grisel\\ 820 | Scipy 2013, Ausin TX 821 | } 822 | \dateonly[July 2013]{ 823 | {\it Introduction to Python} (3-hour tutorial)\\ 824 | Software Carpentry Course, Seattle WA 825 | } 826 | \dateonly[April 2013]{ 827 | {\it Interactive Applications with Matplotlib} (2-hour tutorial)\\ 828 | PyData Silicon Valley, Santa Clara CA 829 | } 830 | \dateonly[April 2013]{ 831 | {\it An Introduction to Scikit-Learn} (3-hour tutorial)\\ 832 | PyCon 2013, Santa Clara CA 833 | } 834 | \dateonly[**October 2012]{ 835 | {\it Scientific Machine Learning with Scikit-learn} (1-hour tutorial)\\ 836 | {\it Interactive Visualization with Matplotlib} (1-hour tutorial)\\ 837 | PyData NYC, New York NY 838 | } 839 | \dateonly[July 2012]{ 840 | {\it Machine Learning in Python} (4-hour tutorial)\\ 841 | Scipy 2012, Austin TX 842 | } 843 | \dateonly[**March 2012]{ 844 | {\it Scikit-Learn Tutorial} (1-hour tutorial)\\ 845 | PyData Workshop, Google Campus, Mountain View CA 846 | } 847 | 848 | 849 | 850 | \smalltopic{Astronomy}{} 851 | 852 | \dateonly[**August 2017]{ 853 | {\it Statistics, Data Mining, and Machine Learning (don't really work) in Astronomy}\\ 854 | Plenary session at the 18th International Workshop on Advanced Computing and Analysis Techniques in Physics Research (ACAT 2017) 855 | } 856 | 857 | \dateonly[**August 2016]{ 858 | {\it Fundamentals of Frequentist \& Bayesian Statistics}\\ 859 | 2016 AstroHackWeek, UC Berkeley 860 | } 861 | 862 | \dateonly[**August 2016]{ 863 | {\it Git and Github for Driving your Research}\\ 864 | {\it Software Engineering for Astronomers}\\ 865 | {\it Introduction to Bayesian Inference}\\ 866 | LSSTC Data Science Fellowship Program Summer School, Northwestern University 867 | } 868 | 869 | \dateonly[**June 2016]{ 870 | {\it Exploring Galaxy Evolution through Manifold Learning}\\ 871 | Modern Massive Datasets, UC Berkeley 872 | } 873 | 874 | \dateonly[**April 2016]{ 875 | {\it Astrostatisics: Opening the Black Box}\\ 876 | Fred Hutchinson Cancer Research Center Data Science Seminar 877 | } 878 | 879 | \dateonly[**January 2016]{ 880 | {\it Bayesian Methods in Astronomy}\\ 881 | half-day workshop, 227th AAS meeting 882 | } 883 | 884 | \dateonly[**December 2015]{ 885 | {\it Astrostatistics: Opening the Black Box}\\ 886 | Webinar, Inter-institutional Laboratory for e-Astronomy 887 | } 888 | 889 | \dateonly[**November 2015]{ 890 | {\it Astrostatistics: Opening the Black Box}\\ 891 | Colloquium, Herzberg Institute of Astrophysics, Victoria, BC 892 | } 893 | 894 | \dateonly[**November 2015]{ 895 | {\it Astrostatistics: Opening the Black Box}\\ 896 | Colloquium, Mitchell Institute for Fundamental Physics and Astronomy, College Station, TX 897 | } 898 | 899 | \dateonly[**June 2015]{ 900 | {\it Periodograms for Multiband Timeseries} (Invited Talk)\\ 901 | {\it Machine Learning Workshop} (Invited instructor)\\ 902 | Local Group Astrostatistics conference, Ann Arbor, MI 903 | } 904 | 905 | \dateonly[**January 2015]{ 906 | {\it Code Licensing for Astronomy.} (Invited Short Talk)\\ 907 | 225th meeting of the American Astronomical Society, Seattle, WA 908 | } 909 | 910 | \dateonly[**October 2014]{ 911 | {\it ESAC Data Analysis and Statistics Workshop.} (Invited Instructor)\\ 912 | European Space Astronomy Center, Madrid, Spain 913 | } 914 | 915 | \dateonly[January 2014]{ 916 | {\it AstroML: Python-powered Machine Learning for Astronomy}\\ 917 | Jake VanderPlas, Andrew Connolly, \& Zeljko Ivezic\\ 918 | AAS \# 223, 2014, Seattle, WA 919 | } 920 | 921 | \dateonly[**November 2013]{ 922 | {\it Information Theory and Survey Design}\\ 923 | LBL Cosmology Seminar, Berkeley CA 924 | } 925 | 926 | \dateonly[October 2013]{ 927 | {\it LSST and the Time-domain Universe}\\ 928 | Calvin College Physics Seminar, Grand Rapids, MI 929 | } 930 | 931 | \dateonly[**October 2013]{ 932 | {\it Unlocking the Universe with Python and LSST}\\ 933 | RuPy conference, Budapest, Hungary 934 | } 935 | 936 | \dateonly[**August 2013]{ 937 | {\it Reproducible Astronomy in the LSST Era}\\ 938 | Data Science Seminar, Los Alamos National Labs 939 | } 940 | 941 | \dateonly[July 2013]{ 942 | {\it Opening Up Astronomy with Python and AstroML}\\ 943 | Jake VanderPlas, Andrew Connolly, \& Zeljko Ivezic\\ 944 | Scipy 2013, Austin TX 945 | } 946 | 947 | \dateonly[**May 2013]{ 948 | {\it Information Theory and Survey Design}\\ 949 | UC Davis Cosmology Seminar, Davis CA 950 | } 951 | 952 | \dateonly[**April 2013]{ 953 | {\it Observational Tracers of Modified Gravity: Dwarf Disk Galaxies}\\ 954 | Novel Probes of Gravity Workshop, University of Pennsylvania 955 | } 956 | 957 | \dateonly[October 2012]{ 958 | {\it AstroML: Machine Learning for Astronomy}\\ 959 | Conference on Intelligent Data Understanding, Boulder CO 960 | } 961 | 962 | \dateonly[July 2012]{ 963 | {\it AstroML: Machine Learning for Astronomy}\\ 964 | SciPy Conference, Austin TX 965 | } 966 | 967 | \dateonly[December 2011]{ 968 | {\it Processing Shear Maps with Karhunen-Loeve Analysis} (poster)\\ 969 | Jake VanderPlas, Bhuvnesh Jain, \& Andrew Connolly\\ 970 | Neuro-Imaging Processing Symposium (NIPS), Granada Spain 971 | } 972 | 973 | \dateonly[**October 2011]{ 974 | {\it Alternatives to 2-Point Statistics in Weak Lensing}\\ 975 | DES Collaboration meeting, Philadelphia PA 976 | } 977 | 978 | \dateonly[**June 2011]{ 979 | {\it Digital Planetariums for the Masses}\\ 980 | AstroVis, University of Washington 981 | } 982 | 983 | \dateonly[May 2011]{ 984 | {\it KL Interpolation of Weak Lensing Shear}\\ 985 | INPA Cosmology Seminar, Lawrence Berkeley National Laboratory, CA 986 | } 987 | 988 | \dateonly[May 2011]{ 989 | {\it KL Interpolation of Weak Lensing Shear}\\ 990 | UC Davis Cosmology Seminar, Davis CA 991 | } 992 | 993 | \dateonly[May 2011]{ 994 | {\it KL Interpolation of Weak Lensing Shear}\\ 995 | KIPAC Cosmology Seminar, SLAC National Laboratory, CA 996 | } 997 | 998 | \dateonly[January 2011]{ 999 | {\it Finding the Odd One Out in Spectroscopic Surveys} (poster)\\ 1000 | A. Connolly, S. Daniel, L. Xiong, J. VanderPlas, \& J. Schneider\\ 1001 | 217th AAS meeting, Seattle WA 1002 | } 1003 | 1004 | \dateonly[January 2011]{ 1005 | {\it 3D Reconstruction of the Density Field} (poster)\\ 1006 | Jake VanderPlas \& Andrew Connolly\\ 1007 | 217th AAS meeting, Seattle WA 1008 | } 1009 | 1010 | \dateonly[July 2010]{ 1011 | {\it A New Approach to Tomographic Mapping}\\ 1012 | Ten Years of Cosmic Shear, Edinburgh, UK 1013 | } 1014 | 1015 | \dateonly[**November 2007]{ 1016 | {\it SALT-2 Light-curve Fitting for SDSS Supernovae}\\ 1017 | SDSS Collaboration Meeting, Fermi National Accelerator Laboratory 1018 | } 1019 | 1020 | 1021 | \smalltopic{Academia \& Policy}{} 1022 | 1023 | \dateonly[**December 2016]{ 1024 | {\it Promoting Open Science in the University}\\ 1025 | Invited Panel, Open Science and Big Data session at IEEE 2016, Washington DC 1026 | } 1027 | 1028 | \dateonly[**October 2014]{ 1029 | {\it Stemming the Data Science Brain Drain}\\ 1030 | Invited talk, TTI/Vanguard {\it Reprogramming Programming}, Washington DC 1031 | } 1032 | 1033 | \dateonly[August 2014]{ 1034 | {\it Hacking Academia from Inside and Out}\\ 1035 | Breakout session, O'Reilly SciFOO, Mountain View CA 1036 | } 1037 | 1038 | 1039 | \smalltopic{General Interest}{} 1040 | 1041 | \dateonly[**June 2013]{ 1042 | {\it The Science of Time Travel}\\ 1043 | at the event {\it Short Films, Big Ideas: The Science of Science Fiction}\\ 1044 | Seattle International Film Festival, Seattle WA 1045 | } 1046 | 1047 | \dateonly[**March 2012]{ 1048 | {\it Dark Matter, Dark Energy, and the Fate of the Universe}\\ 1049 | Calvin College Physics Colloquium, Grand Rapids MI 1050 | } 1051 | 1052 | \dateonly[**November 2011]{ 1053 | {\it Kinect/WorldWide Telescope Demonstration}\\ 1054 | Supercomputing 2011, Seattle WA 1055 | } 1056 | 1057 | \dateonly[**November 2011]{ 1058 | {\it WorldWide Telescope Demonstration}\\ 1059 | Partners in Learning Global Forum, Washington DC 1060 | } 1061 | 1062 | \dateonly[**November 2011]{ 1063 | {\it Gravity: A Lens to the Universe}\\ 1064 | KCTS9 Queen Anne Science Cafe, Seattle WA 1065 | } 1066 | 1067 | \dateonly[**October 2011]{ 1068 | {\it WorldWide Telescope Demonstration}\\ 1069 | Popular Mechanics Breakthrough Awards, New York NY 1070 | } 1071 | 1072 | \dateonly[**March 2011]{ 1073 | {\it Understanding the Dark Side of the Universe}\\ 1074 | Pacific Science Center's ``Science with a Twist'', Seattle WA 1075 | } 1076 | 1077 | \dateonly[**February 2011]{ 1078 | {\it Interconnection in Art and Cosmology}\\ 1079 | at the {\it Traces of the Universe} Art show,\\ 1080 | University of Washington, Seattle WA 1081 | } 1082 | 1083 | \dateonly[May 2009]{ 1084 | {\it Dark Matter, Gravitational Lensing, and Cosmology}\\ 1085 | Battle Point Astronomical Society, Bainbridge Island, WA 1086 | } 1087 | 1088 | 1089 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1090 | \topic{P \large\hskip -1ex UBLICATIONS}{~} 1091 | 1092 | \newcounter{PubNumber} 1093 | \newcommand{\publication}{\item[{\bf \textcolor{myblue}{[\stepcounter{PubNumber}\arabic{PubNumber}]}}]} 1094 | 1095 | \smalltopic{Books}{ 1096 | \begin{itemize}[leftmargin=0ex, itemsep=0ex, labelindent=-4ex, parsep=.5ex] 1097 | 1098 | \publication J. VanderPlas. 1099 | \href{http://shop.oreilly.com/product/0636920034919.do}{\sl The Python Data Science Handbook.} 1100 | O'Reilly Media, 2016 1101 | \publication J. VanderPlas. 1102 | \href{http://www.oreilly.com/programming/free/a-whirlwind-tour-of-python.csp}{\sl A Whirlwind Tour of Python.} 1103 | O'Reilly Media, 2016 1104 | \publication Z. Ivezic, A. Connolly, J. VanderPlas \& A. Gray.\\ 1105 | \href{http://press.princeton.edu/titles/10159.html}{\sl Statistics, Data Mining and Machine Learning in Astronomy.} 1106 | Princeton University Press, 2014\\ 1107 | {\bf (Winner of the IAA's 1108 | {\it \bf Outstanding Publication in Astrostatistics} award)} 1109 | \end{itemize} 1110 | } 1111 | 1112 | \smalltopic{\hspace*{-3ex} Articles}{ 1113 | \begin{itemize}[leftmargin=0ex, itemsep=0ex, parsep=.5ex, labelindent=-4ex] 1114 | 1115 | \publication 1116 | R. Tatman, J. Vanderplas \& S. Dane. 1117 | {\it A Practical Taxonomy of Reproducibility for Machine Learning Research.} 1118 | ICML 2018 (poster) 1119 | 1120 | \publication 1121 | J. VanderPlas, 1122 | {\it Understanding the Lomb-Scargle Periodogram.} 1123 | Astrophysical Journal Supplement Series, 236:1, 2018 1124 | 1125 | \publication 1126 | The Astropy Collaboration 1127 | {\it The Astropy Project: Building an inclusive, open-science project and status of the v2.0 core package.} 1128 | Astronomical Journal 156:3 (2018) 1129 | 1130 | \publication 1131 | D. Huppenkothen {\it et al.} 1132 | {\it Hack Weeks as a model for Data Science Education and Collaboration.} 1133 | PNAS (2018) 1134 | 1135 | \publication 1136 | A. Smith {\it et al.} 1137 | {\it Journal of Open Source Software: design and first-year review.} 1138 | arXiv:1707.02264, 2017 1139 | 1140 | \publication 1141 | F. Rodríguez-Sánchez, B. Marwick, E. Lazowska, J. VanderPlas 1142 | {\it Academia's failure to retain data scientists.} 1143 | Science 355.6323:357, 2017 1144 | 1145 | \publication 1146 | Parmita Mehta {\it et al.} 1147 | {\it Comparative Evaluation of Big-Data Systems on Scientific Image Analytics Workloads.} 1148 | VLDB Proceedings 10.11:1226 (2017) 1149 | 1150 | \publication 1151 | J. Ford \& J. VanderPlas 1152 | {\it Cluster-lensing: A Python Package for Galaxy Clusters \& Miscentering.} 1153 | Astronomical Journal, 152:228, 2016 1154 | 1155 | \publication 1156 | J. McQueen, M. Meila, J. VanderPlas, Z. Zhang 1157 | {\it megaman: Manifold Learning with Millions of points.} 1158 | Journal of Machine Learning Research 17(148):1-5, 2016 1159 | 1160 | \publication 1161 | Ariel Rokem {\it et al.} 1162 | {\it Building an Urban Data Science Summer Program at the University of Washington eScience Institute}. 1163 | Proceedings of the Data For Good Exchange 2015 1164 | 1165 | \publication 1166 | J. VanderPlas \& Z. Ivezic. 1167 | {\it Periodograms for Multiband Astronomical Time Series.} 1168 | ApJ 812:1, 2015 1169 | 1170 | \publication 1171 | J. VanderPlas. 1172 | {\it Frequentism and Bayesianism: A Python-driven Primer.} 1173 | Proceedings of the 13th Python in Science (SciPy) Conference, 2014 1174 | 1175 | \publication 1176 | J. VanderPlas. 1177 | {\it Visualizing Four-Dimensional Asteroids.} 1178 | Scientific American Magazine, Oct. 2014 1179 | 1180 | \publication 1181 | A.J. Connolly {\it et al.} 1182 | {\it An end-to-end simulation framework for the Large Synoptic Survey Telescope.} 1183 | SPIE 9150:14, 2014 1184 | 1185 | \publication 1186 | J. VanderPlas {\it et al.} 1187 | {\it Squeezing a Big Orange into Little Boxes: The AscotDB System 1188 | for Parallel Processing of Data on a Sphere} 1189 | IEEE Data Engineering Bulletin 36(4): 11-20 (2013) 1190 | 1191 | \publication 1192 | Emad Soroush {\it et al.} 1193 | {\it A Demonstration of Iterative Parallel Array Processing in Support 1194 | of Telescope Image Analysis.} 1195 | PVLDB 6(12): 1322-1325 (2013) 1196 | 1197 | \publication 1198 | L. Buitinck {\it et al.} 1199 | {\it API design for machine learning software: 1200 | experiences from the scikit-learn project} 1201 | European Conference on Machine Learning and Principles and Practices 1202 | of Knowledge Discovery in Databases (2013) 1203 | 1204 | \publication 1205 | L. Palaversa {\sl et al.} 1206 | {\sl Exploring the Variable Sky with LINEAR. III. 1207 | Classification of Periodic Light Curves} 1208 | AJ 146:101, 2013 1209 | 1210 | \publication 1211 | V. Vikram, A. Cabr\'{e}, B. Jain, \& J. VanderPlas. 1212 | {\it Astrophysical tests of modified gravity: 1213 | the morphology and kinematics of dwarf galaxies} 1214 | JCAP 08:20, 2013 1215 | 1216 | \publication 1217 | J. VanderPlas, A. Connolly, Z. Ivezic, \& A. Gray. 1218 | {\sl Introduction to AstroML: Machine Learning for Astrophysics}. 1219 | Proc. of the CIDU, 2012 1220 | {\bf (Recipient of the CIDU 2012 Best Paper award)} 1221 | 1222 | \publication 1223 | J. VanderPlas, A. Connolly, B. Jain, \& M. Jarvis. 1224 | {\it Interpolating Masked Weak Lensing Signals with Karhunen-Loeve 1225 | Analysis}. 1226 | ApJ 744:180, 2012 1227 | 1228 | \publication 1229 | S. Daniel, A. Connolly, A.J. J. Schneider, J. VanderPlas, \& L. Xiong 1230 | {\sl Classification of Stellar Spectra with LLE}. 1231 | AJ 142:203, 2011 1232 | 1233 | \publication 1234 | F. Pedregosa {\sl et al.} 1235 | {\sl Scikit-learn: Machine learning in Python}. 1236 | Journal of Machine Learning Research, 12:2825, 2011 1237 | 1238 | \publication 1239 | B. Jain \& J. VanderPlas. 1240 | {\sl Tests of Modified Gravity with Dwarf Galaxies}. 1241 | JCAP 10:32, 2011 1242 | 1243 | \publication 1244 | J. VanderPlas, A. Connolly, B. Jain, \& M. Jarvis. 1245 | {\sl 3D Reconstruction of the Density Field: An SVD Approach 1246 | to Weak Lensing Tomography}. 1247 | ApJ 727:118, 2011 1248 | 1249 | \publication 1250 | L. Xiong, B. Poczos, J. Schneider, A. Connolly, \& J. VanderPlas. 1251 | {\sl Hierarchical Probabilistic Models for Group Anomaly Detection}. 1252 | Artificial Intelligence and Statistics (AISTATS), 2011 1253 | 1254 | % Manually Force a page-break 1255 | \end{itemize} 1256 | } 1257 | 1258 | \smalltopic{}{ 1259 | 1260 | \begin{itemize}[leftmargin=0ex, itemsep=0ex, parsep=.5ex, labelindent=-4ex] 1261 | 1262 | 1263 | \publication 1264 | H. Lampeitl {\sl et al.} 1265 | {\sl First-year Sloan Digital Sky Survey-II supernova results: 1266 | consistency and constraints with other intermediate-redshift data sets.} 1267 | MNRAS 401:2331, 2010 1268 | 1269 | \publication 1270 | LSST Science Collaboration 1271 | {\sl LSST Science Book, Version 2.0}, arXiv:0912.0201, 2010 1272 | 1273 | \publication 1274 | R. Kessler {\it et al.} 1275 | {\it First-Year Sloan Digital Sky Survey-II Supernova Results: 1276 | Hubble Diagram and Cosmological Parameters}. 1277 | ApJS 185:32, 2009 1278 | 1279 | \publication 1280 | J. VanderPlas \& A. Connolly. 1281 | {\it Reducing the Dimensionality of Data: Locally 1282 | Linear Embedding of Sloan Galaxy Spectra}. 1283 | AJ 138:1365, 2009 1284 | 1285 | \publication 1286 | J. Sollerman {\sl et al.} 1287 | {\it First-Year Sloan Digital Sky Survey-II (SDSS-II) Supernova 1288 | Results: Constraints on Nonstandard Cosmological Models}. 1289 | ApJ 703:1374, 2009 1290 | 1291 | \publication 1292 | R. Kessler {\it et al.} 1293 | {\it SNANA: A Public Software Package for Supernova Analysis}. 1294 | PASP 121:1028, 2009 1295 | 1296 | \end{itemize} 1297 | } 1298 | 1299 | \end{document} 1300 | -------------------------------------------------------------------------------- /CV/Makefile: -------------------------------------------------------------------------------- 1 | all: CV.pdf 2 | 3 | CV.pdf: CV.tex 4 | pdflatex CV.tex 5 | -------------------------------------------------------------------------------- /CV/NSF_CV.tex: -------------------------------------------------------------------------------- 1 | \documentstyle[11pt,aaspp4]{article} 2 | 3 | %% latex JVcv; dvips -o JVcv.ps JVcv; ps2pdf JVcv.ps 4 | 5 | \begin{document} 6 | 7 | \def\heading{\noindent} 8 | \def\ref{\vskip -0.05in \hangindent 2.5pc \hangafter 1} 9 | \def\listing{\vskip -0.1in \hangindent 2.5pc \hangafter 1} 10 | \def\Bline#1{\hskip 0.3in $\bullet$ #1 \\ \smallskip} 11 | \def\Sline#1{\hskip 0.6in #1 \\} 12 | \def\line#1{#1 \\} 13 | 14 | 15 | \centerline{\bf Biographical Sketch for Jacob Vanderplas} 16 | 17 | \heading {\bf Professional Preparation} 18 | 19 | \hskip -0.1in \begin{tabular}{llll} 20 | University of Washington & Computer Science & Postdoc & 2013 - 2014\\ 21 | University of Washington & Astronomy & Postdoc & 2012 - 2013 \\ 22 | University of Washington & Astronomy & Ph.D. & 2006 - 2012 \\ 23 | University of Washington & Astronomy & M.Sc. & 2006 - 2007 \\ 24 | Calvin College & Physics & B.Sc. & 1999 - 2003 \\ 25 | \end{tabular} 26 | 27 | \heading {\bf Appointments and Teaching Experience} 28 | 29 | \hskip -0.1in \begin{tabular}{lll} 30 | UW eScience Institute & Director of Open Software & 2017 - Present \\ 31 | UW eScience Institute & Director of Research - Physical Sciences & 2014 - Present \\ 32 | University of Washington & NSF Postdoctoral Fellow & 2013 - 2014 \\ 33 | University of Washington & Post-doctoral Researcher & 2012 - 2013\\ 34 | University of Washington & Research Assistant & 2007 - 2012\\ 35 | University of Washington & Planetarium Coordinator & 2008 - 2010\\ 36 | Mt. Hermon Outdoor Science School & K-12 Environmental Educator & 2004 - 2006\\ 37 | \end{tabular} 38 | 39 | \heading {\bf Selected Related Publications} 40 | 41 | \ref 42 | {\bf Jake Vanderplas}, Andrew Connolly, \v{Z}eljko Ivezi\'{c}, \& Alex Gray. {\it AstroML: Machine Learning for Astronomy in Astrophysics}. CIDU proceedings, 2012 43 | 44 | \ref 45 | {\bf Jake Vanderplas}, Andrew Connolly, Bhuvnesh Jain, \& Mike Jarvis. {\it Interpolating Masked Weak Lensing Signals with Karhunen-Loeve Analysis}. ApJ 744:180, 2012. 46 | 47 | \ref 48 | {\bf Jake Vanderplas}, Andrew Connolly, Bhuvnesh Jain, \& Mike Jarvis. {\it 3D Reconstruction of the Density Field: An SVD Approach to Weak Lensing Tomography}. ApJ 727:118, 2011. 49 | 50 | \ref 51 | {\it LSST Science Collaboration LSST Science Book, Version 2.0}, 2009 arXiv:0912.0201 52 | 53 | \ref 54 | {\bf Jake Vanderplas} \& Andrew Connolly. {\it Reducing the Dimensionality of Data: Locally Linear Embedding of Sloan Galaxy Spectra}. AJ 138:1365, 2009. 55 | 56 | \heading {\bf Other Significant Publications} 57 | 58 | \ref 59 | V. Vikram, A. Cabre, B. Jain \& {\bf J. VanderPlas}. {\it Astrophysical Tests of Modified Gravity: the Morphology and Kinematics of Dwarf Galaxies}. JCAP 08:20, 2013 60 | 61 | \ref 62 | Bhuvnesh Jain \& {\bf Jake Vanderplas}. {\it Tests of Modified Gravity with Dwarf Galaxies}. JCAP 10:32, 2011. 63 | 64 | \ref 65 | Scott Daniel, Andrew Connolly, Jeff Schneider, {\bf Jake Vanderplas} \& Liang Xiong. Classification of Stellar Spectra with LLE. AJ 142:203, 2011. 66 | 67 | \ref 68 | Pedregosa, F.; Varoquaux, G.; Gramfort, A.; Michel, V.; Thirion, B.; Grisel, O.; Blondel, M.; Prettenhofer, P.; Weiss, R.; Dubourg, V.; {\bf Vanderplas, J.}; Passos, A.; Cournapeau, D.; Brucher, M.; Perrot, M.; Duchesnay, E. {\it Scikit-learn: Machine learning in Python}. Journal of Machine Learning Research, 12:2825, 2011 69 | 70 | \ref 71 | R. Kessler, A. Becker, D. Cinabro, {\bf J. Vanderplas}, \& 42 co-authors. {\it First-Year Sloan Digital Sky Survey-II Supernova Results: Hubble Diagram and Cosmological Parameters}. ApJ 703:1374, 2009. 72 | 73 | \heading {\bf Synergistic Activities} 74 | 75 | \listing 76 | {\bf Open Source Contributions:} I have developed fast sparse matrix eigen-decomposition code and graphical analysis for the numerical package {\tt scipy}, and a number of optimized supervised and unsupervised learning and data visualization methods for the machine learning packages {\tt scikit-learn} and {\tt MDP-toolkit}. I created {\tt SciDB-py}, a Python interface to SciDB. I have also written and contributed to astronomy-specific packages such as {\tt astroML} (Astronomy Machine Learning), and {\tt SNANA} (Fermilab's supernova analysis software). 77 | 78 | \listing 79 | {\bf Digital Planetarium:} From 2010-2011, I managed and coordinated the upgrade of the UW planetarium to a digital system based on the World Wide Telescope software. This was a joint project between the University of Washington and Microsoft Research. I have developed related educational tools for K-12 class visits as well as undergraduate astronomy courses. I have occasionally partnered with Microsoft as an astronomy expert at a variety of education and technology conferences around the country. 80 | 81 | \listing 82 | {\bf Science Communication Fellow:} I have participated in the Portal to the Public training program at the Pacific Science Center, and have volunteered regularly since 2009 as a Science Communication Fellow, exploring astronomical research with visitors to the museum. 83 | 84 | \listing 85 | {\bf Undergraduate Mentoring:} I have participated as a mentor for the U. Washington PreMajor in Astronomy Program (PreMAP), providing research experiences for under-graduates from demographics which are traditionally under-represented in the sciences. 86 | 87 | \listing 88 | {\bf K-12 Curriculum Development:} I taught for two years at the Mount Hermon Outdoor Science School, where among other activities I developed an outdoor astronomy curriculum for K-12 students, and conducted an astronomy training workshop for my peers at a regional conference for outdoor educators. 89 | 90 | \end{document} 91 | -------------------------------------------------------------------------------- /CV/aaspp4.sty: -------------------------------------------------------------------------------- 1 | % Converted by doc2sty Mon May 15 13:45:55 PDT 1995. 2 | % This file is not intended for human consumption. 3 | % AASPP4.STY -- AAS preprint substyle definition for LaTeX. 4 | 5 | \def\revtex@ver{4.0} 6 | \def\revtex@date{25 Apr 95} 7 | \def\revtex@org{AAS} 8 | \def\revtex@jnl{AAS} 9 | \def\revtex@genre{preprint} 10 | \typeout{\revtex@org\space \revtex@genre\space substyle, 11 | v\revtex@ver\space <\revtex@date>.} 12 | \def\revtex@pageid{\xdef\@thefnmark{\null} 13 | \@footnotetext{This \revtex@genre\space was prepared with the 14 | \revtex@org\space \LaTeX\ macros v\revtex@ver.}} 15 | \def\genre@MS{manuscript} 16 | \def\genre@PP{preprint} 17 | \ifx\revtex@genre\genre@PP 18 | \ifnum\@ptsize<1 19 | \typeout{Warning: Undersize \revtex@genre\space font (1\@ptsize\space pts). 20 | Use 11pt or 12pt documentstyle option.} 21 | \fi 22 | \fi 23 | \def\ps@plaintop{\let\@mkboth\@gobbletwo 24 | \def\@oddfoot{}\def\@oddhead{\rm\hfil--\space\thepage\space--\hfil} 25 | \def\@evenfoot{}\let\@evenhead\@oddhead} 26 | \ps@plaintop 27 | \pretolerance=10000 28 | \@rightskip=\z@ plus 4em\rightskip\@rightskip 29 | \textwidth=6.5in 30 | \textheight=8.4in 31 | \topmargin=0in 32 | \headheight=.15in 33 | \headsep=.35in 34 | \oddsidemargin=0in 35 | \evensidemargin=0in 36 | \parindent=2em 37 | \parskip=1.5ex 38 | \def\@tightleading{1.1} 39 | \def\@doubleleading{1.6} 40 | \def\baselinestretch{\@doubleleading} 41 | \def\tighten{\def\baselinestretch{\@tightleading}} 42 | \let\tightenlines=\tighten 43 | \def\singlespace{\def\baselinestretch{\@tightleading}\normalsize} 44 | \def\doublespace{\def\baselinestretch{\@doubleleading}\normalsize} 45 | \def\sec@upcase#1{\relax{#1}} 46 | \def\eqsecnum{ 47 | \@newctr{equation}[section] 48 | \def\theequation{\hbox{\normalsize\arabic{section}-\arabic{equation}}}} 49 | \tighten 50 | \def\@journalname{The Astropolitical Journal} 51 | \def\cpr@holder{American Astronomical Society} 52 | \def\received#1{\gdef\@recvdate{#1}} \received{} 53 | \def\accepted#1{\gdef\@accptdate{#1}} \accepted{} 54 | \def\revised#1{\gdef\@revisedate{#1}} \revised{} 55 | \def\journalid#1#2{\gdef\@jourvol{#1}\gdef\@jourdate{#2}} 56 | \def\articleid#1#2{\gdef\@startpage{#1}\gdef\@finishpage{#2}} 57 | \def\paperid#1{\gdef\@paperid{#1}} \paperid{MS-0001-SAMP} 58 | \def\ccc#1{\gdef\CCC@code{#1}} \ccc{000-00\$75.95-CDB} 59 | \def\cpright#1#2{\@nameuse{cpr@#1} \gdef\cpr@year{#2} 60 | \typeout{`#1' copyright \cpr@year.}} 61 | \newcount\@cprtype \@cprtype=\@ne 62 | \def\cpr@AAS{\@cprtype=1} 63 | \def\cpr@PD{\@cprtype=2} 64 | \def\cpr@Crown{\@cprtype=3} 65 | \def\cpr@none{\@cprtype=4} 66 | \def\cpr@ASP{\@cprtype=5} 67 | \def\cpr@year{\number\year} 68 | \def\@slug{\par\noindent 69 | \ifcase\@cprtype 70 | \relax 71 | \or 72 | Copyright \cpr@year\space by the \cpr@holder. 73 | \or 74 | This article is in the public domain. 75 | \or 76 | Crown copyright \cpr@year\space by the \cpr@holder. 77 | \or 78 | No copyright is claimed for this article. 79 | \or 80 | Copyright \cpr@year\space by the ASP. 81 | \fi 82 | \par\noindent 83 | Manuscript number \@paperid.\par\noindent 84 | \CCC@code 85 | } 86 | \def\lefthead#1{\gdef\@versohead{#1}} \lefthead{\relax} 87 | \def\righthead#1{\gdef\@rectohead{#1}} \righthead{\relax} 88 | % 89 | % 90 | \def\@runheads{\@tempcnta\c@page 91 | \@whilenum \@tempcnta >0\do{ 92 | \vskip 3ex 93 | \hbox to30pc{\small\expandafter\uppercase\expandafter{\@versohead}: 94 | \expandafter\uppercase\expandafter{\@rectohead}\hfil} 95 | \advance\@tempcnta by\m@ne} 96 | } 97 | \def\slugcomment#1{\gdef\slug@comment{#1}} \slugcomment{} 98 | \newdimen\@slugcmmntwidth \@slugcmmntwidth .67\textwidth 99 | \long\def\@makeslugcmmnt{\ifx\slug@comment\@empty\relax\else 100 | \setbox\@tempboxa\hbox{\slug@comment} 101 | \ifdim \wd\@tempboxa >\@slugcmmntwidth 102 | \hbox to\textwidth{\hss 103 | \parbox\@slugcmmntwidth\slug@comment} 104 | \else 105 | \hbox to\textwidth{\hfil\box\@tempboxa} 106 | \fi 107 | \vskip 2ex 108 | \fi} 109 | \def\@rcvaccrule{\vrule\@width1.75in\@height0.5pt\@depth\z@} 110 | \def\@dates{{Received}\space% 111 | \ifx\@empty\@recvdate\@rcvaccrule\else\@recvdate\fi;% 112 | \hspace{1.5em}{accepted}\space% 113 | \ifx\@empty\@accptdate\@rcvaccrule\else\@accptdate\fi% 114 | } 115 | \def\sluginfo{{\center 116 | \@dates 117 | \endcenter}} 118 | \let\dates=\sluginfo 119 | \def\abstract{ 120 | \begin{center} 121 | {\bf{ABSTRACT}} 122 | \end{center} 123 | \quotation 124 | } 125 | \def\title#1{\@makeslugcmmnt{\center\large\bf{#1}\endcenter} 126 | \thispagestyle{empty}} 127 | \def\author#1{{\topsep\z@\center\normalsize#1\endcenter}} 128 | \let\authoraddr=\@gobble 129 | \let\authoremail=\@gobble 130 | \def\affil#1{\vspace*{-2.5ex}{\topsep\z@\center#1\endcenter}} 131 | \def\altaffilmark#1{$^{#1}$} 132 | \def\altaffiltext#1#2{\footnotetext[#1]{#2}\stepcounter{footnote}} 133 | \def\and{\vspace*{-0.5ex}{\topsep\z@\center and\endcenter}} 134 | \def\@keywordtext{Subject headings} 135 | \def\@keyworddelim{---} 136 | \def\keywords#1{\vspace*{-.7ex} 137 | \if@twocolumn\noindent{{\it\@keywordtext:\/}\space\@kwds{#1}} 138 | \else{\quote{\it\@keywordtext:\/}\space\@kwds{#1}\endquote} 139 | \fi} 140 | \let\subjectheadings=\keywords 141 | \def\@kwds#1{#1\relax} 142 | \skip\footins 4ex plus 1ex minus .5ex 143 | \footnotesep 3ex 144 | \def\notetoeditor#1{}% 145 | \newif\if@firstsection \@firstsectiontrue 146 | \def\section{\if@firstsection 147 | \@firstsectionfalse\fi 148 | \@startsection {section}{1}{\z@} 149 | {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}} 150 | \def\subsection{\@startsection{subsection}{2}{\z@} 151 | {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}} 152 | \def\subsubsection{\@startsection{subsubsection}{3}{\z@} 153 | {5ex plus .5ex}{1ex plus .2ex}{\normalsize\it}} 154 | \def\thesection{\@arabic{\c@section}} 155 | \def\thesubsection{\thesection.\@arabic{\c@subsection}} 156 | \def\thesubsubsection{\thesubsection.\@arabic{\c@subsubsection}} 157 | \def\theparagraph{\thesubsubsection.\@arabic{\c@paragraph}} 158 | \def\acknowledgments{\vskip 3ex plus .8ex minus .4ex} 159 | \let\acknowledgements=\acknowledgments 160 | \def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth 161 | \def\@svsec{}\else 162 | \refstepcounter{#1}\edef\@svsec{\csname the#1\endcsname.\hskip 1em }\fi 163 | \@tempskipa #5\relax 164 | \ifdim \@tempskipa>\z@ 165 | \begingroup \centering#6\relax 166 | \@hangfrom{\hskip #3\relax\@svsec}{\interlinepenalty \@M 167 | \sec@upcase{#8}\par}% 168 | \endgroup 169 | \csname #1mark\endcsname{#7}\addcontentsline 170 | {toc}{#1}{\ifnum #2>\c@secnumdepth \else 171 | \protect\numberline{\csname the#1\endcsname}\fi 172 | #7}\else 173 | \def\@svsechd{#6\hskip #3\@svsec \sec@upcase{#8}\csname #1mark\endcsname 174 | {#7}\addcontentsline 175 | {toc}{#1}{\ifnum #2>\c@secnumdepth \else 176 | \protect\numberline{\csname the#1\endcsname}\fi 177 | #7}}\fi 178 | \@xsect{#5}} 179 | \def\@ssect#1#2#3#4#5{\@tempskipa #3\relax 180 | \ifdim \@tempskipa>\z@ 181 | \begingroup #4\centering\@hangfrom{\hskip #1}{\interlinepenalty \@M 182 | \sec@upcase{#5}\par}\endgroup 183 | \else \def\@svsechd{#4\hskip #1\relax \sec@upcase{#5}}\fi 184 | \@xsect{#3}} 185 | \def\appendix{\par 186 | \setcounter{section}{0} 187 | \setcounter{subsection}{0} 188 | \setcounter{equation}{0} 189 | \def\thesection{\Alph{section}} 190 | \@ifundefined{documentclass} 191 | {\def\theequation{\normalsize\hbox{\Alph{section}\arabic{equation}}}} 192 | {\def\theequation{\hbox{\Alph{section}\arabic{equation}}}} 193 | \def\section{\setcounter{equation}{0} 194 | \@startsection {section}{1}{\z@} 195 | {5ex plus .5ex}{1ex plus .2ex}{\normalsize\bf}}} 196 | \newcounter{cureqno} 197 | \newenvironment{mathletters}{\refstepcounter{equation}% 198 | \setcounter{cureqno}{\value{equation}}% 199 | \let\@curtheeqn\theequation% 200 | \edef\cur@eqn{\theequation}% 201 | \def\theequation{\cur@eqn\alph{equation}}% 202 | \setcounter{equation}{0}}% 203 | {\let\theequation\@curtheeqn% 204 | \setcounter{equation}{\value{cureqno}}} 205 | \def\eqnum#1{\def\theequation{#1}\let\@currentlabel\theequation 206 | \addtocounter{equation}{\m@ne}} 207 | \def\references{\subsection*{REFERENCES} 208 | \bgroup\parindent=\z@\parskip=\itemsep 209 | \def\refpar{\par\hangindent=3em\hangafter=1}} 210 | \def\endreferences{\refpar\egroup\revtex@pageid} 211 | \def\thebibliography#1{\subsection*{REFERENCES} 212 | \list{\null}{\leftmargin 3em\labelwidth\z@\labelsep\z@\itemindent -3em 213 | \usecounter{enumi}} 214 | \def\refpar{\relax} 215 | \def\newblock{\hskip .11em plus .33em minus .07em} 216 | \sloppy\clubpenalty4000\widowpenalty4000 217 | \sfcode`\.=1000\relax} 218 | \def\endthebibliography{\endlist\revtex@pageid} 219 | \def\@biblabel#1{\relax} 220 | \def\@cite#1#2{#1\if@tempswa , #2\fi} 221 | \def\reference{\@ifnextchar\bgroup {\@reference} 222 | {\@latexerr{Missing key on reference command} 223 | {Each reference command should have a key corresponding to a markcite somewhere in the text}}} 224 | \def\@reference#1{\relax\refpar} 225 | \def\markcite{\@ifnextchar\bgroup{\@markcite} 226 | {\@latexerr{Missing key on markcite command} 227 | {Each markcite command should have a key corresponding to a reference somewhere in the references section}}} 228 | \def\@markcite#1{\relax} 229 | \def\@citex[#1]#2{\if@filesw\immediate\write\@auxout{\string\citation{#2}}\fi 230 | \def\@citea{}\@cite{\@for\@citeb:=#2\do 231 | {\@citea\def\@citea{,\penalty\@m\ }\@ifundefined 232 | {b@\@citeb}{\@warning 233 | {Citation `\@citeb' on page \thepage \space undefined}}% 234 | {\csname b@\@citeb\endcsname}}}{#1}} 235 | \setcounter{topnumber}{7} 236 | \def\tablenotemark#1{\rlap{$^{\rm #1}$}} 237 | \newtoks\@temptokenb 238 | \def\tblnote@list{} 239 | \def\tablenotetext#1#2{ 240 | \@temptokena={\vspace{.5ex}{\noindent\llap{$^{#1}$}#2}\par} 241 | \@temptokenb=\expandafter{\tblnote@list} 242 | \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}} 243 | \def\spew@tblnotes{ 244 | \ifx\tblnote@list\@empty\relax 245 | \else 246 | \vspace{4.5ex} 247 | \footnoterule 248 | \vspace{.5ex} 249 | {\footnotesize\tblnote@list} 250 | \gdef\tblnote@list{} 251 | \fi} 252 | \def\endtable{\spew@tblnotes\end@float} 253 | \@namedef{endtable*}{\spew@tblnotes\end@dblfloat} 254 | \let\tableline=\hline 255 | \long\def\@makecaption#1#2{\vskip 2ex\noindent #1 #2\par} 256 | \def\tablenum#1{\def\thetable{#1}\let\@currentlabel\thetable 257 | \addtocounter{table}{\m@ne}} 258 | \def\figurenum#1{\def\thefigure{#1}\let\@currentlabel\thefigure 259 | \addtocounter{figure}{\m@ne}} 260 | \let\placetable=\@gobble 261 | \let\placefigure=\@gobble 262 | \let\placeplate=\@gobble 263 | \def\figcaption{\@ifnextchar[{\@xfigcaption}{\@figcaption}} 264 | \def\@figcaption#1{{\def\@captype{figure}\caption{#1}}} 265 | \def\@xfigcaption[#1]#2{{\def\@captype{figure}\caption{#2}}} 266 | \def\dummytable{\refstepcounter{table}} 267 | \newbox\pt@box 268 | \newdimen\pt@width 269 | \newcount\pt@line 270 | \newcount\pt@column 271 | \newcount\pt@nlines 272 | \newcount\pt@ncol 273 | \newcount\pt@page 274 | \def\colhead#1{\multicolumn{1}{c}{#1}\pt@addcol} 275 | \def\tablecolumns#1{\pt@column=#1\pt@ncol=#1\gdef\pt@addcol{\relax}} 276 | \def\tablecaption#1{\gdef\pt@caption{#1}} \def\pt@caption{\relax} 277 | \def\tablehead#1{\gdef\pt@head{\hline\hline\relax\\[-1.7ex] 278 | #1\hskip\tabcolsep\\[.7ex]\hline\relax\\[-1.5ex]}} \def\pt@head{\relax} 279 | \def\tabletail#1{\gdef\pt@tail{#1}} \def\pt@tail{\relax} 280 | \def\tablewidth#1{\pt@width=#1} \pt@width\textwidth 281 | \def\tableheadfrac#1{\gdef\pt@headfrac{#1}} \def\pt@headfrac{.1} 282 | \def\pt@calcnlines{\@tempdima\pt@headfrac\textheight 283 | \@tempdimb\textheight\advance\@tempdimb by-\@tempdima 284 | \@tempdima\arraystretch\baselineskip 285 | \divide\@tempdimb by\@tempdima 286 | \global\pt@nlines\@tempdimb} 287 | \def\pt@tabular{\hbox \bgroup $\let\@acol\@ptabacol 288 | \let\@classz\@tabclassz 289 | \let\@classiv\@tabclassiv \let\\\@tabularcr\@tabarray} 290 | \def\@ptabacol{\edef\@preamble{\@preamble \hskip \tabcolsep\tabskip\fill}} 291 | \def\fnum@ptable{Table \thetable} 292 | \def\fnum@ptablecont{Table \thetable---{\rm Continued}} 293 | \newdimen\pt@tmpcapwidth 294 | \def\set@mkcaption{\long\def\@makecaption##1##2{\ifdim\pt@width>\z@% 295 | \pt@tmpcapwidth\pt@width\else\pt@tmpcapwidth\textwidth\fi% 296 | \center\parbox{\pt@tmpcapwidth}{\center\rm##1.\quad##2\endcenter}% 297 | \endcenter}} 298 | \def\set@mkcaptioncont{\long\def\@makecaption##1##2{ 299 | \center\rm##1\endcenter\vskip 2.5ex}} 300 | \newenvironment{deluxetable}[1]{\def\pt@format{\string#1}% 301 | \set@tblnotetext\global\pt@ncol=0\global\pt@column=0\global\pt@page=1% 302 | \def\pt@addcol{\global\advance\pt@ncol by\@ne}}% 303 | {% 304 | \pt@width\wd\pt@box\box\pt@box\spew@ptblnotes% 305 | \typeout{Page \the\pt@page\space of table \thetable\space has been set to 306 | width \the\pt@width\space with \the\pt@nlines\space lines per page}% 307 | \endcenter\end@float} 308 | \let\planotable=\deluxetable 309 | \let\endplanotable=\enddeluxetable 310 | \def\startdata{\pt@line=0\pt@calcnlines% 311 | \ifdim\pt@width>\z@\def\@halignto{to \pt@width}\else\def\@halignto{}\fi% 312 | \let\fnum@table=\fnum@ptable\set@mkcaption% 313 | \@float{table}\center\caption{\pt@caption}\leavevmode% 314 | \setbox\pt@box=\pt@tabular{\pt@format}\pt@head} 315 | \def\enddata{\crcr\noalign{\vskip .7ex}\hline\endtabular} 316 | \def\pt@nl{\global\advance\pt@line by\@ne% 317 | \ifnum\pt@line=\pt@nlines% 318 | \endtabular\pt@width\wd\pt@box\box\pt@box 319 | \typeout{Page \the\pt@page\space of table \thetable\space has been set to 320 | width \the\pt@width}% 321 | \global\advance\pt@page by\@ne% 322 | \endcenter\end@float\clearpage% 323 | \addtocounter{table}{\m@ne}% 324 | \let\fnum@table=\fnum@ptablecont\set@mkcaptioncont% 325 | \@float{table}\center\caption{\pt@caption}\leavevmode% 326 | \global\pt@ncol=\pt@column 327 | \global\pt@line=0% 328 | \setbox\pt@box=\pt@tabular{\pt@format}\pt@head% 329 | \else\\ 330 | \fi} 331 | \let\nl=\pt@nl 332 | \let\nextline=\pt@nl 333 | \def\tablevspace#1{\noalign{\vskip#1}} 334 | \def\tablebreak{\pt@line\pt@nlines\advance\pt@line by\m@ne\pt@nl} 335 | \def\cutinhead#1{\noalign{\vskip 1.5ex} 336 | \hline\pt@nl\noalign{\vskip -2.0ex} 337 | \multicolumn{\pt@ncol}{c}{#1}\pt@nl 338 | \noalign{\vskip .8ex} 339 | \hline\pt@nl\noalign{\vskip -2ex}} 340 | \def\sidehead#1{\noalign{\vskip 1.5ex} 341 | \multicolumn{\pt@ncol}{@{\hskip\z@}l}{#1}\pt@nl 342 | \noalign{\vskip .5ex}} 343 | \def\set@tblnotetext{\def\tablenotetext##1##2{{% 344 | \@temptokena={{\parbox{\pt@width}{\hskip1em$^{\rm ##1}$##2}}\par}% 345 | \@temptokenb=\expandafter{\tblnote@list} 346 | \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}}}} 347 | \def\spew@ptblnotes{ 348 | \ifx\tblnote@list\@empty\relax 349 | \else 350 | \par 351 | \vspace{2ex} 352 | {\parskip=1.5ex% 353 | \tblnote@list} 354 | \gdef\tblnote@list{} 355 | \fi} 356 | \def\tablerefs#1{\@temptokena={\vspace*{3ex}{% 357 | \parbox{\pt@width}{\hskip1em\rm References. --- #1}\par}}% 358 | \@temptokenb=\expandafter{\tblnote@list} 359 | \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}} 360 | \def\tablecomments#1{\@temptokena={\vspace*{3ex}{% 361 | \parbox{\pt@width}{\hskip1em\rm Note. --- #1}\par}}% 362 | \@temptokenb=\expandafter{\tblnote@list} 363 | \xdef\tblnote@list{\the\@temptokenb\the\@temptokena}} 364 | \newcounter{plate} 365 | \def\theplate{\@arabic\c@plate} 366 | \def\fps@plate{bp} 367 | \def\ftype@plate{4} 368 | \def\ext@plate{lof} 369 | \def\fnum@plate{{\bf Plate \theplate.}} 370 | \def\plate{\@float{plate}} 371 | \let\endplate\end@float 372 | \@namedef{plate*}{\@dblfloat{plate}} 373 | \@namedef{endplate*}{\end@dblfloat} 374 | \let\platewidth=\tablewidth 375 | \def\platenum#1{\def\theplate{#1}\let\@currentlabel\theplate 376 | \addtocounter{plate}{\m@ne}} 377 | \def\thefigure{\@arabic\c@figure} 378 | \def\fnum@figure{{\rm Fig.\space\thefigure.---}} 379 | \def\thetable{\@arabic\c@table} 380 | \def\fnum@table{{\rm Table \thetable:}} 381 | \def\fps@figure{bp} 382 | \def\fps@table{bp} 383 | \@ifundefined{epsfbox}{\@input{epsf.sty}}{\relax} 384 | \def\eps@scaling{.95} 385 | \def\epsscale#1{\gdef\eps@scaling{#1}} 386 | \def\plotone#1{\centering \leavevmode 387 | \epsfxsize=\eps@scaling\columnwidth \epsfbox{#1}} 388 | \def\plottwo#1#2{\centering \leavevmode 389 | \epsfxsize=.45\columnwidth \epsfbox{#1} \hfil 390 | \epsfxsize=.45\columnwidth \epsfbox{#2}} 391 | \def\plotfiddle#1#2#3#4#5#6#7{\centering \leavevmode 392 | \vbox to#2{\rule{0pt}{#2}} 393 | \special{psfile=#1 voffset=#7 hoffset=#6 vscale=#5 hscale=#4 angle=#3}} 394 | \let\jnl@style=\rm 395 | \def\ref@jnl#1{{\jnl@style#1}} 396 | \def\aj{\ref@jnl{AJ}} 397 | \def\araa{\ref@jnl{ARA\&A}} 398 | \def\apj{\ref@jnl{ApJ}} 399 | \def\apjl{\ref@jnl{ApJ}} 400 | \def\apjs{\ref@jnl{ApJS}} 401 | \def\ao{\ref@jnl{Appl.~Opt.}} 402 | \def\apss{\ref@jnl{Ap\&SS}} 403 | \def\aap{\ref@jnl{A\&A}} 404 | \def\aapr{\ref@jnl{A\&A~Rev.}} 405 | \def\aaps{\ref@jnl{A\&AS}} 406 | \def\azh{\ref@jnl{AZh}} 407 | \def\baas{\ref@jnl{BAAS}} 408 | \def\jrasc{\ref@jnl{JRASC}} 409 | \def\memras{\ref@jnl{MmRAS}} 410 | \def\mnras{\ref@jnl{MNRAS}} 411 | \def\pra{\ref@jnl{Phys.~Rev.~A}} 412 | \def\prb{\ref@jnl{Phys.~Rev.~B}} 413 | \def\prc{\ref@jnl{Phys.~Rev.~C}} 414 | \def\prd{\ref@jnl{Phys.~Rev.~D}} 415 | \def\pre{\ref@jnl{Phys.~Rev.~E}} 416 | \def\prl{\ref@jnl{Phys.~Rev.~Lett.}} 417 | \def\pasp{\ref@jnl{PASP}} 418 | \def\pasj{\ref@jnl{PASJ}} 419 | \def\qjras{\ref@jnl{QJRAS}} 420 | \def\skytel{\ref@jnl{S\&T}} 421 | \def\solphys{\ref@jnl{Sol.~Phys.}} 422 | \def\sovast{\ref@jnl{Soviet~Ast.}} 423 | \def\ssr{\ref@jnl{Space~Sci.~Rev.}} 424 | \def\zap{\ref@jnl{ZAp}} 425 | \def\nat{\ref@jnl{Nature}} 426 | \def\iaucirc{\ref@jnl{IAU~Circ.}} 427 | \def\aplett{\ref@jnl{Astrophys.~Lett.}} 428 | \def\apspr{\ref@jnl{Astrophys.~Space~Phys.~Res.}} 429 | \def\bain{\ref@jnl{Bull.~Astron.~Inst.~Netherlands}} 430 | \def\fcp{\ref@jnl{Fund.~Cosmic~Phys.}} 431 | \def\gca{\ref@jnl{Geochim.~Cosmochim.~Acta}} 432 | \def\grl{\ref@jnl{Geophys.~Res.~Lett.}} 433 | \def\jcp{\ref@jnl{J.~Chem.~Phys.}} 434 | \def\jgr{\ref@jnl{J.~Geophys.~Res.}} 435 | \def\jqsrt{\ref@jnl{J.~Quant.~Spec.~Radiat.~Transf.}} 436 | \def\memsai{\ref@jnl{Mem.~Soc.~Astron.~Italiana}} 437 | \def\nphysa{\ref@jnl{Nucl.~Phys.~A}} 438 | \def\physrep{\ref@jnl{Phys.~Rep.}} 439 | \def\physscr{\ref@jnl{Phys.~Scr}} 440 | \def\planss{\ref@jnl{Planet.~Space~Sci.}} 441 | \def\procspie{\ref@jnl{Proc.~SPIE}} 442 | \let\astap=\aap 443 | \let\apjlett=\apjl 444 | \let\apjsupp=\apjs 445 | \let\applopt=\ao 446 | \def\phn{\phantom{0}} 447 | \def\phd{\phantom{.}} 448 | \def\phs{\phantom{$-$}} 449 | \def\phm#1{\phantom{#1}} 450 | \def\sun{\hbox{$\odot$}} 451 | \def\earth{\hbox{$\oplus$}} 452 | \def\lesssim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$<$}}}} 453 | \def\gtrsim{\mathrel{\hbox{\rlap{\hbox{\lower4pt\hbox{$\sim$}}}\hbox{$>$}}}} 454 | \def\sq{\hbox{\rlap{$\sqcap$}$\sqcup$}} 455 | \def\arcdeg{\hbox{$^\circ$}} 456 | \def\arcmin{\hbox{$^\prime$}} 457 | \def\arcsec{\hbox{$^{\prime\prime}$}} 458 | \def\fd{\hbox{$.\!\!^{\rm d}$}} 459 | \def\fh{\hbox{$.\!\!^{\rm h}$}} 460 | \def\fm{\hbox{$.\!\!^{\rm m}$}} 461 | \def\fs{\hbox{$.\!\!^{\rm s}$}} 462 | \def\fdg{\hbox{$.\!\!^\circ$}} 463 | \def\farcm{\hbox{$.\mkern-4mu^\prime$}} 464 | \def\farcs{\hbox{$.\!\!^{\prime\prime}$}} 465 | \def\fp{\hbox{$.\!\!^{\scriptscriptstyle\rm p}$}} 466 | \def\micron{\hbox{$\mu$m}} 467 | \let\la=\lesssim 468 | \let\ga=\gtrsim 469 | \def\case#1#2{\hbox{$\frac{#1}{#2}$}} 470 | \def\slantfrac#1#2{\hbox{$\,^#1\!/_#2$}} 471 | \def\onehalf{\slantfrac{1}{2}} 472 | \def\onethird{\slantfrac{1}{3}} 473 | \def\twothirds{\slantfrac{2}{3}} 474 | \def\onequarter{\slantfrac{1}{4}} 475 | \def\threequarters{\slantfrac{3}{4}} 476 | \def\ubvr{\hbox{$U\!BV\!R$}} 477 | \def\ub{\hbox{$U\!-\!B$}} 478 | \def\bv{\hbox{$B\!-\!V$}} 479 | \def\vr{\hbox{$V\!-\!R$}} 480 | \def\ur{\hbox{$U\!-\!R$}} 481 | \def\ion#1#2{#1$\;${\small\rm\@Roman{#2}}\relax} 482 | \def\nodata{ ~$\cdots$~ } 483 | \newcount\lecurrentfam 484 | \def\LaTeX{\lecurrentfam=\the\fam \leavevmode L\raise.42ex 485 | \hbox{$\fam\lecurrentfam\scriptstyle\kern-.3em A$}\kern-.15em\TeX} 486 | \def\sizrpt{ 487 | (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font 488 | \typeout{ 489 | (\fontname\the\font): em=\the\fontdimen6\font, ex=\the\fontdimen5\font 490 | }} 491 | -------------------------------------------------------------------------------- /CV/enumitem.sty: -------------------------------------------------------------------------------- 1 | % +--------------------------------------------------+ 2 | % | Typeset enumitem.tex to get the documentation. | 3 | % +--------------------------------------------------+ 4 | % 5 | % Copyright (c) 2003-2011 by Javier Bezos. 6 | % All Rights Reserved. 7 | % 8 | % This file is part of the enumitem distribution release 3.5.2 9 | % ----------------------------------------------------------- 10 | % 11 | % It may be distributed and/or modified under the 12 | % conditions of the LaTeX Project Public License, either version 1.3 13 | % of this license or (at your option) any later version. 14 | % The latest version of this license is in 15 | % http://www.latex-project.org/lppl.txt 16 | % and version 1.3 or later is part of all distributions of LaTeX 17 | % version 2003/12/01 or later. 18 | % 19 | % This work has the LPPL maintenance status "maintained". 20 | % 21 | % The Current Maintainer of this work is Javier Bezos. 22 | % 23 | % Notes 24 | % ~~~~~ 25 | % 26 | % The tag enit@ is used through the style 27 | % 28 | % To do: 29 | % ~~~~~~ 30 | % - ref*, for adding stuff in the same fashion as label* 31 | % - option ams, to force upshape, but I have to investigate 32 | % how to do it. 33 | % - labelled descriptions (ie, label, title, body) 34 | % - A true nextline (far from trivial and perhaps solved with 35 | % labelled descriptions). 36 | % - Improved \AddEnumerateCounter 37 | % - Compatibility with interfaces and zref-enumitem 38 | % - "Pausing" somehow inline boxed text. 39 | % - \@enumctr <-> \@listctr? 40 | % - Define keys with values 41 | % - Revise @nobreak 42 | % 43 | % Release 44 | % ~~~~~~~ 45 | 46 | \NeedsTeXFormat{LaTeX2e} 47 | \ProvidesPackage{enumitem}[2011/09/28 v3.5.2 Customized lists] 48 | 49 | % +=============================+ 50 | % | EMULATING KEYVAL | 51 | % +=============================+ 52 | % 53 | % "Thanks" to xkeyval, which use the same macros names as 54 | % keyval :-(, the latter has to be replicated in full here 55 | % to ensure it works as intended. The original work if by 56 | % David Carlisle, under license LPPL. Once the code is here, 57 | % it could be optimized by adpting it to the specific needs 58 | % of titlesec (to do). 59 | 60 | \def\enitkv@setkeys#1#2{% 61 | \def\enitkv@prefix{enitkv@#1@}% 62 | \let\@tempc\relax 63 | \enitkv@do#2,\relax,} 64 | 65 | \def\enitkv@do#1,{% 66 | \ifx\relax#1\empty\else 67 | \enitkv@split#1==\relax 68 | \expandafter\enitkv@do\fi} 69 | 70 | \def\enitkv@split#1=#2=#3\relax{% 71 | \enitkv@@sp@def\@tempa{#1}% 72 | \ifx\@tempa\@empty\else 73 | \expandafter\let\expandafter\@tempc 74 | \csname\enitkv@prefix\@tempa\endcsname 75 | \ifx\@tempc\relax 76 | \enitkv@errx{\@tempa\space undefined}% 77 | \else 78 | \ifx\@empty#3\@empty 79 | \enitkv@default 80 | \else 81 | \enitkv@@sp@def\@tempb{#2}% 82 | \expandafter\@tempc\expandafter{\@tempb}\relax 83 | \fi 84 | \fi 85 | \fi} 86 | 87 | \def\enitkv@default{% 88 | \expandafter\let\expandafter\@tempb 89 | \csname\enitkv@prefix\@tempa @default\endcsname 90 | \ifx\@tempb\relax 91 | \enitkv@err{No value specified for \@tempa}% 92 | \else 93 | \@tempb\relax 94 | \fi} 95 | 96 | \def\enitkv@errx#1{\enit@error{#1}\@ehc} 97 | 98 | \let\enitkv@err\enitkv@errx 99 | 100 | \def\@tempa#1{% 101 | \def\enitkv@@sp@def##1##2{% 102 | \futurelet\enitkv@tempa\enitkv@@sp@d##2\@nil\@nil#1\@nil\relax##1}% 103 | \def\enitkv@@sp@d{% 104 | \ifx\enitkv@tempa\@sptoken 105 | \expandafter\enitkv@@sp@b 106 | \else 107 | \expandafter\enitkv@@sp@b\expandafter#1% 108 | \fi}% 109 | \def\enitkv@@sp@b#1##1 \@nil{\enitkv@@sp@c##1}} 110 | 111 | \@tempa{ } 112 | 113 | \def\enitkv@@sp@c#1\@nil#2\relax#3{\enitkv@toks@{#1}\edef#3{\the\enitkv@toks@}} 114 | 115 | \@ifundefined{KV@toks@} 116 | {\newtoks\enitkv@toks@} 117 | {\let\enitkv@toks@\KV@toks@} 118 | 119 | \def\enitkv@key#1#2{% 120 | \@ifnextchar[{\enitkv@def{#1}{#2}}{\@namedef{enitkv@#1@#2}####1}} 121 | 122 | \def\enitkv@def#1#2[#3]{% 123 | \@namedef{enitkv@#1@#2@default\expandafter}\expandafter 124 | {\csname enitkv@#1@#2\endcsname{#3}}% 125 | \@namedef{enitkv@#1@#2}##1} 126 | 127 | % +=============================+ 128 | % | DEFINITIONS | 129 | % +=============================+ 130 | % 131 | % (1) The package uses a token register very often. To be on the 132 | % safe side, instead of \toks@, etc., a new one is declared. 133 | % (2) \enit@inbox is the box storing the items in boxed inline 134 | % lists. 135 | % (3) \enit@outerparindent is used to save the outer parindent 136 | % so that it can be used in the key parindent 137 | % (4) \enit@type has three values: 0 = enum, 1 = item, 2 = desc. 138 | % (5) \enit@calc stores which dimen is to be computed: 139 | % 0=labelindent, 1=labelwidth, 2=labelsep, 3=leftmargin, 140 | % 4=itemindent 141 | % (6) \enit@resuming has four values: 0 = none, 1 = series, 142 | % 2 = resume* series (computed in group enumitem-resume), 143 | % 3 = resume* list (ie, with no value). 144 | 145 | \chardef \enit@iv=4 146 | \newlength\labelindent 147 | \newdimen \enit@outerparindent 148 | \newtoks \enit@toks 149 | \newbox \enit@inbox 150 | 151 | \newif\ifenit@boxmode 152 | \newif\ifenit@sepfrommargin 153 | \newif\ifenit@lblfrommargin 154 | \newif\ifenit@calcwidest 155 | \newif\ifenit@nextline 156 | \newif\ifenit@boxdesc 157 | 158 | % An alias (calc-savvy): 159 | 160 | \let\c@enit@cnt\@tempcnta 161 | 162 | \def\enit@meaning{\expandafter\strip@prefix\meaning} 163 | \def\enit@noexcs#1{\expandafter\noexpand\csname#1\endcsname} 164 | 165 | % Miscelaneous errors 166 | % =================== 167 | 168 | \def\enit@error{\PackageError{enumitem}} 169 | 170 | \def\enit@checkerror#1#2{% 171 | \enit@error{Unknown value `#2' for key `#1'}% 172 | {See the manual for valid values}} 173 | 174 | \def\enit@itemerror{% 175 | \enit@error{Misplaced \string\item}% 176 | {Either there is some text before the first\MessageBreak 177 | item or the last item has no text}} 178 | 179 | \def\enit@noserieserror#1{% 180 | \enit@error{Series `#1' not started}% 181 | {You are trying to continue a series\MessageBreak 182 | which has not been started with series}} 183 | 184 | \def\enit@checkseries#1{% 185 | \ifcase\enit@resuming 186 | \enit@error{Misplaced key `#1'}% 187 | {`series' and `resume*' must be used\MessageBreak 188 | in the optional argument of lists}% 189 | \fi} 190 | 191 | \def\enit@checkseries@m{% 192 | \ifcase\enit@resuming\else 193 | \enit@error{Uncompatible series settings}% 194 | {`series' and `resume*' must not be used\MessageBreak 195 | at the same time}% 196 | \fi} 197 | 198 | \let\enit@toodeep\@toodeep 199 | 200 | \def\@toodeep{% 201 | \ifnum\@listdepth>\enit@listdepth\relax 202 | \enit@toodeep 203 | \else 204 | \count@\@listdepth 205 | \global\advance\@listdepth\@ne 206 | \@ifundefined{@list\romannumeral\the\@listdepth}% 207 | {\expandafter\let 208 | \csname @list\romannumeral\the\@listdepth\expandafter\endcsname 209 | \csname @list\romannumeral\the\count@\endcsname}{}% 210 | \fi} 211 | 212 | 213 | % +=============================+ 214 | % | KEYS | 215 | % +=============================+ 216 | % 217 | % Including code executed by keys. 218 | % 219 | % There are 2 keyval groups: enumitem, and enumitem-delayed. 220 | % The latter is used to make sure a prioritary key is the 221 | % latest one; eg, ref, so that the ref format set by label 222 | % is overriden. So, when this key is found in enumitem, 223 | % nothing is done, except the key/value is moved to 224 | % enumitem-delayed. 225 | % 226 | % A further group (enumitem-resume) catches resume* and 227 | % series in optional arguments in lists. 228 | % 229 | % Vertical spacing 230 | % ================ 231 | 232 | \enitkv@key{enumitem}{topsep}{% 233 | \setlength\topsep{#1}} 234 | 235 | \enitkv@key{enumitem}{itemsep}{% 236 | \setlength\itemsep{#1}} 237 | 238 | \enitkv@key{enumitem}{parsep}{% 239 | \setlength\parsep{#1}} 240 | 241 | \enitkv@key{enumitem}{partopsep}{% 242 | \setlength\partopsep{#1}} 243 | 244 | % Horizontal spacing 245 | % ================== 246 | % 247 | % There are 3 cases: *, ! and a value. The latter also 248 | % cancels widest with the sequence key=* ... key=value 249 | % \string is used, just in case some package changes the 250 | % catcodes. 251 | 252 | \def\enit@calcset#1#2#3{% 253 | \if\string*\string#3% 254 | \enit@calcwidesttrue 255 | \let\enit@calc#2% 256 | \else\if\string!\string#3% 257 | \enit@calcwidestfalse 258 | \let\enit@calc#2% 259 | \else 260 | \ifnum\enit@calc=#2% 261 | \enit@calcwidestfalse 262 | \let\enit@calc\z@ 263 | \fi 264 | \setlength#1{#3}% 265 | \fi\fi} 266 | 267 | \def\enitkv@enumitem@widest#1{% 268 | \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax 269 | \@namedef{enit@widest@\@enumctr}##1{#1}} 270 | 271 | \def\enitkv@enumitem@widest@default{% 272 | \expandafter\let\csname enit@cw@\@enumctr\endcsname\relax 273 | \expandafter\let\csname enit@widest@\@enumctr\endcsname\relax} 274 | 275 | \enitkv@key{enumitem}{widest*}{% 276 | \setcounter{enit@cnt}{#1}% 277 | \expandafter\edef\csname enit@cw@\@enumctr\endcsname 278 | {\the\c@enit@cnt}% 279 | \expandafter\edef\csname enit@widest@\@enumctr\endcsname##1% 280 | {##1{\the\c@enit@cnt}}} 281 | 282 | \enitkv@key{enumitem}{labelindent*}{% 283 | \enit@lblfrommargintrue 284 | \ifnum\enit@calc=\z@ 285 | \enit@calcwidestfalse 286 | \fi 287 | \setlength\labelindent{#1}% 288 | \advance\labelindent\leftmargin} 289 | 290 | \enitkv@key{enumitem}{labelindent}{% 291 | \enit@lblfrommarginfalse 292 | \enit@calcset\labelindent\z@{#1}} 293 | 294 | \enitkv@key{enumitem}{labelwidth}{% 295 | \enit@calcset\labelwidth\@ne{#1}} 296 | 297 | \enitkv@key{enumitem}{leftmargin}{% 298 | \edef\enit@c{\the\leftmargin}% 299 | \enit@calcset\leftmargin\thr@@{#1}% 300 | \ifenit@lblfrommargin 301 | \advance\labelindent-\enit@c\relax 302 | \advance\labelindent\leftmargin 303 | \fi} 304 | 305 | \enitkv@key{enumitem}{itemindent}{% 306 | \edef\enit@c{\the\itemindent}% 307 | \enit@calcset\itemindent\enit@iv{#1}% 308 | \ifenit@sepfrommargin 309 | \advance\labelsep-\enit@c\relax 310 | \advance\labelsep\itemindent 311 | \fi} 312 | 313 | \enitkv@key{enumitem}{listparindent}{% 314 | \setlength\listparindent{#1}} 315 | 316 | \enitkv@key{enumitem}{rightmargin}{% 317 | \setlength\rightmargin{#1}} 318 | 319 | % labelsep, from itemindent; labelsep*, from leftmargin 320 | 321 | \enitkv@key{enumitem}{labelsep*}{% 322 | \enit@sepfrommargintrue 323 | \ifnum\enit@calc=\tw@ 324 | \enit@calcwidestfalse 325 | \let\enit@calc\z@ 326 | \fi 327 | \setlength\labelsep{#1}% 328 | \advance\labelsep\itemindent} 329 | 330 | \enitkv@key{enumitem}{labelsep}{% 331 | \enit@sepfrommarginfalse 332 | \enit@calcset\labelsep\tw@{#1}} 333 | 334 | % Series, resume and start 335 | % ======================== 336 | 337 | \enitkv@key{enumitem-resume}{series}{% 338 | \enit@checkseries@m 339 | \let\enit@resuming\@ne 340 | \@ifundefined{enitkv@enumitem@#1}{}% 341 | {\enit@error{Invalid series name `#1'}% 342 | {Do not name a series with an existing key}}% 343 | \def\enit@series{#1}} 344 | 345 | \enitkv@key{enumitem}{series}{% 346 | \enit@checkseries{series}} 347 | 348 | \def\enitkv@enumitem@resume#1{% 349 | \edef\enit@series{#1}% 350 | \@nameuse{enit@resume@series@#1}\relax} 351 | 352 | \def\enitkv@enumitem@resume@default{% 353 | \@nameuse{enit@resume@\@currenvir}\relax} 354 | 355 | \@namedef{enitkv@enumitem-resume@resume*}#1{% 356 | \enit@checkseries@m 357 | \let\enit@resuming\tw@ 358 | \edef\enit@series{#1}% 359 | \@ifundefined{enit@resumekeys@series@#1}% 360 | {\enit@noserieserror{#1}}% 361 | {\expandafter\let\expandafter\enit@resumekeys 362 | \csname enit@resumekeys@series@#1\endcsname}} 363 | 364 | \@namedef{enitkv@enumitem-resume@resume*@default}{% 365 | \let\enit@resuming\thr@@ 366 | \expandafter\let\expandafter\enit@resumekeys 367 | \csname enit@resumekeys@\@currenvir\endcsname 368 | \@nameuse{enit@resume@\@currenvir}\relax} 369 | 370 | \enitkv@key{enumitem}{resume*}[]{% 371 | \enit@checkseries{resume*}} 372 | 373 | \newcommand\restartlist[1]{% 374 | \@ifundefined{end#1}% 375 | {\enit@error{Undefined list `#1'}% 376 | {No list has been defined with that name.}}% 377 | {\expandafter\let 378 | \csname enit@resume@#1\endcsname\@empty}} 379 | 380 | \enitkv@key{enumitem}{start}[\@ne]{% 381 | \setcounter{\@listctr}{#1}% 382 | \advance\@nameuse{c@\@listctr}\m@ne} 383 | 384 | % Penalties 385 | % ========= 386 | 387 | \enitkv@key{enumitem}{beginpenalty}{% 388 | \@beginparpenalty#1\relax} 389 | 390 | \enitkv@key{enumitem}{midpenalty}{% 391 | \@itempenalty#1\relax} 392 | 393 | \enitkv@key{enumitem}{endpenalty}{% 394 | \@endparpenalty#1\relax} 395 | 396 | % Font/Format 397 | % =========== 398 | 399 | \enitkv@key{enumitem}{format}{% 400 | \def\enit@format{#1}} 401 | 402 | \enitkv@key{enumitem}{font}{% 403 | \def\enit@format{#1}} 404 | 405 | % Description styles 406 | % ================== 407 | 408 | \enitkv@key{enumitem}{style}[normal]{% 409 | \@ifundefined{enit@style@#1}% 410 | {\enit@checkerror{style}{#1}}% 411 | {\enit@nextlinefalse 412 | \enit@boxdescfalse 413 | \@nameuse{enit@style@#1}% 414 | \edef\enit@descstyle{\enit@noexcs{enit@#1style}}}} 415 | 416 | \def\enit@style@standard{% 417 | \enit@boxdesctrue 418 | \enit@calcset\itemindent\enit@iv!} 419 | 420 | \let\enit@style@normal\enit@style@standard 421 | 422 | \def\enit@style@unboxed{% 423 | \enit@calcset\itemindent\enit@iv!} 424 | 425 | \def\enit@style@sameline{% 426 | \enit@calcset\labelwidth\@ne!} 427 | 428 | \def\enit@style@multiline{% 429 | \enit@align@parleft 430 | \enit@calcset\labelwidth\@ne!} 431 | 432 | \def\enit@style@nextline{% 433 | \enit@nextlinetrue 434 | \enit@calcset\labelwidth\@ne!} 435 | 436 | % Labels and refs 437 | % =============== 438 | 439 | % Aligment 440 | % -------- 441 | 442 | \enitkv@key{enumitem}{align}{% 443 | \@ifundefined{enit@align@#1}% 444 | {\enit@checkerror{align}{#1}}% 445 | {\csname enit@align@#1\endcsname}} 446 | 447 | % \nobreak for unboxed label with color. See below. 448 | 449 | \newcommand\SetLabelAlign[2]{% 450 | \enit@toks{#2}% 451 | \expandafter\edef\csname enit@align@#1\endcsname 452 | {\def\noexpand\enit@align####1{\nobreak\the\enit@toks}}} 453 | 454 | \def\enit@align@right{% 455 | \def\enit@align##1{\nobreak\hss\llap{##1}}} 456 | 457 | \def\enit@align@left{% 458 | \def\enit@align##1{\nobreak##1\hfil}} 459 | 460 | \def\enit@align@parleft{% 461 | \def\enit@align##1{% 462 | \nobreak 463 | \strut\smash{\parbox[t]\labelwidth{\raggedright##1}}}} 464 | 465 | % \enit@ref has three possible definitions: 466 | % (1) \relax, if there is neither label nor ref (ie, use 467 | % LaTeX settings). 468 | % (2) set ref to @itemlabel, if there is label but not ref 469 | % (3) set ref to ref, if there is ref (with or without label) 470 | 471 | \enitkv@key{enumitem}{label}{% 472 | \expandafter\def\@itemlabel{#1}% 473 | \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}} 474 | 475 | \enitkv@key{enumitem}{label*}{% 476 | \ifnum\enit@depth=\@ne 477 | \expandafter\def\@itemlabel{#1}% 478 | \else % no level 0 479 | \advance\enit@depth\m@ne 480 | \enit@toks{#1}% 481 | \expandafter\edef\@itemlabel{% 482 | \enit@noexcs{label\enit@prevlabel}% 483 | \the\enit@toks}% 484 | \advance\enit@depth\@ne 485 | \fi 486 | \def\enit@ref{\expandafter\enit@reflabel\@itemlabel\z@}} 487 | 488 | % ref is set by label, except if there is an explicit ref 489 | % in the same hierarchy level. Explicit refs above the 490 | % current hierarchy level are overriden by label (besides ref), 491 | % too. Since an explicit ref has preference, it's delayed. 492 | 493 | \enitkv@key{enumitem}{ref}{% 494 | \g@addto@macro\enit@delayedkeys{,ref=#1}} 495 | 496 | \enitkv@key{enumitem-delayed}{ref}{% 497 | \def\enit@ref{\enit@reflabel{#1}\@ne}} 498 | 499 | % #2=0 don't "normalize" (ie, already normalized) 500 | % =1 "normalize" (in key ref) 501 | % Used thru \enit@ref 502 | 503 | \def\enit@reflabel#1#2{% 504 | \ifnum\enit@depth=\@ne\else % no level 0 505 | \advance\enit@depth\@ne 506 | \@namedef{p@\@enumctr}{}% Don't accumulate labels 507 | \advance\enit@depth\m@ne 508 | \fi 509 | \ifcase#2% 510 | \@namedef{the\@enumctr}{{#1}}% 511 | \else 512 | \enit@normlabel{\csname the\@enumctr\endcsname}{#1}% 513 | \fi} 514 | 515 | % \xxx* in counters (refstar) and widest (calcdef) 516 | % ------------------------------------------------ 517 | % \enit@labellist contains a list of 518 | % \enit@elt{widest}\count\@count\enit@sc@@count 519 | % \enit@elt is either \enit@getwidth or \enit@refstar, defined 520 | % below 521 | % The current implementation is sub-optimal -- labels are stored in 522 | % labellist, counters defined again when processing labels, and 523 | % modifying it is almost impossible. 524 | 525 | \let\enit@labellist\@empty 526 | 527 | \newcommand\AddEnumerateCounter{% 528 | \@ifstar\enit@addcounter@s\enit@addcounter} 529 | 530 | \def\enit@addcounter#1#2#3{% 531 | \enit@toks\expandafter{% 532 | \enit@labellist 533 | \enit@elt{#3}}% 534 | \edef\enit@labellist{% 535 | \the\enit@toks 536 | \enit@noexcs{\expandafter\@gobble\string#1}% 537 | \enit@noexcs{\expandafter\@gobble\string#2}% 538 | \enit@noexcs{enit@sc@\expandafter\@gobble\string#2}}} 539 | 540 | \def\enit@addcounter@s#1#2#3{% 541 | \enit@addcounter{#1}{#2}% 542 | {\@nameuse{enit@sc@\expandafter\@gobble\string#2}{#3}}} 543 | 544 | % The 5 basic counters: 545 | 546 | \AddEnumerateCounter\arabic\@arabic{0} 547 | \AddEnumerateCounter\alph\@alph{m} 548 | \AddEnumerateCounter\Alph\@Alph{M} 549 | \AddEnumerateCounter\roman\@roman{viii} 550 | \AddEnumerateCounter\Roman\@Roman{VIII} 551 | 552 | % Inline lists 553 | % ============ 554 | % 555 | % Labels 556 | % ------ 557 | 558 | \enitkv@key{enumitem}{itemjoin}{% 559 | \def\enit@itemjoin{#1}} 560 | 561 | \enitkv@key{enumitem}{itemjoin*}{% 562 | \def\enit@itemjoin@s{#1}} 563 | 564 | \enitkv@key{enumitem}{afterlabel}{% 565 | \def\enit@afterlabel{#1}} 566 | 567 | % Mode 568 | % ---- 569 | 570 | \enitkv@key{enumitem}{mode}{% 571 | \@ifundefined{enit@mode#1}% 572 | {\enit@checkerror{mode}{#1}}% 573 | {\csname enit@mode#1\endcsname}} 574 | 575 | \let\enit@modeboxed\enit@boxmodetrue 576 | \let\enit@modeunboxed\enit@boxmodefalse 577 | 578 | % Short Labels 579 | % ============ 580 | 581 | \let\enit@marklist\@empty 582 | 583 | % shorthand, expansion: 584 | 585 | \newcommand\SetEnumerateShortLabel[2]{% 586 | \let\enit@a\@empty 587 | \def\enit@elt##1##2{% 588 | \def\enit@b{#1}\def\enit@c{##1}% 589 | \ifx\enit@b\enit@c\else 590 | \expandafter\def\expandafter\enit@a\expandafter{% 591 | \enit@a 592 | \enit@elt{##1}{##2}}% 593 | \fi}% 594 | \enit@marklist 595 | \expandafter\def\expandafter\enit@a\expandafter{% 596 | \enit@a 597 | \enit@elt{#1}{#2}}% 598 | \let\enit@marklist\enit@a} 599 | 600 | \SetEnumerateShortLabel{a}{\alph*} 601 | \SetEnumerateShortLabel{A}{\Alph*} 602 | \SetEnumerateShortLabel{i}{\roman*} 603 | \SetEnumerateShortLabel{I}{\Roman*} 604 | \SetEnumerateShortLabel{1}{\arabic*} 605 | 606 | % This is called \enit@first one,two,three,\@nil\@@nil. If there 607 | % are just one element #2 is \@nil, otherwise we have to remove 608 | % the trailing ,\@nil with enit@first@x 609 | % Called with the keys in \enit@c 610 | % Returns enit@toks 611 | 612 | \def\enit@first#1,#2\@@nil{% 613 | \in@{=}{#1}% Quick test, if contains =, it's key=value 614 | \ifin@\else 615 | \enitkv@@sp@def\enit@a{#1}% 616 | \@ifundefined{enitkv@enumitem@\enit@meaning\enit@a}% 617 | {\ifnum\enit@type=\z@ 618 | \def\enit@elt{\enit@replace\enit@a}% 619 | \enit@marklist % Returns \enit@toks 620 | \else 621 | \enit@toks{#1}% 622 | \fi 623 | \ifx\@nil#2% 624 | \ifx,#1,\else 625 | \edef\enit@c{label=\the\enit@toks}% 626 | \fi 627 | \else 628 | \@temptokena\expandafter{\enit@first@x#2}% 629 | \edef\enit@c{label=\the\enit@toks,\the\@temptokena}% 630 | \fi}% 631 | {}% 632 | \fi 633 | \enit@toks\expandafter{\enit@c}} 634 | 635 | \def\enit@first@x#1,\@nil{#1} 636 | 637 | \def\enit@replace#1#2#3{% 638 | \enit@toks{}% 639 | \def\enit@b##1#2##2\@@nil{% 640 | \ifx\@nil##2% 641 | \addto@hook\enit@toks{##1}% 642 | \else 643 | \edef\enit@a{\the\enit@toks}% 644 | \ifx\enit@a\@empty\else 645 | \enit@error{Extra short label ignored}% 646 | {There are more than one short label}% 647 | \fi 648 | \addto@hook\enit@toks{##1#3}% 649 | \enit@b##2\@@nil 650 | \fi}% 651 | \expandafter\enit@b#1#2\@nil\@@nil 652 | \edef#1{\the\enit@toks}} 653 | 654 | % Pre and post code 655 | % ================= 656 | 657 | \enitkv@key{enumitem}{before}{% 658 | \def\enit@before{#1}} 659 | 660 | \enitkv@key{enumitem}{after}{% 661 | \def\enit@after{#1}} 662 | 663 | \enitkv@key{enumitem}{before*}{% 664 | \expandafter\def\expandafter\enit@before\expandafter 665 | {\enit@before#1}} 666 | 667 | \enitkv@key{enumitem}{after*}{% 668 | \expandafter\def\expandafter\enit@after\expandafter 669 | {\enit@after#1}} 670 | 671 | % Miscelaneous keys 672 | % ================ 673 | 674 | \enitkv@key{enumitem}{nolistsep}[true]{% 675 | \partopsep=\z@skip 676 | \topsep=\z@ plus .1pt 677 | \itemsep=\z@skip 678 | \parsep=\z@skip} 679 | 680 | \enitkv@key{enumitem}{nosep}[true]{% 681 | \partopsep=\z@skip 682 | \topsep=\z@skip 683 | \itemsep=\z@skip 684 | \parsep=\z@skip} 685 | 686 | 687 | \enitkv@key{enumitem}{noitemsep}[true]{% 688 | \itemsep=\z@skip 689 | \parsep=\z@skip} 690 | 691 | \enitkv@key{enumitem}{wide}[\parindent]{% 692 | \enit@align@left 693 | \leftmargin\z@ 694 | \labelwidth\z@ 695 | \setlength\labelindent{#1}% 696 | \listparindent\labelindent 697 | \enit@calcset\itemindent\enit@iv!} 698 | 699 | % The following is deprecated in favour of wide: 700 | 701 | \enitkv@key{enumitem}{fullwidth}[true]{% 702 | \leftmargin\z@ 703 | \labelwidth\z@ 704 | \def\enit@align##1{\hskip\labelsep##1}} 705 | 706 | % "Abstract" layer 707 | % ================ 708 | % 709 | % Named values 710 | % ------------ 711 | 712 | \newcommand\SetEnumitemValue[2]{% Implicit #3 713 | \@ifundefined{enit@enitkv@#1}% 714 | {\@ifundefined{enitkv@enumitem@#1}% 715 | {\enit@error{Wrong key `#1' in \string\SetEnumitemValue}% 716 | {Perhaps you have misspelled it}}{}% 717 | \expandafter\let\csname enit@enitkv@#1\expandafter\endcsname 718 | \csname enitkv@enumitem@#1\endcsname}{}% 719 | \@namedef{enitkv@enumitem@#1}##1{% 720 | \def\enit@a{##1}% 721 | \@ifundefined{enit@enitkv@#1@\enit@meaning\enit@a}% 722 | {\@nameuse{enit@enitkv@#1}{##1}}% 723 | {\@nameuse{enit@enitkv@#1\expandafter\expandafter\expandafter}% 724 | \expandafter\expandafter\expandafter 725 | {\csname enit@enitkv@#1@##1\endcsname}}{}}% 726 | \@namedef{enit@enitkv@#1@#2}} 727 | 728 | % Defining keys 729 | % ------------- 730 | 731 | \newcommand\SetEnumitemKey[2]{% 732 | \@ifundefined{enitkv@enumitem@#1}% 733 | {\enitkv@key{enumitem}{#1}[]{\enitkv@setkeys{enumitem}{#2}}}% 734 | {\enit@error{Duplicated key `#1' in \string\SetEnumitemKey}% 735 | {There already exists a key with that name}}} 736 | 737 | % +=============================+ 738 | % | PROCESSING KEYS | 739 | % +=============================+ 740 | % 741 | % Set keys 742 | % ======== 743 | 744 | \def\enit@setkeys#1{% 745 | \@ifundefined{enit@@#1}{}% 746 | {\expandafter\expandafter\expandafter 747 | \enit@setkeys@i\csname enit@@#1\endcsname\@@}} 748 | 749 | % The following is used directly in resumeset: 750 | 751 | \def\enit@setkeys@i#1\@@{% 752 | \let\enit@delayedkeys\@empty 753 | \enit@shl{#1}% is or returns \enit@toks 754 | \expandafter\enit@setkeys@ii\the\enit@toks\@@} 755 | 756 | \def\enit@setkeys@ii#1\@@{% 757 | \enitkv@setkeys{enumitem}{#1}% 758 | \enit@toks\expandafter{\enit@delayedkeys}% 759 | \edef\enit@a{% 760 | \noexpand\enitkv@setkeys{enumitem-delayed}{\the\enit@toks}}% 761 | \enit@a} 762 | 763 | % Handling * and ! values 764 | % ======================= 765 | % 766 | % \@gobbletwo removes \c from \c@counter. 767 | 768 | \def\enit@getwidth#1#2#3#4{% 769 | \let#4#3% 770 | \def#3##1{% 771 | \@ifundefined{enit@widest\expandafter\@gobbletwo\string##1}% if no widest=key 772 | {#1}% 773 | {\csname enit@widest\expandafter\@gobbletwo\string##1\endcsname{#4}}}} 774 | 775 | \def\enit@valueerror#1{\z@ % if after an assignment, but doesn't catch \ifnum 776 | \enit@error{No default \string\value\space for `#1'}% 777 | {You can provide one with widest*}}% 778 | 779 | \let\enit@values\@empty 780 | 781 | \def\enit@calcwidth{% 782 | \ifenit@calcwidest 783 | \ifnum\enit@type=\z@ % ie, enum 784 | \@ifundefined{enit@cw@\@enumctr}% 785 | {\@namedef{enit@cv@\@enumctr}{\enit@valueerror\@enumctr}}% 786 | {\edef\enit@values{% 787 | \enit@values 788 | \@nameuse{c@\@enumctr}\@nameuse{enit@cw@\@enumctr}\relax}% 789 | \expandafter 790 | \edef\csname enit@cv@\@enumctr\endcsname 791 | {\@nameuse{c@\@enumctr}}}% 792 | \fi 793 | \begingroup 794 | \enit@values 795 | \def\value##1{\csname enit@cv@##1\endcsname}% 796 | \let\enit@elt\enit@getwidth 797 | \enit@labellist 798 | \settowidth\labelwidth{\@itemlabel}% 799 | \xdef\enit@a{\labelwidth\the\labelwidth\relax}% 800 | \endgroup 801 | \enit@a 802 | \fi 803 | \advance\dimen@-\labelwidth} 804 | 805 | \def\enit@calcleft{% 806 | \dimen@\leftmargin 807 | \advance\dimen@\itemindent 808 | \advance\dimen@-\labelsep 809 | \advance\dimen@-\labelindent 810 | \ifcase\enit@calc % = 0 = labelindent 811 | \enit@calcwidth 812 | \advance\labelindent\dimen@ 813 | \or % = 1 = labelwidth, so no \enit@calcwidth 814 | \labelwidth\dimen@ 815 | \or % = 2 = labelsep 816 | \enit@calcwidth 817 | \advance\labelsep\dimen@ 818 | \or % = 3 = leftmargin 819 | \enit@calcwidth 820 | \advance\leftmargin-\dimen@ 821 | \or % = 4 =itemindent 822 | \enit@calcwidth 823 | \advance\itemindent-\dimen@ 824 | \fi} 825 | 826 | % "Normalizing" labels 827 | % ==================== 828 | % 829 | % Replaces \counter* by \counter{level} (those in \enit@labellist). 830 | % 831 | % #1 is either \csname...\endcsmame or the container \@itemlabel -- 832 | % hence \expandafter 833 | 834 | \def\enit@refstar@i#1#2{% 835 | \if*#2\@empty 836 | \noexpand#1{\@enumctr}% 837 | \else 838 | \noexpand#1{#2}% 839 | \fi}% 840 | 841 | \def\enit@refstar#1#2#3#4{% 842 | \def#2{\enit@refstar@i#2}% 843 | \def#3{\enit@refstar@i#3}} 844 | 845 | \def\enit@normlabel#1#2{% 846 | \begingroup 847 | \def\value{\enit@refstar@i\value}% 848 | \let\enit@elt\enit@refstar 849 | \enit@labellist 850 | \protected@xdef\enit@a{{#2}}% Added braces as \ref is in the 851 | \endgroup 852 | \expandafter\let#1\enit@a} % global scope. 853 | 854 | % Preliminary settings and default values 855 | % ======================================= 856 | 857 | \def\enit@prelist#1#2#3{% 858 | \let\enit@type#1% 859 | \def\enit@depth{#2}% 860 | \edef\enit@prevlabel{#3\romannumeral#2}% 861 | \advance#2\@ne} 862 | 863 | \def\enit@preset#1#2#3{% 864 | \enit@sepfrommarginfalse 865 | \enit@calcwidestfalse 866 | \let\enit@resuming\z@ 867 | \let\enit@series\relax 868 | \enit@boxmodetrue 869 | \def\enit@itemjoin{ }% 870 | \let\enit@itemjoin@s\relax 871 | \let\enit@afterlabel\nobreakspace 872 | \let\enit@before\@empty 873 | \let\enit@after\@empty 874 | \let\enit@format\@firstofone % and NOT empty 875 | \let\enit@ref\relax 876 | \labelindent\z@skip 877 | \ifnum\@listdepth=\@ne 878 | \enit@outerparindent\parindent 879 | \else 880 | \parindent\enit@outerparindent 881 | \fi 882 | \enit@setkeys{list}% 883 | \enit@setkeys{list\romannumeral\@listdepth}% 884 | \enit@setkeys{#1}% 885 | \enit@setkeys{#1\romannumeral#2}% 886 | \enit@setresume{#3}} 887 | 888 | % keyval "error" in enumitem-resume: all undefined keys (ie, all 889 | % except resume*) are ignored, but is treated like 890 | % resume*= 891 | 892 | \def\enitkv@err@a#1{% 893 | \@ifundefined{enit@resumekeys@series@\@tempa}{}% 894 | {\@nameuse{enitkv@enumitem-resume@resume*\expandafter}% 895 | \expandafter{\@tempa}}} 896 | 897 | % keyval "error" in the optional argument: all undefined keys are 898 | % passed to the keyval error, but is ignored (already 899 | % processed in enumitem-resume 900 | 901 | \def\enitkv@err@b#1{% 902 | \@ifundefined{enit@resumekeys@series@\@tempa}% 903 | {\enit@savekverr{#1}}% 904 | {}} 905 | 906 | % Process keys in optional argument: 907 | 908 | \def\enit@setresume#1{% 909 | \enit@shl{#1}% Returns enit@toks 910 | \edef\enit@savekeys{\the\enit@toks}% 911 | \let\enit@savekverr\enitkv@errx 912 | \let\enitkv@errx\enitkv@err@a 913 | \edef\enit@b{% 914 | \noexpand\enitkv@setkeys{enumitem-resume}{\the\enit@toks}}% 915 | \enit@b 916 | \let\enitkv@errx\enitkv@err@b 917 | \ifcase\enit@resuming\or\or % = 2 918 | \expandafter 919 | \enit@setkeys@i\enit@resumekeys,resume=\enit@series\@@ 920 | \or % = 3 921 | \expandafter 922 | \enit@setkeys@i\enit@resumekeys,resume\@@ 923 | \fi 924 | \expandafter\enit@setkeys@i\enit@savekeys\@@ 925 | \let\enitkv@errx\enit@savekverr} 926 | 927 | % +=============================+ 928 | % | LIST TYPES | 929 | % +=============================+ 930 | % 931 | % Displayed lists 932 | % =============== 933 | % #1 #2 implicit 934 | 935 | \def\enit@dylist{% 936 | \enit@align@right 937 | \list} 938 | 939 | \def\enit@endlist{% 940 | \enit@after 941 | \endlist 942 | \ifx\enit@series\relax\else % discards resume*, too 943 | \ifnum\enit@resuming=\@ne % ie, series= 944 | \enit@setresumekeys{series@\enit@series}\global\global 945 | \else % ie, resume=, resume*= (save count, but not keys) 946 | \enit@setresumekeys{series@\enit@series}\@gobblefour\global 947 | \fi 948 | \enit@afterlist 949 | \fi 950 | \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only) 951 | \enit@setresumekeys\@currenvir\@gobblefour\global 952 | \else 953 | \enit@setresumekeys\@currenvir\@empty\@empty 954 | \fi 955 | \aftergroup\enit@afterlist} 956 | 957 | % #1 = either \@currenvir or series@ 958 | % #2(keys) #3(counter) are \global, \@gobblefour or \@empty 959 | 960 | \def\enit@setresumekeys#1#2#3{% 961 | \enit@toks\expandafter{\enit@savekeys}% 962 | \xdef\enit@afterlist{% 963 | #2\def\enit@noexcs{enit@resumekeys@#1}{\the\enit@toks}% 964 | \ifnum\enit@type=\z@ % ie, enum 965 | #3\def\enit@noexcs{enit@resume@#1}{% 966 | \csname c@\@listctr\endcsname 967 | \the\csname c@\@listctr\endcsname}% 968 | \fi}} 969 | 970 | % Inline lists 971 | % ============ 972 | 973 | % Definition of \@trivlist inside inline lists. So, when 974 | % \@trivlist is found in any displayed list (including quote, 975 | % center, verbatim...) the default \@item is restored. 976 | 977 | \def\enit@intrivlist{% 978 | \enit@changed@itemfalse 979 | \let\@item\enit@outer@item 980 | \let\par\@@par 981 | \let\@trivlist\enit@outer@triv 982 | \@trivlist} 983 | 984 | % Keep track of \@item and \item changes 985 | 986 | \newif\ifenit@changed@item 987 | \enit@changed@itemfalse 988 | 989 | \newif\ifenit@changeditem 990 | \enit@changeditemfalse 991 | 992 | % List 993 | % ---- 994 | 995 | % Arguments, as before: 996 | % \enitdp@, , , 997 | % About @newlist, see @initem. 998 | 999 | \def\enit@inlist#1#2{% 1000 | \ifnum\@listdepth>\enit@listdepth\relax 1001 | \@toodeep 1002 | \else 1003 | \global\advance\@listdepth\@ne 1004 | \fi 1005 | \let\enit@align\@firstofone 1006 | \def\@itemlabel{#1}% 1007 | \@nmbrlistfalse 1008 | \ifenit@changed@item\else 1009 | \enit@changed@itemtrue 1010 | \let\enit@outer@triv\@trivlist 1011 | \let\@trivlist\enit@intrivlist 1012 | \@setpar\@empty 1013 | \let\enit@outer@item\@item 1014 | \fi 1015 | #2\relax 1016 | \global\@newlisttrue 1017 | \ifenit@boxmode 1018 | \ifenit@changeditem\else 1019 | \enit@changeditemtrue 1020 | \let\enit@outeritem\item 1021 | \fi 1022 | \let\@item\enit@boxitem 1023 | \else 1024 | \let\@item\enit@noboxitem 1025 | \ifx\enit@itemjoin@s\relax\else 1026 | \PackageWarning{enumitem}% 1027 | {itemjoin* discarded in mode unboxed\MessageBreak}% 1028 | \fi 1029 | \fi 1030 | \let\enit@calcleft\relax 1031 | \let\enit@afteritem\relax 1032 | \ifenit@boxmode 1033 | \global\setbox\enit@inbox\hbox\bgroup\color@begingroup 1034 | \let\item\enit@endinbox 1035 | \fi 1036 | \ignorespaces} 1037 | 1038 | \def\enit@endinlist{% 1039 | \ifenit@boxmode 1040 | \unskip 1041 | \xdef\enit@afteritem{% 1042 | \ifhmode\spacefactor\the\spacefactor\relax\fi}% 1043 | \color@endgroup 1044 | \egroup 1045 | \ifdim\wd\enit@inbox=\z@ 1046 | \enit@itemerror 1047 | \else 1048 | \ifenit@noinitem\else 1049 | \ifhmode\unskip\fi 1050 | \@ifundefined{enit@itemjoin@s}% 1051 | {\enit@itemjoin}% 1052 | {\enit@itemjoin@s}% 1053 | \fi 1054 | \unhbox\@labels 1055 | \enit@afterlabel 1056 | \unhbox\enit@inbox 1057 | \enit@afteritem 1058 | \fi 1059 | \else 1060 | \unskip 1061 | \if@newlist 1062 | \enit@itemerror 1063 | \fi 1064 | \fi 1065 | \enit@after 1066 | \global\advance\@listdepth\m@ne 1067 | \global\@inlabelfalse 1068 | \if@newlist 1069 | \global\@newlistfalse 1070 | \@noitemerr 1071 | \fi 1072 | \ifx\enit@series\relax\else % discards resume* list, too 1073 | \ifnum\enit@resuming=\@ne % ie, series 1074 | \enit@setresumekeys{series@\enit@series}\global\global 1075 | \else % ie, resume, resume* (save count, but not keys) 1076 | \enit@setresumekeys{series@\enit@series}\@gobblefour\global 1077 | \fi 1078 | \enit@afterlist 1079 | \fi 1080 | \ifnum\enit@resuming=\thr@@ % ie, resume* list (save count only) 1081 | \enit@setresumekeys\@currenvir\@gobblefour\global 1082 | \else 1083 | \enit@setresumekeys\@currenvir\@empty\@empty 1084 | \fi 1085 | \aftergroup\enit@afterlist} 1086 | 1087 | % \@item: unboxed 1088 | % --------------- 1089 | 1090 | \def\enit@noboxitem[#1]{% 1091 | \if@newlist 1092 | \leavevmode % ships pending labels out 1093 | \global\@newlistfalse 1094 | \else 1095 | \ifhmode 1096 | \unskip 1097 | \enit@itemjoin 1098 | \else 1099 | \noindent 1100 | \fi 1101 | \fi 1102 | \if@noitemarg 1103 | \@noitemargfalse 1104 | \if@nmbrlist 1105 | \refstepcounter{\@listctr}% after \unskip (hyperref) 1106 | \fi 1107 | \fi 1108 | \mbox{\makelabel{#1}}% 1109 | \enit@afterlabel 1110 | \ignorespaces} 1111 | 1112 | % \@item: boxed 1113 | % ------------ 1114 | % 1115 | % We don't want \item to be executed locally, because it sets a flag 1116 | % (and hyperref adds another flag, too). So, we redefine it inside 1117 | % the box to \enit@endinbox which ends the box and then use the actual 1118 | % (outer) \item. labels are stored in another box, to detect empty 1119 | % boxes, ie, misplaced \item's. Note the 2nd \item ends collecting 1120 | % the 1st item and ships it out, while the 3rd \item ends collecting 1121 | % the 2nd item, puts the itemjoin and then ships the 2nd item out. 1122 | % The flag enit@noinitem keeps track of that. 1123 | 1124 | \newif\ifenit@noinitem 1125 | 1126 | \def\enit@endinbox{% 1127 | \unskip 1128 | \xdef\enit@afteritem{% 1129 | \ifhmode\spacefactor\the\spacefactor\relax\fi}% 1130 | \color@endgroup 1131 | \egroup 1132 | \enit@outeritem} 1133 | 1134 | \def\enit@boxitem[#1]{% 1135 | \if@newlist 1136 | \global\@newlistfalse 1137 | \ifdim\wd\enit@inbox>\z@ 1138 | \enit@itemerror 1139 | \fi 1140 | \enit@noinitemtrue 1141 | \leavevmode % ships pending labels out 1142 | \else 1143 | \ifdim\wd\enit@inbox=\z@ 1144 | \enit@itemerror 1145 | \else 1146 | \ifenit@noinitem 1147 | \enit@noinitemfalse 1148 | \else 1149 | \ifhmode\unskip\fi 1150 | \enit@itemjoin 1151 | \fi 1152 | \unhbox\@labels 1153 | \enit@afterlabel 1154 | \unhbox\enit@inbox 1155 | \enit@afteritem 1156 | \fi 1157 | \fi 1158 | \if@noitemarg 1159 | \@noitemargfalse 1160 | \if@nmbrlist 1161 | \refstepcounter{\@listctr}% 1162 | \fi 1163 | \fi 1164 | \sbox\@labels{\makelabel{#1}}% 1165 | \let\enit@afteritem\relax 1166 | \setbox\enit@inbox\hbox\bgroup\color@begingroup 1167 | \let\item\enit@endinbox 1168 | \hskip1sp % in case the first thing is \label 1169 | \ignorespaces} 1170 | 1171 | % Pause item 1172 | % ---------- 1173 | % 1174 | % To do. 1175 | % 1176 | % The three types 1177 | % =============== 1178 | % 1179 | % enumerate and enumerate* 1180 | % ------------------------ 1181 | % 1182 | % The following has 4 arguments, which in enumerate are: 1183 | % \@enumdepth, enum, \thr@@, . 1184 | % In user defined environments they are: 1185 | % \enitdp@, , , 1186 | 1187 | \def\enit@enumerate{% 1188 | \let\enit@list\enit@dylist 1189 | \enit@enumerate@i} 1190 | 1191 | \@namedef{enit@enumerate*}{% 1192 | \let\enit@list\enit@inlist 1193 | \enit@enumerate@i} 1194 | 1195 | \def\enit@enumerate@i#1#2#3#4{% 1196 | \ifnum#1>#3\relax 1197 | \enit@toodeep 1198 | \else 1199 | \enit@prelist\z@{#1}{#2}% 1200 | \edef\@enumctr{#2\romannumeral#1}% 1201 | \expandafter 1202 | \enit@list 1203 | \csname label\@enumctr\endcsname 1204 | {\usecounter\@enumctr 1205 | \let\enit@calc\z@ 1206 | \def\makelabel##1{\enit@align{\enit@format{##1}}}% 1207 | \enit@preset{#2}{#1}{#4}% 1208 | \enit@normlabel\@itemlabel\@itemlabel 1209 | \enit@ref 1210 | \enit@calcleft 1211 | \enit@before}% 1212 | \fi} 1213 | 1214 | \let\enit@endenumerate\enit@endlist 1215 | \@namedef{enit@endenumerate*}{\enit@endinlist} 1216 | 1217 | % itemize and itemize* 1218 | % -------------------- 1219 | % 1220 | % The following has 4 arguments, which in itemize are: 1221 | % \@itemdepth, item, \thr@@, . 1222 | % In user defined environments they are: 1223 | % \enitdp@, , , 1224 | 1225 | \def\enit@itemize{% 1226 | \let\enit@list\enit@dylist 1227 | \enit@itemize@i} 1228 | 1229 | \@namedef{enit@itemize*}{% 1230 | \let\enit@list\enit@inlist 1231 | \enit@itemize@i} 1232 | 1233 | \def\enit@itemize@i#1#2#3#4{% 1234 | \ifnum#1>#3\relax 1235 | \enit@toodeep 1236 | \else 1237 | \enit@prelist\@ne{#1}{#2}% 1238 | \edef\@itemitem{label#2\romannumeral#1}% 1239 | \expandafter 1240 | \enit@list 1241 | \csname\@itemitem\endcsname 1242 | {\let\enit@calc\z@ 1243 | \def\makelabel##1{\enit@align{\enit@format{##1}}}% 1244 | \enit@preset{#2}{#1}{#4}% 1245 | \enit@calcleft 1246 | \enit@before}% 1247 | \fi} 1248 | 1249 | \let\enit@enditemize\enit@endlist 1250 | \@namedef{enit@enditemize*}{\enit@endinlist} 1251 | 1252 | % description and description* 1253 | % ---------------------------- 1254 | % 1255 | % Make sure \descriptionlabel exists: 1256 | 1257 | \providecommand*\descriptionlabel[1]{% 1258 | \hspace\labelsep 1259 | \normalfont\bfseries#1} 1260 | 1261 | \@namedef{enit@description*}{% 1262 | \let\enit@list\enit@inlist 1263 | \enit@description@i} 1264 | 1265 | \def\enit@description{% 1266 | \let\enit@list\enit@dylist 1267 | \enit@description@i} 1268 | 1269 | \def\enit@description@i#1#2#3#4{% 1270 | \ifnum#1>#3\relax 1271 | \enit@toodeep 1272 | \else 1273 | \enit@list{}% 1274 | {\let\enit@type\tw@ 1275 | \advance#1\@ne 1276 | \labelwidth\z@ 1277 | \enit@align@left 1278 | \let\makelabel\descriptionlabel 1279 | \enit@style@standard 1280 | \enit@preset{#2}{#1}{#4}% 1281 | \enit@calcleft 1282 | \let\enit@svlabel\makelabel 1283 | \def\makelabel##1{% 1284 | \labelsep\z@ 1285 | \ifenit@boxdesc 1286 | \enit@svlabel{\enit@align{\enit@format{##1}}}% 1287 | \else 1288 | \nobreak 1289 | \enit@svlabel{\enit@format{##1}}% 1290 | \aftergroup\enit@postlabel 1291 | \fi}% 1292 | \enit@before}% 1293 | \fi} 1294 | 1295 | \let\enit@enddescription\enit@endlist 1296 | \@namedef{enit@enddescription*}{\enit@endinlist} 1297 | 1298 | % trivlist 1299 | % ======== 1300 | 1301 | \def\enit@trivlist{% 1302 | \let\enit@type\tw@ 1303 | \parsep\parskip 1304 | \csname @list\romannumeral\the\@listdepth\endcsname 1305 | \@nmbrlistfalse 1306 | \enit@setkeys{trivlist}% 1307 | \enit@setkeys{trivlist\romannumeral\@listdepth}% 1308 | \@trivlist 1309 | \labelwidth\z@ 1310 | \leftmargin\z@ 1311 | \itemindent\z@ 1312 | \let\@itemlabel\@empty 1313 | \def\makelabel##1{##1}} 1314 | 1315 | % Description styles 1316 | % ================== 1317 | % 1318 | % the next definition is somewhat tricky because labels are boxed. 1319 | % That's fine when the label is just placed at the begining of a line 1320 | % of text, but when the box is placed without horizontal material, 1321 | % leading is killed. So, we need change somehow \box to \unhbox, but 1322 | % I don't want to modify \@item. The code below presumes \@item has 1323 | % not been changed and arguments gobble the part setting \@labels, 1324 | % which is replaced by a new one. 1325 | % 1326 | % The default value in description is itemindent=!, but some styles 1327 | % (those whose item text begin at a fixed place, ie, nextline, 1328 | % multiline and sameline) change it to labelwidth=!. 1329 | % 1330 | % We must be careful with the group and the whatsit added by color to 1331 | % boxes. Alignment is applied here and some adjustments in skips are 1332 | % necessary to get proper line breaks (including a \nobreak at the 1333 | % beginning of \enit@align, ie, after the first whatsit, see above). 1334 | % To "pass" the inner group added by color to the box, \enit@postlabel 1335 | % ckecks if the following is }. ie, \egroup -- if not, the box has 1336 | % not reached yet its end. 1337 | 1338 | \def\enit@postlabel{% 1339 | \@ifnextchar\egroup 1340 | {\aftergroup\enit@postlabel}% 1341 | {\enit@postlabel@i}} 1342 | 1343 | \def\enit@postlabel@i#1#2#3#4#5{% 1344 | \def\enit@lblpenalty{\penalty\z@\hskip\skip@}% 1345 | \ifenit@nextline 1346 | \ifdim\wd\@tempboxa>\labelwidth 1347 | \def\enit@lblpenalty{\newline\@nobreaktrue}% 1348 | \fi 1349 | \fi 1350 | \everypar{% 1351 | \@minipagefalse 1352 | \global\@newlistfalse 1353 | \if@inlabel 1354 | \global\@inlabelfalse 1355 | {\setbox\z@\lastbox 1356 | \ifvoid\z@ 1357 | \kern-\itemindent 1358 | \fi}% 1359 | \unhbox\@labels 1360 | \skip@\lastskip % Save last \labelsep 1361 | \unskip % Remove it 1362 | \enit@lblpenalty % Restore it, after penalty 1363 | \fi 1364 | \if@nobreak 1365 | \@nobreakfalse 1366 | \clubpenalty\@M 1367 | \else 1368 | \clubpenalty\@clubpenalty 1369 | \everypar{}% 1370 | \fi}% 1371 | \def\enit@a{#1#2#3#4}% 1372 | \def\enit@b{\global\setbox\@labels\hbox}% 1373 | \ifx\enit@a\enit@b\else 1374 | \enit@error{Non standard \string\item}% 1375 | {A class or a package has redefined \string\item\MessageBreak 1376 | and I do not know how to continue}% 1377 | \fi 1378 | \global\setbox\@labels\hbox{% 1379 | \unhbox\@labels 1380 | \hskip\itemindent 1381 | \hskip-\labelwidth 1382 | \hskip-\labelsep 1383 | \ifdim\wd\@tempboxa>\labelwidth 1384 | \enit@align{\unhbox\@tempboxa}\unskip % Removes (typically) \hfil 1385 | \else 1386 | \leavevmode\hbox to\labelwidth{\enit@align{\unhbox\@tempboxa}}% 1387 | \fi 1388 | \hskip\labelsep}} 1389 | 1390 | % +=============================+ 1391 | % | (RE)DEFINING LISTS | 1392 | % +=============================+ 1393 | % 1394 | % Set keys/values 1395 | % =============== 1396 | % Remember \romannumeral0 expands to nothing. 1397 | % #1 = list name, #2 = level, #3 = flag if star, #4 = keys/values 1398 | 1399 | \def\enit@saveset#1#2#3#4{% 1400 | \setcounter{enit@cnt}{#2}% 1401 | \ifcase#3% 1402 | \expandafter 1403 | \def\csname enit@@#1\romannumeral\c@enit@cnt\endcsname{#4}% 1404 | \or 1405 | \expandafter\let\expandafter\enit@b 1406 | \csname enit@@#1\romannumeral\c@enit@cnt\endcsname 1407 | \ifx\enit@b\relax 1408 | \let\enit@b\@empty 1409 | \fi 1410 | \expandafter\def 1411 | \csname enit@@#1\romannumeral\c@enit@cnt\expandafter\endcsname 1412 | \expandafter{\enit@b,#4}% 1413 | \fi} 1414 | 1415 | % To do: more robust tests (catch wrong names, but not easy) 1416 | 1417 | % Internally, LaTeX uses a short name for enumerate (enum) 1418 | % and itemize (item). To be consistent with this convention, 1419 | % a couple of macros provide a "translation". I'm not very 1420 | % happy with the current implementation. 1421 | 1422 | \def\enit@shortenumerate{enum} 1423 | \def\enit@shortitemize{item} 1424 | 1425 | \newcommand\setlist{% 1426 | \@ifstar{\enit@setlist\@ne}{\enit@setlist\z@}} 1427 | 1428 | \def\enit@setlist#1{% 1429 | \@ifnextchar[{\enit@setlist@x#1}{\enit@setlist@i#1\@empty}} 1430 | 1431 | % Let's accept \setlist[]*{}, too, because an error in <=3.5.1 1432 | 1433 | \def\enit@setlist@x#1[#2]{% 1434 | \@ifstar{\enit@setlist@i\@ne{#2}}{\enit@setlist@i#1{#2}}} 1435 | 1436 | % #1 list names/levels, #2 keys/values 1437 | 1438 | % #1 star flag, #2 list names/levels, #3 keys/values 1439 | 1440 | \def\enit@setlist@i#1#2#3{% 1441 | \let\enit@eltnames\relax 1442 | \let\enit@b\@empty 1443 | \let\enit@eltlevels\relax 1444 | \let\enit@c\@empty 1445 | \protected@edef\enit@a{#2}% 1446 | \@for\enit@a:=\enit@a\do{% the 2nd enit@a is first expanded 1447 | \@ifundefined{enitdp@\enit@meaning\enit@a}% 1448 | {\edef\enit@c{\enit@c\enit@eltlevels{\enit@a}}}% 1449 | {\@ifundefined{enit@short\enit@meaning\enit@a}% 1450 | \@empty 1451 | {\edef\enit@a{\@nameuse{enit@short\enit@a}}}% 1452 | \edef\enit@b{\enit@b\enit@eltnames{\enit@a}}}}% 1453 | \ifx\enit@b\@empty 1454 | \def\enit@b{\enit@eltnames{list}}% 1455 | \fi 1456 | \ifx\enit@c\@empty 1457 | \def\enit@c{\enit@eltlevels{0}}% 1458 | \fi 1459 | \def\enit@eltnames##1{% 1460 | \def\enit@a{##1}% 1461 | \enit@c}% 1462 | \def\enit@eltlevels##1{% 1463 | \enit@saveset\enit@a{##1}#1{#3}}% 1464 | \enit@b}% 1465 | 1466 | % Deprecated: 1467 | 1468 | \newcommand\setdisplayed[1][0]{\setlist[trivlist,#1]} 1469 | \let\enitdp@trivlist\@empty % dummy, let know it exists 1470 | \newcommand\setenumerate[1][0]{\setlist[enumerate,#1]} 1471 | \newcommand\setitemize[1][0]{\setlist[itemize,#1]} 1472 | \newcommand\setdescription[1][0]{\setlist[description,#1]} 1473 | 1474 | % New lists 1475 | % ========= 1476 | 1477 | % When defining a list, \label... and counters must be defined 1478 | % for each level, too: 1479 | 1480 | \def\enit@xset@itemize{% 1481 | \@namedef{label\enit@c\romannumeral\count@}{% 1482 | \enit@error{Undefined label}% 1483 | {You have defined a list, but labels have 1484 | not been setup.\MessageBreak 1485 | You can set the label field with \string\setlist.}}} 1486 | \@namedef{enit@xset@itemize*}{\enit@xset@itemize} 1487 | 1488 | \def\enit@xset@enumerate{% 1489 | \enit@xset@itemize 1490 | \@ifundefined{c@\enit@c\romannumeral\count@}% 1491 | {\@definecounter{\enit@c\romannumeral\count@}}{}} 1492 | \@namedef{enit@xset@enumerate*}{\enit@xset@enumerate} 1493 | 1494 | \let\enit@xset@description\@empty 1495 | \@namedef{enit@xset@description*}{\enit@xset@description} 1496 | 1497 | \newcommand\newlist{\enit@newlist\newenvironment} 1498 | \newcommand\renewlist{\enit@newlist\renewenvironment} 1499 | 1500 | % , , , 1501 | 1502 | \def\enit@newlist#1#2#3#4{% 1503 | \@ifundefined{enit@xset@#3}% 1504 | {\enit@error{Unknown list type `#3')}% 1505 | {Valid types are: 1506 | enumerate, itemize, description,\messageBreak 1507 | enumerate*, itemize*, description*}}% 1508 | {}% 1509 | \setcounter{enit@cnt}{#4}% 1510 | \count@\@ne 1511 | \@ifundefined{enit@short#2}% 1512 | {\def\enit@c{#2}}% 1513 | {\edef\enit@c{\csname enit@short#2\endcsname}}% 1514 | \loop 1515 | \@nameuse{enit@xset@#3}% Uses \enit@c 1516 | \ifnum\count@<\c@enit@cnt 1517 | \advance\count@\@ne 1518 | \repeat 1519 | \@ifundefined{enitdp@#2}% 1520 | {\expandafter\newcount\csname enitdp@#2\endcsname}{}% 1521 | \csname enitdp@#2\endcsname\z@ 1522 | \advance\c@enit@cnt\m@ne 1523 | \edef\enit@a{% 1524 | \noexpand#1{#2}[1][]% 1525 | {\enit@noexcs{enit@#3}% 1526 | \enit@noexcs{enitdp@#2}% 1527 | {\enit@c}% 1528 | {\the\c@enit@cnt}% 1529 | {####1}}% 1530 | {\enit@noexcs{enit@end#3}}}% 1531 | \enit@a} 1532 | 1533 | % Changing the default nesting limit 1534 | % ---------------------------------- 1535 | 1536 | \newcommand\setlistdepth{\def\enit@listdepth} 1537 | \setlistdepth{5} 1538 | 1539 | % +=============================+ 1540 | % | PACKAGE OPTIONS | 1541 | % +=============================+ 1542 | 1543 | \newif\ifenit@loadonly 1544 | 1545 | \DeclareOption{ignoredisplayed}{\let\enit@trivlist\trivlist} 1546 | \DeclareOption{loadonly}{\enit@loadonlytrue} 1547 | \DeclareOption{shortlabels} 1548 | {\def\enit@shl#1{% 1549 | \ifnum\enit@type=\tw@ 1550 | \enit@toks{#1}% 1551 | \else 1552 | \def\enit@c{#1}% 1553 | \enit@first#1,\@nil\@@nil % Returns enit@toks 1554 | \fi}} 1555 | \DeclareOption{inline} 1556 | {\newenvironment{enumerate*}[1][]% 1557 | {\@nameuse{enit@enumerate*}\enitdp@enumerate{enum}\thr@@{#1}} 1558 | {\@nameuse{enit@endenumerate*}} 1559 | \newenvironment{itemize*}[1][]% 1560 | {\@nameuse{enit@itemize*}\enitdp@itemize{item}\thr@@{#1}} 1561 | {\@nameuse{enit@enditemize*}} 1562 | \newenvironment{description*}[1][]% 1563 | {\@nameuse{enit@description*}\enitdp@description{description}\@M{#1}} 1564 | {\@nameuse{enit@enddescription*}}} 1565 | 1566 | \let\enit@shl\enit@toks 1567 | 1568 | \ProcessOptions 1569 | 1570 | \let\trivlist\enit@trivlist 1571 | 1572 | % If there is no loadonly, redefine the basic lists: 1573 | 1574 | \ifenit@loadonly\else 1575 | 1576 | \let\enitdp@enumerate\@enumdepth 1577 | \renewenvironment{enumerate}[1][] 1578 | {\enit@enumerate\enitdp@enumerate{enum}\thr@@{#1}} 1579 | {\enit@endenumerate} 1580 | 1581 | \let\enitdp@itemize\@itemdepth 1582 | \renewenvironment{itemize}[1][] 1583 | {\enit@itemize\enitdp@itemize{item}\thr@@{#1}} 1584 | {\enit@enditemize} 1585 | 1586 | \newcount\enitdp@description 1587 | \renewenvironment{description}[1][] 1588 | {\enit@description\enitdp@description{description}\@M{#1}} 1589 | {\enit@enddescription} 1590 | 1591 | \fi 1592 | 1593 | \endinput 1594 | -------------------------------------------------------------------------------- /CV/lastpage.sty: -------------------------------------------------------------------------------- 1 | %% 2 | %% This is file `lastpage.sty', 3 | %% generated with the docstrip utility. 4 | %% 5 | %% The original source files were: 6 | %% 7 | %% lastpage.dtx (with options: `package') 8 | %% 9 | %% IMPORTANT NOTICE: 10 | %% This is part of a set of tools (or better yet, experiments) 11 | %% written by Jeff Goldberg (J.Goldberg@Cranfield.ac.uk) 12 | %% The usual disclaimers apply: 13 | %% If it doesn't work right that's your problem. 14 | %% It is released under the terms of the 15 | %% General Public License Agreement (version 2) 16 | \def\filename{lastpage} 17 | \def\fileversion{v0.1b} 18 | \def\filedate{1994/06/25} 19 | \def\docdate {1994/07/20} 20 | 21 | %% \CharacterTable 22 | %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z 23 | %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z 24 | %% Digits \0\1\2\3\4\5\6\7\8\9 25 | %% Exclamation \! Double quote \" Hash (number) \# 26 | %% Dollar \$ Percent \% Ampersand \& 27 | %% Acute accent \' Left paren \( Right paren \) 28 | %% Asterisk \* Plus \+ Comma \, 29 | %% Minus \- Point \. Solidus \/ 30 | %% Colon \: Semicolon \; Less than \< 31 | %% Equals \= Greater than \> Question mark \? 32 | %% Commercial at \@ Left bracket \[ Backslash \\ 33 | %% Right bracket \] Circumflex \^ Underscore \_ 34 | %% Grave accent \` Left brace \{ Vertical bar \| 35 | %% Right brace \} Tilde \~} 36 | %% 37 | %% Allow for things like |page \thepage\ of \pageref{LastPage}| to 38 | %% get `page 5 of 23' 39 | \NeedsTeXFormat{LaTeX2e}[1994/06/01] 40 | \ProvidesPackage{lastpage}[\filedate\space\fileversion\space 41 | LaTeX2e package for refs to last page number (JPG)] 42 | \def\lastpage@putlabel{\addtocounter{page}{-1}% 43 | \immediate\write\@auxout{\string 44 | \newlabel{LastPage}{{}{\thepage}}}% 45 | \addtocounter{page}{1}} 46 | \AtEndDocument{% 47 | \message{AED: lastpage setting LastPage}% 48 | \clearpage\lastpage@putlabel}% 49 | \endinput 50 | %% 51 | %% End of file `lastpage.sty'. 52 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013, Jake Vanderplas 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 9 | 10 | 11 | ---------- 12 | 13 | BSD 2-clause license; adapted from http://opensource.org/licenses/BSD-2-Clause 14 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | BASEDIR=$(CURDIR) 2 | INPUTDIR=$(BASEDIR)/content 3 | OUTPUTDIR=$(BASEDIR)/deploy_production 4 | 5 | GITHUB_PAGES_REMOTE=git@github.com:vanderplas/vanderplas.github.io.git 6 | GITHUB_PAGES_BRANCH=master 7 | GIT_COMMIT_HASH = $(shell git rev-parse HEAD) 8 | 9 | 10 | all: gen 11 | 12 | CV: content/media/pdfs/CV.pdf 13 | 14 | content/media/pdfs/CV.pdf: CV/CV.tex 15 | cd CV; make 16 | mkdir -p content/media/pdfs/ 17 | cp CV/CV.pdf content/media/pdfs/ 18 | 19 | gen: CV 20 | hyde gen 21 | 22 | serve: clean gen 23 | hyde serve 24 | 25 | clean: 26 | rm -rf deploy 27 | 28 | gen-production: clean 29 | hyde gen -c production.yaml 30 | 31 | publish: CV gen-production 32 | 33 | 34 | publish-to-github: publish 35 | ghp-import -n -m "publish-to-github from $(GIT_COMMIT_HASH)" -b blog-build $(OUTPUTDIR) -c vanderplas.com 36 | git push $(GITHUB_PAGES_REMOTE) blog-build:$(GITHUB_PAGES_BRANCH) 37 | 38 | 39 | publish-to-github-force: publish 40 | ghp-import -n -m "publish-to-github-force from $(GIT_COMMIT_HASH)" -b blog-build $(OUTPUTDIR) -c vanderplas.com 41 | git push -f $(GITHUB_PAGES_REMOTE) blog-build:$(GITHUB_PAGES_BRANCH) 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | My Personal Web Page, built with [Hyde](http://hyde.github.io/) 2 | 3 | See the rendered version at http://www.astro.washington.edu/users/vanderplas 4 | 5 | Building 6 | ======== 7 | Requires python 2.7, alon with hyde and ghp-import: 8 | 9 | pip install hyde ghp-import 10 | 11 | Also pdflatex (for CV to be auto-generated) 12 | 13 | Generate version for local development: 14 | 15 | make gen 16 | 17 | Preview local version 18 | (this is previewable in the browser at localhost:8080 -- Kill with ctrl-C) 19 | 20 | make serve 21 | 22 | Generate site for production: 23 | 24 | make gen-production 25 | 26 | Publish site to github pages 27 | 28 | make publish-to-github 29 | 30 | License 31 | ======= 32 | This work is under a [BSD 2-clause license](http://opensource.org/licenses/BSD-2-Clause) 33 | 34 | -------------------------------------------------------------------------------- /content/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | extends: minimal.j2 3 | default_block: main 4 | title: Jake VanderPlas 5 | description: Home page of Jake VanderPlas 6 | --- 7 |

8 | 10 |
Dose Meadows, Olympic National Park

11 | 12 |

I'm currently a software engineer at Google Research in Seattle, 13 | and developer on a number of open source Python projects.

14 | -------------------------------------------------------------------------------- /content/media/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/apple-touch-icon.png -------------------------------------------------------------------------------- /content/media/css/site.css: -------------------------------------------------------------------------------- 1 | * { 2 | vertical-align: baseline; 3 | font-weight: inherit; 4 | font-family: inherit; 5 | font-style: inherit; 6 | text-decoration:inherit; 7 | font-size: 100%; 8 | padding: 0; 9 | border: 0; 10 | margin: 0; 11 | } 12 | 13 | article,aside,details,figcaption,figure, 14 | footer,header,hgroup,menu,nav,section { 15 | display:block; 16 | } 17 | 18 | table { 19 | border-collapse: collapse; 20 | } 21 | 22 | :focus { 23 | outline: 0; 24 | } 25 | 26 | ::-moz-focus-inner { 27 | border: 0; 28 | } 29 | 30 | /* clearfix */ 31 | .clear:after { 32 | content: "."; 33 | display: block; 34 | clear: both; 35 | visibility: hidden; 36 | line-height: 0; 37 | height: 0; 38 | } 39 | 40 | .clear { 41 | display: block; 42 | } 43 | 44 | 45 | * html .clear { 46 | height: 1%; 47 | } 48 | 49 | a { 50 | color: #37e; 51 | text-decoration: underline; 52 | text-shadow: 0px 2px 0px #fff; 53 | } 54 | 55 | a:hover{ 56 | color: #222; 57 | } 58 | 59 | body{ 60 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 61 | background-color: #efefef; 62 | padding: 0; 63 | margin: 0; 64 | text-shadow: 0px 2px 0px #efefef; 65 | } 66 | 67 | #container{ 68 | background-color: #eaeaea; 69 | width: 640px; 70 | margin: 0 auto; 71 | padding: 12px; 72 | -moz-box-shadow: 0px 4px 12px #ccc; /* FF3.5+ */ 73 | -webkit-box-shadow: 0px 4px 12px #ccc; /* Saf3.0+, Chrome */ 74 | box-shadow: 0px 4px 12px #ccc; /* Opera 10.5, IE 9.0 */ 75 | filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc'); /* IE6,IE7 */ 76 | -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc')"; /* IE8 */ 77 | } 78 | 79 | footer{ 80 | font-size: 10px; 81 | text-align: center; 82 | margin-top: 24px; 83 | text-shadow: 0px 2px 0px #fff; 84 | } 85 | 86 | /* Button styles from the awesome: http://www.webdesignerwall.com/demo/css-buttons.html */ 87 | 88 | .button { 89 | display: inline-block; 90 | zoom: 1; /* zoom and *display = ie7 hack for display:inline-block */ 91 | *display: inline; 92 | vertical-align: baseline; 93 | margin: 0 2px; 94 | outline: none; 95 | cursor: pointer; 96 | text-align: center; 97 | text-decoration: none; 98 | font: 14px/100% Arial, Helvetica, sans-serif; 99 | padding: .5em 2em .55em; 100 | text-shadow: 0 1px 1px rgba(0,0,0,.3); 101 | -webkit-border-radius: .5em; 102 | -moz-border-radius: .5em; 103 | border-radius: .5em; 104 | -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2); 105 | -moz-box-shadow: 0 1px 2px rgba(0,0,0,.2); 106 | box-shadow: 0 1px 2px rgba(0,0,0,.2); 107 | } 108 | .button:hover { 109 | text-decoration: none; 110 | } 111 | .button:active { 112 | position: relative; 113 | top: 1px; 114 | } 115 | 116 | .bigrounded { 117 | -webkit-border-radius: 2em; 118 | -moz-border-radius: 2em; 119 | border-radius: 2em; 120 | } 121 | .medium { 122 | font-size: 12px; 123 | padding: .4em 1.5em .42em; 124 | } 125 | .small { 126 | font-size: 11px; 127 | padding: .2em 1em .275em; 128 | } 129 | 130 | 131 | /* white */ 132 | .white { 133 | color: #606060; 134 | border: solid 1px #b7b7b7; 135 | background: #fff; 136 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed)); 137 | background: -moz-linear-gradient(top, #fff, #ededed); 138 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed'); 139 | } 140 | .white:hover { 141 | background: #ededed; 142 | background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc)); 143 | background: -moz-linear-gradient(top, #fff, #dcdcdc); 144 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc'); 145 | } 146 | .white:active { 147 | color: #999; 148 | background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff)); 149 | background: -moz-linear-gradient(top, #ededed, #fff); 150 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff'); 151 | } 152 | 153 | .banner{ 154 | border-bottom: 12px solid #222; 155 | padding: 0 12px; 156 | position: relative; 157 | } 158 | 159 | .banner h1{ 160 | font-weight: 100; 161 | font-size: 32px; 162 | line-height: 48px; 163 | } 164 | 165 | 166 | .banner h3{ 167 | color: #666; 168 | font-weight: normal; 169 | font-size: 16px; 170 | line-height: 24px; 171 | margin-bottom: 12px; 172 | } 173 | 174 | .banner nav{ 175 | position: absolute; 176 | right: 0; 177 | bottom: 0; 178 | } 179 | 180 | .banner nav li{ 181 | list-style-type: none; 182 | float: left; 183 | } 184 | 185 | .banner nav li a.button{ 186 | margin:0; 187 | -webkit-border-bottom-left-radius: 0; 188 | -webkit-border-bottom-right-radius: 0; 189 | -moz-border-radius-bottomleft: 0; 190 | -moz-border-radius-bottomright: 0; 191 | border-bottom-left-radius: 0; 192 | border-bottom-right-radius: 0; 193 | } 194 | 195 | .banner nav li a.button:hover{ 196 | color: #000; 197 | } 198 | .banner nav li a.button.active{ 199 | color: #d7d7d7; 200 | border: solid 1px #333; 201 | background: #333; 202 | background: -webkit-gradient(linear, left top, left bottom, from(#666), to(#000)); 203 | background: -moz-linear-gradient(top, #666, #000); 204 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#000000'); 205 | } 206 | 207 | .blog_excerpt{ 208 | padding-bottom: 24px; 209 | } 210 | 211 | .blog_excerpt .post time{ 212 | float: none; 213 | clear: left; 214 | } 215 | 216 | .blog_excerpt .button{ 217 | float: right; 218 | } 219 | 220 | .blog_excerpt h3, 221 | h1.title{ 222 | font-size: 24px; 223 | line-height: 36px; 224 | border-bottom: 1px solid #ccc; 225 | } 226 | 227 | .blog_excerpt h3{ 228 | margin-bottom: 24px; 229 | } 230 | 231 | section.content{ 232 | padding: 12px; 233 | } 234 | 235 | /* listing */ 236 | 237 | .listing{ 238 | margin-top: 24px; 239 | } 240 | 241 | .listing img{ 242 | width: 120px; 243 | height: 120px; 244 | } 245 | 246 | .listing li{ 247 | background-color: #ededed; 248 | list-style-type: none; 249 | float: left; 250 | width: 272px; 251 | margin-right: 24px; 252 | margin-bottom: 24px; 253 | padding: 12px; 254 | -moz-box-shadow: 0px 4px 12px #ccc; /* FF3.5+ */ 255 | -webkit-box-shadow: 0px 4px 12px #ccc; /* Saf3.0+, Chrome */ 256 | box-shadow: 0px 4px 12px #ccc; /* Opera 10.5, IE 9.0 */ 257 | filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc'); /* IE6,IE7 */ 258 | -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc')"; /* IE8 */ 259 | 260 | } 261 | 262 | .listing li:nth-child(2){ 263 | margin-right: 0; 264 | } 265 | 266 | .listing li:nth-child(3){ 267 | clear: left; 268 | } 269 | 270 | .listing li p{ 271 | font-size: 10px; 272 | line-height: 12px; 273 | margin-bottom: 12px; 274 | } 275 | 276 | 277 | .listing h3{ 278 | border-bottom: 1px solid #ccc; 279 | font-size: 12px; 280 | line-height: 18px; 281 | margin-bottom: 6px; 282 | } 283 | 284 | .listing time{ 285 | display:block; 286 | border-top: 1px solid #ccc; 287 | padding-top: 4px; 288 | font-size: 10px; 289 | } 290 | 291 | /* Content */ 292 | 293 | article.post p{ 294 | font-size: 12px; 295 | line-height: 24px; 296 | margin: 6px 0; 297 | } 298 | 299 | article.post img{ 300 | display: block; 301 | margin-bottom: 24px; 302 | } 303 | 304 | .post time{ 305 | font-size: 12px; 306 | color: #999; 307 | float:left; 308 | margin-top: 6px; 309 | } 310 | 311 | ul.tags{ 312 | margin-bottom: 24px; 313 | text-align: right; 314 | } 315 | 316 | ul.tags li{ 317 | list-style-type: none; 318 | display: inline; 319 | } 320 | 321 | ul.tags li a{ 322 | color: #999; 323 | text-decoration: none; 324 | } 325 | 326 | h1.tag:before, 327 | ul.tags li a:before{ 328 | content: '\00AB'; 329 | } 330 | 331 | h1.tag:after, 332 | ul.tags li a:after{ 333 | content: '\00BB'; 334 | } 335 | 336 | ul.tags li a:hover{ 337 | color: #222; 338 | } 339 | 340 | h1 a, h2 a, h3 a{ 341 | text-decoration: none; 342 | } 343 | 344 | nav.post_nav{ 345 | background-color: #efefef; 346 | position: fixed; 347 | width: 124px; 348 | margin-left: -186px; 349 | font-size: 12px; 350 | padding: 12px; 351 | padding-right: 24px; 352 | -moz-box-shadow: 0px 2px 4px #ccc; /* FF3.5+ */ 353 | -webkit-box-shadow: 0px 2px 4px #ccc; /* Saf3.0+, Chrome */ 354 | box-shadow: 0px 2px 4px #ccc; /* Opera 10.5, IE 9.0 */ 355 | filter: progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc'); /* IE6,IE7 */ 356 | -ms-filter: "progid:DXImageTransform.Microsoft.dropshadow(OffX=12px, OffY=12px, Color='#ccc')"; /* IE8 */ 357 | 358 | } 359 | 360 | a.backlink{ 361 | display:block; 362 | line-height: 24px; 363 | margin-bottom: 12px; 364 | } 365 | 366 | a.backlink:before{ 367 | content: '\2190'; 368 | } 369 | 370 | a.prev:before{ 371 | content: '\00AB'; 372 | } 373 | 374 | a.next:after{ 375 | content: '\00BB'; 376 | } 377 | 378 | a.prev{ 379 | margin-right: 12px; 380 | } 381 | 382 | a.prev, 383 | a.next{ 384 | display: block; 385 | float: left; 386 | margin-bottom: 12px; 387 | } 388 | 389 | a.next{ float: right }; 390 | 391 | a.backlink:hover, a.prev:hover, a.next:hover{ 392 | color: #222; 393 | } 394 | 395 | .post_nav a.disabled{ 396 | color: #ccc; 397 | } 398 | 399 | .post_nav a{ 400 | color: #666; 401 | text-decoration: none; 402 | text-shadow: 0px 2px 0px #fff; 403 | } 404 | 405 | .post_nav div{ 406 | display: block; 407 | float: left; 408 | width: 58px; 409 | overflow: hidden; 410 | margin-left: 4px; 411 | } 412 | 413 | #facebook_like{ 414 | margin-top: 1px; 415 | } 416 | 417 | .archives ul.posts{ 418 | margin-top: 24px; 419 | } 420 | 421 | .archives li.post{ 422 | list-style-type: none; 423 | border-bottom: 1px dotted #ccc; 424 | padding: 12px 0; 425 | 426 | } 427 | 428 | .archives li.post time{ 429 | color: #999; 430 | text-shadow: 0px 2px 0px #fff; 431 | margin-right: 24px; 432 | display:block; 433 | float: left; 434 | width: 120px; 435 | } 436 | 437 | .archives li.post a{ 438 | float: left; 439 | } 440 | 441 | .archives ul.tags{ 442 | float: right; 443 | margin-bottom:0; 444 | } 445 | 446 | 447 | .codebox { 448 | margin-top: 8px; 449 | margin-bottom: 12px; 450 | } 451 | .code { 452 | position: relative; 453 | -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); 454 | -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); 455 | -o-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); 456 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5); 457 | background-color: #F0F3F3; 458 | } 459 | .code figcaption { 460 | font-size: 10px; 461 | position: absolute; 462 | bottom: 3px; 463 | right: 12px; 464 | color: rgba(0, 0, 0, 0.5); 465 | } 466 | .highlight pre { 467 | font-size: 12px; 468 | padding: 16px 12px 12px; 469 | line-height: 24px; 470 | margin-bottom: 8px; 471 | } 472 | -------------------------------------------------------------------------------- /content/media/css/syntax.css: -------------------------------------------------------------------------------- 1 | .c, .cm { color: #998; font-style: italic } /* Comments */ 2 | .err { color: #a61717; background-color: #e3d2d2 } /* Error */ 3 | .k { font-weight: bold } /* Keyword */ 4 | .o { font-weight: bold } /* Operator */ 5 | .cp { color: #999; font-weight: bold } /* Comment.Preproc */ 6 | .c1 { color: #998; font-style: italic } /* Comment.Single */ 7 | .cs { color: #999; font-weight: bold; font-style: italic } /* Comment.Special */ 8 | .gd { color: #000; background-color: #ffdddd } /* Generic.Deleted */ 9 | .gd .x { color: #000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ 10 | .ge { font-style: italic } /* Generic.Emph */ 11 | .gr { color: #a00 } /* Generic.Error */ 12 | .gh { color: #999 } /* Generic.Heading */ 13 | .gi { color: #000; background-color: #ddffdd } /* Generic.Inserted */ 14 | .gi .x { color: #000; background-color: #aaffaa } /* Generic.Inserted.Specific */ 15 | .go { color: #888 } /* Generic.Output */ 16 | .gp { color: #555 } /* Generic.Prompt */ 17 | .gs { font-weight: bold } /* Generic.Strong */ 18 | .gu { color: #aaaaaa } /* Generic.Subheading */ 19 | .gt { color: #a00 } /* Generic.Traceback */ 20 | .kc { font-weight: bold } /* Keyword.Constant */ 21 | .kd { font-weight: bold } /* Keyword.Declaration */ 22 | .kp { font-weight: bold } /* Keyword.Pseudo */ 23 | .kr { font-weight: bold } /* Keyword.Reserved */ 24 | .kt { color: #445588; font-weight: bold } /* Keyword.Type */ 25 | .m { color: #099 } /* Literal.Number */ 26 | .s { color: #d14 } /* Literal.String */ 27 | .na { color: #008080 } /* Name.Attribute */ 28 | .nb { color: #0086B3 } /* Name.Builtin */ 29 | .nc { color: #445588; font-weight: bold } /* Name.Class */ 30 | .no { color: #008080 } /* Name.Constant */ 31 | .ni { color: #800080 } /* Name.Entity */ 32 | .ne { color: #900; font-weight: bold } /* Name.Exception */ 33 | .nf { color: #900; font-weight: bold } /* Name.Function */ 34 | .nn { color: #555 } /* Name.Namespace */ 35 | .nt { color: #000080 } /* Name.Tag */ 36 | .nv { color: #008080 } /* Name.Variable */ 37 | .ow { font-weight: bold } /* Operator.Word */ 38 | .w { color: #bbb } /* Text.Whitespace */ 39 | .mf { color: #099 } /* Literal.Number.Float */ 40 | .mh { color: #099 } /* Literal.Number.Hex */ 41 | .mi { color: #099 } /* Literal.Number.Integer */ 42 | .mo { color: #099 } /* Literal.Number.Oct */ 43 | .sb { color: #d14 } /* Literal.String.Backtick */ 44 | .sc { color: #d14 } /* Literal.String.Char */ 45 | .sd { color: #d14 } /* Literal.String.Doc */ 46 | .s2 { color: #d14 } /* Literal.String.Double */ 47 | .se { color: #d14 } /* Literal.String.Escape */ 48 | .sh { color: #d14 } /* Literal.String.Heredoc */ 49 | .si { color: #d14 } /* Literal.String.Interpol */ 50 | .sx { color: #d14 } /* Literal.String.Other */ 51 | .sr { color: #009926 } /* Literal.String.Regex */ 52 | .s1 { color: #d14 } /* Literal.String.Single */ 53 | .ss { color: #990073 } /* Literal.String.Symbol */ 54 | .bp { color: #999 } /* Name.Builtin.Pseudo */ 55 | .vc { color: #008080 } /* Name.Variable.Class */ 56 | .vg { color: #008080 } /* Name.Variable.Global */ 57 | .vi { color: #008080 } /* Name.Variable.Instance */ 58 | .il { color: #099 } /* Literal.Number.Integer.Long */ 59 | 60 | -------------------------------------------------------------------------------- /content/media/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/favicon.ico -------------------------------------------------------------------------------- /content/media/images/dosewallips_meadows.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/dosewallips_meadows.jpg -------------------------------------------------------------------------------- /content/media/images/jake.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/jake.jpg -------------------------------------------------------------------------------- /content/media/images/jake2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/jake2.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-1-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-1-large.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-1-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-1-medium.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-1-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-1-thumb.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-2-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-2-large.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-2-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-2-medium.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-2-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-2-thumb.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-3-large.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-3-large.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-3-medium.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-3-medium.jpg -------------------------------------------------------------------------------- /content/media/images/vanderplas-3-thumb.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jakevdp/website/5b75afb3e697dc1b74fb1882dfc9eba15efc642d/content/media/images/vanderplas-3-thumb.jpg -------------------------------------------------------------------------------- /content/media/js/libs/dd_belatedpng.js: -------------------------------------------------------------------------------- 1 | /** 2 | * DD_belatedPNG: Adds IE6 support: PNG images for CSS background-image and HTML . 3 | * Author: Drew Diller 4 | * Email: drew.diller@gmail.com 5 | * URL: http://www.dillerdesign.com/experiment/DD_belatedPNG/ 6 | * Version: 0.0.8a 7 | * Licensed under the MIT License: http://dillerdesign.com/experiment/DD_belatedPNG/#license 8 | * 9 | * Example usage: 10 | * DD_belatedPNG.fix('.png_bg'); // argument is a CSS selector 11 | * DD_belatedPNG.fixPng( someNode ); // argument is an HTMLDomElement 12 | **/ 13 | var DD_belatedPNG={ns:"DD_belatedPNG",imgSize:{},delay:10,nodesFixed:0,createVmlNameSpace:function(){if(document.namespaces&&!document.namespaces[this.ns]){document.namespaces.add(this.ns,"urn:schemas-microsoft-com:vml")}},createVmlStyleSheet:function(){var b,a;b=document.createElement("style");b.setAttribute("media","screen");document.documentElement.firstChild.insertBefore(b,document.documentElement.firstChild.firstChild);if(b.styleSheet){b=b.styleSheet;b.addRule(this.ns+"\\:*","{behavior:url(#default#VML)}");b.addRule(this.ns+"\\:shape","position:absolute;");b.addRule("img."+this.ns+"_sizeFinder","behavior:none; border:none; position:absolute; z-index:-1; top:-10000px; visibility:hidden;");this.screenStyleSheet=b;a=document.createElement("style");a.setAttribute("media","print");document.documentElement.firstChild.insertBefore(a,document.documentElement.firstChild.firstChild);a=a.styleSheet;a.addRule(this.ns+"\\:*","{display: none !important;}");a.addRule("img."+this.ns+"_sizeFinder","{display: none !important;}")}},readPropertyChange:function(){var b,c,a;b=event.srcElement;if(!b.vmlInitiated){return}if(event.propertyName.search("background")!=-1||event.propertyName.search("border")!=-1){DD_belatedPNG.applyVML(b)}if(event.propertyName=="style.display"){c=(b.currentStyle.display=="none")?"none":"block";for(a in b.vml){if(b.vml.hasOwnProperty(a)){b.vml[a].shape.style.display=c}}}if(event.propertyName.search("filter")!=-1){DD_belatedPNG.vmlOpacity(b)}},vmlOpacity:function(b){if(b.currentStyle.filter.search("lpha")!=-1){var a=b.currentStyle.filter;a=parseInt(a.substring(a.lastIndexOf("=")+1,a.lastIndexOf(")")),10)/100;b.vml.color.shape.style.filter=b.currentStyle.filter;b.vml.image.fill.opacity=a}},handlePseudoHover:function(a){setTimeout(function(){DD_belatedPNG.applyVML(a)},1)},fix:function(a){if(this.screenStyleSheet){var c,b;c=a.split(",");for(b=0;bn.H){i.B=n.H}d.vml.image.shape.style.clip="rect("+i.T+"px "+(i.R+a)+"px "+i.B+"px "+(i.L+a)+"px)"}else{d.vml.image.shape.style.clip="rect("+f.T+"px "+f.R+"px "+f.B+"px "+f.L+"px)"}},figurePercentage:function(d,c,f,a){var b,e;e=true;b=(f=="X");switch(a){case"left":case"top":d[f]=0;break;case"center":d[f]=0.5;break;case"right":case"bottom":d[f]=1;break;default:if(a.search("%")!=-1){d[f]=parseInt(a,10)/100}else{e=false}}d[f]=Math.ceil(e?((c[b?"W":"H"]*d[f])-(c[b?"w":"h"]*d[f])):parseInt(a,10));if(d[f]%2===0){d[f]++}return d[f]},fixPng:function(c){c.style.behavior="none";var g,b,f,a,d;if(c.nodeName=="BODY"||c.nodeName=="TD"||c.nodeName=="TR"){return}c.isImg=false;if(c.nodeName=="IMG"){if(c.src.toLowerCase().search(/\.png$/)!=-1){c.isImg=true;c.style.visibility="hidden"}else{return}}else{if(c.currentStyle.backgroundImage.toLowerCase().search(".png")==-1){return}}g=DD_belatedPNG;c.vml={color:{},image:{}};b={shape:{},fill:{}};for(a in c.vml){if(c.vml.hasOwnProperty(a)){for(d in b){if(b.hasOwnProperty(d)){f=g.ns+":"+d;c.vml[a][d]=document.createElement(f)}}c.vml[a].shape.stroked=false;c.vml[a].shape.appendChild(c.vml[a].fill);c.parentNode.insertBefore(c.vml[a].shape,c)}}c.vml.image.shape.fillcolor="none";c.vml.image.fill.type="tile";c.vml.color.fill.on=false;g.attachHandlers(c);g.giveLayout(c);g.giveLayout(c.offsetParent);c.vmlInitiated=true;g.applyVML(c)}};try{document.execCommand("BackgroundImageCache",false,true)}catch(r){}DD_belatedPNG.createVmlNameSpace();DD_belatedPNG.createVmlStyleSheet(); -------------------------------------------------------------------------------- /content/media/js/libs/meta.yaml: -------------------------------------------------------------------------------- 1 | uses_template: false -------------------------------------------------------------------------------- /content/media/js/libs/modernizr-1.7.min.js: -------------------------------------------------------------------------------- 1 | // Modernizr v1.7 www.modernizr.com 2 | window.Modernizr=function(a,b,c){function G(){e.input=function(a){for(var b=0,c=a.length;b7)},r.history=function(){return !!(a.history&&history.pushState)},r.draganddrop=function(){return x("dragstart")&&x("drop")},r.websockets=function(){return"WebSocket"in a},r.rgba=function(){A("background-color:rgba(150,255,150,.5)");return D(k.backgroundColor,"rgba")},r.hsla=function(){A("background-color:hsla(120,40%,100%,.5)");return D(k.backgroundColor,"rgba")||D(k.backgroundColor,"hsla")},r.multiplebgs=function(){A("background:url(//:),url(//:),red url(//:)");return(new RegExp("(url\\s*\\(.*?){3}")).test(k.background)},r.backgroundsize=function(){return F("backgroundSize")},r.borderimage=function(){return F("borderImage")},r.borderradius=function(){return F("borderRadius","",function(a){return D(a,"orderRadius")})},r.boxshadow=function(){return F("boxShadow")},r.textshadow=function(){return b.createElement("div").style.textShadow===""},r.opacity=function(){B("opacity:.55");return/^0.55$/.test(k.opacity)},r.cssanimations=function(){return F("animationName")},r.csscolumns=function(){return F("columnCount")},r.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";A((a+o.join(b+a)+o.join(c+a)).slice(0,-a.length));return D(k.backgroundImage,"gradient")},r.cssreflections=function(){return F("boxReflect")},r.csstransforms=function(){return!!E(["transformProperty","WebkitTransform","MozTransform","OTransform","msTransform"])},r.csstransforms3d=function(){var a=!!E(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);a&&"webkitPerspective"in g.style&&(a=w("@media ("+o.join("transform-3d),(")+"modernizr)"));return a},r.csstransitions=function(){return F("transitionProperty")},r.fontface=function(){var a,c,d=h||g,e=b.createElement("style"),f=b.implementation||{hasFeature:function(){return!1}};e.type="text/css",d.insertBefore(e,d.firstChild),a=e.sheet||e.styleSheet;var i=f.hasFeature("CSS2","")?function(b){if(!a||!b)return!1;var c=!1;try{a.insertRule(b,0),c=/src/i.test(a.cssRules[0].cssText),a.deleteRule(a.cssRules.length-1)}catch(d){}return c}:function(b){if(!a||!b)return!1;a.cssText=b;return a.cssText.length!==0&&/src/i.test(a.cssText)&&a.cssText.replace(/\r+|\n+/g,"").indexOf(b.split(" ")[0])===0};c=i('@font-face { font-family: "font"; src: url(data:,); }'),d.removeChild(e);return c},r.video=function(){var a=b.createElement("video"),c=!!a.canPlayType;if(c){c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"');var d='video/mp4; codecs="avc1.42E01E';c.h264=a.canPlayType(d+'"')||a.canPlayType(d+', mp4a.40.2"'),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return c},r.audio=function(){var a=b.createElement("audio"),c=!!a.canPlayType;c&&(c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"'),c.mp3=a.canPlayType("audio/mpeg;"),c.wav=a.canPlayType('audio/wav; codecs="1"'),c.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;"));return c},r.localstorage=function(){try{return!!localStorage.getItem}catch(a){return!1}},r.sessionstorage=function(){try{return!!sessionStorage.getItem}catch(a){return!1}},r.webWorkers=function(){return!!a.Worker},r.applicationcache=function(){return!!a.applicationCache},r.svg=function(){return!!b.createElementNS&&!!b.createElementNS(q.svg,"svg").createSVGRect},r.inlinesvg=function(){var a=b.createElement("div");a.innerHTML="";return(a.firstChild&&a.firstChild.namespaceURI)==q.svg},r.smil=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"animate")))},r.svgclippaths=function(){return!!b.createElementNS&&/SVG/.test(n.call(b.createElementNS(q.svg,"clipPath")))};for(var H in r)z(r,H)&&(v=H.toLowerCase(),e[v]=r[H](),u.push((e[v]?"":"no-")+v));e.input||G(),e.crosswindowmessaging=e.postmessage,e.historymanagement=e.history,e.addTest=function(a,b){a=a.toLowerCase();if(!e[a]){b=!!b(),g.className+=" "+(b?"":"no-")+a,e[a]=b;return e}},A(""),j=l=null,f&&a.attachEvent&&function(){var a=b.createElement("div");a.innerHTML="";return a.childNodes.length!==1}()&&function(a,b){function p(a,b){var c=-1,d=a.length,e,f=[];while(++cPhotos 9 | 10 | 34 | 35 | 44 | -------------------------------------------------------------------------------- /content/projects.html: -------------------------------------------------------------------------------- 1 | --- 2 | extends: minimal.j2 3 | default_block: main 4 | title: Open Source Projects 5 | description: Open Source Projects Authored and Contributed to 6 | --- 7 | 8 |

Open Source Projects

9 |
10 | 11 |

Altair

12 |

Altair is a tool for declarative data visualization in Python, built on 13 | the Vega ecosystem.

14 |
15 | 16 |

AstroML

17 |

AstroML is a Python module for machine learning and data mining in 18 | Astronomy and Astrophysics. It contains many commonly-used tools from 19 | the astronomical literature, and hundreds of examples of their use. I 20 | wrote this package to accompany our textbook, Statistics, Data Mining, 21 | and Machine Learning in Astronomy.

22 |
23 | 24 |

Scikit-Learn

25 |

Scikit-Learn is a powerful and extensive machine learning library 26 | written in Python. I have 27 | contributed in many areas of the project, but primarily in the area of 28 | generalized N-point problems & manifold learning.

29 |
30 | 31 |

Scipy

32 |

Scipy is a collection of Python tools for scientific computing. My main 33 | contributions have been in the sparse matrix toolkit, primarily in iterative 34 | sparse matrix decompositions and fast graph algorithms.

35 |
36 | 37 |

Other Packages

38 |

I also have made numerous small contributions to projects such as 39 | NumPy, 40 | Matplotlib, 41 | IPython, 42 | Hyde, 43 | Pelican, 44 | and others, and have open-sourced much of my other code and teaching materials. 45 | See my GitHub profile for details.

46 | 47 |
48 | -------------------------------------------------------------------------------- /content/speaking.html: -------------------------------------------------------------------------------- 1 | --- 2 | extends: minimal.j2 3 | default_block: main 4 | title: Talks and Presentations 5 | description: Videos of Talks and Presentations by Jake Vanderplas 6 | --- 7 |

Videos of Talks and Presentations

8 | 9 |

Below I list a few of the talks, lectures, and tutorials I've given for 10 | which video is available online.

11 |

~ Updated January 2017 ~

12 |
13 | 14 | July, 2017 15 |

PyData 101

16 |

PyData Seattle 2017: a 1-hour invited keynote. 17 | [Video|slides]

18 |
19 | 20 | May, 2017 21 |

The Unexpected Effectiveness of Python in Science

22 |

PyCon 2017: a 1-hour invited keynote. 23 | [Video|slides]

24 |
25 | 26 | May, 2017 27 |

Python's Visualization Landscape

28 |

PyCon 2017: a 30-minute submitted talk. 29 | [Video|slides]

30 |
31 | 32 | May, 2016 33 |

Statistics for Hackers

34 |

PyCon 2016: a 40-minute submitted talk. 35 | [Video|slides]

36 |
37 | 38 | July, 2015 39 |

The State of the Stack

40 |

SciPy 2015: a 1-hour invited keynote. 41 | [Video|slides]

42 |
43 | 44 | April, 2015 45 |

Losing Your Loops: Fast Numerical Computing with NumPy

46 |

PyCon 2015: A 30 minute submitted talk. 47 | [Video|slides]

48 |
49 | 50 | April, 2015 51 |

Machine Learning with Scikit-Learn

52 |

PyCon 2015: A 3.5 hour introductory tutorial on Scikit-learn. 53 | [Video|notebooks]

54 |
55 | 56 | July, 2014 57 |

Frequentism and Bayesianism: What's The Big Deal?

58 |

SciPy 2014: A 3.5 hour introductory tutorial on Scikit-learn. 59 | [Video|proceedings paper|slides]

60 |
61 | 62 | April, 2014 63 |

Exploring Machine Learning with Scikit-Learn

64 |

PyCon 2014: A 3.5 hour introductory tutorial on Scikit-learn. 65 | [Video|notebooks]

66 |
67 | 68 | November, 2013 69 |

Machine Learning with Scikit-Learn

70 |

PyData NYC 2013: A 1.5 hour advanced tutorial on Scikit-learn. 71 | [Video| 72 | notebook]

73 |
74 | 75 | November, 2013 76 |

Efficient Computing with NumPy

77 |

PyData NYC 2013: A 1:30 advanced tutorial on NumPy. 78 | [Video| 79 | notebook]

80 |
81 | 82 | November, 2013 83 |

Timeseries Analysis in SciDB

84 |

PyData NYC 2013: A half-hour talk on using SciDB in Python. 85 | [Video]

86 |
87 | 88 | October, 2013 89 |

Unlocking the Universe with Python and LSST

90 |

RuPy 2013: A 40 minute talk on LSST for non-astronomers. 91 | [Video]

92 |
93 | 94 | June, 2013 95 |

Opening Up Astronomy with Python and AstroML

96 |

Scipy 2013: A 20 minute talk about the 97 | astroML project 98 | [Video]

99 |
100 | 101 | June, 2013 102 |

An Introduction to Scikit-learn

103 |

Scipy 2013: An eight-hour marathon scikit-learn tutorial co-taught 104 | with Gael Varoquaux and Olivier Grisel. Notebooks and supporting material 105 | available on GitHub.

106 |

Videos: 107 | [Part 1.1] 108 | [Part 1.2] 109 | [Part 1.3] 110 | [Part 2.1] 111 | [Part 2.2] 112 |

113 |
114 | 115 | March, 2013 116 |

Interactive Data Visualization with Matplotlib

117 |

PyData 2013: A one-hour tutorial covering the tools to create 118 | dynamic and interactive visualizations with Matplotlib. 119 | Notebooks and other supporting material are available on 120 | GitHub. 121 | [Video]

122 |
123 | 124 | 125 | March, 2013 126 |

An Introduction to Scikit-Learn

127 |

PyCon 2013: A three-hour tutorial introducing 128 | Machine Learning and Scikit-learn. Notebooks and other supporting 129 | material are available on 130 | GitHub. 131 | [Video]

132 |
133 | 134 | November, 2012 135 |

Scikit-Learn Tutorial

136 |

PyData NYC 2012: A 45-minute tutorial introducing 137 | Machine Learning and Scikit-learn. Notebooks and other supporting 138 | material are available at http://astroML.org/sklearn_tutorial. 139 | [Video]

140 |
141 | 142 | November, 2012 143 |

Object Oriented Matplotlib

144 |

PyData NYC 2012: A 45-minute tutorial introducing plotting with 145 | Matplotlib. Notebooks and other supporting 146 | material are available on http://jakevdp.github.io/mpl_tutorial/. 147 | [Video]

148 |
149 | 150 | 151 | November, 2012 152 |

Lightning Talk: AstroML

153 |

PyData NYC 2012: A 5-minute lightning talk on the 154 | AstroML package. 155 | [Video]

156 |
157 | 158 | 159 | July, 2012 160 |

An Introduction to Scikit-Learn

161 |

SciPy 2012: A three-hour tutorial introducing 162 | Machine Learning and Scikit-learn. Notebooks and other supporting 163 | material available at http://astroML.org/sklearn_tutorial. 164 | [Video]

165 |
166 | 167 | 168 | July, 2012 169 |

AstroML: Machine Learning for Astronomy and Astrophysics

170 |

SciPy 2012: A 20 minute talk in the Astronomy & Astrophysics 171 | mini-symposium. Source code for the plots shown is available at http://astroML.org/. 172 | [Video]

173 |
174 | 175 | 176 | March, 2012 177 |

Scikit-Learn Tutorial

178 |

PyData Workshop 2012: A 1 hour tutorial on Scikit-learn. 179 | Notebooks and other supporting material available at 180 | http://astroML.org/sklearn_tutorial. 181 | [Video]

182 |
183 | 184 | 185 | November, 2011 186 |

Gravity: Lensing the Universe

187 |

Queen Anne Science Cafe: A 30 minute public talk at a Seattle pub 188 | on dark matter and gravitational lensing. 189 | [Video]

190 |
191 | -------------------------------------------------------------------------------- /content/vitae.html: -------------------------------------------------------------------------------- 1 | --- 2 | extends: minimal.j2 3 | default_block: main 4 | title: Vitae 5 | description: Curriculum Vitae for Jake Vanderplas 6 | --- 7 |

Vitae

8 |
9 |

CV

10 |

View my CV (pdf).

11 |
12 |

Publications

13 |

See 14 | NASA ADS for an up-to-date list of my Astronomy/Astrophysics publications, and 15 | DBLP for an up-to-date list of my Computer Science/database publications. 16 | See also my ORCID page and Google Scholar page a fairly complete list of publications and citations.

17 | 97 | 98 |
99 | -------------------------------------------------------------------------------- /info.yaml: -------------------------------------------------------------------------------- 1 | author: Jake Vanderplas 2 | description: Website of Jake Vanderplas 3 | version: 0.1 -------------------------------------------------------------------------------- /layout/analytics.j2: -------------------------------------------------------------------------------- 1 | {% if site.config.mode == "production" %} 2 | 4 | 14 | {% endif %} -------------------------------------------------------------------------------- /layout/minimal.j2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% block starthead %}{% endblock starthead %} 5 | 6 | 7 | 8 | {% block title %}{{ resource.meta.title }}{% endblock %} 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% block favicons %} 16 | 18 | 19 | 20 | {% endblock favicons %} 21 | 22 | {% block css %} 23 | 24 | 25 | 64 | 65 | 66 | {% endblock css %} 67 | 68 | 69 | 70 | {% block content %} 71 |
72 | {% block wrapper %} 73 |
74 | {% block header %} 75 |

Jake VanderPlas

76 | {% endblock header %} 77 | {% block nav %} 78 |
79 |

Open Source ProjectsCode You Might find Useful

80 |

Videos of my TalksAstronomy, Python, and Beyond

81 |

VitaeAll About my Work

82 | {% if page.repository_url %} 83 |

Project Info

84 | 101 | {% endif %} 102 | {% endblock nav %} 103 | 104 | {% block media %} 105 |

On the Web

106 |

GitHub 107 |

Twitter 108 |

SpeakerDeck 109 |

ORCID 110 |

My Blog 111 | {% endblock media %} 112 |

113 |
114 | {% block main %} 115 | {{ content }} 116 | {% endblock main %} 117 |
118 | {% block footer %} 119 | 123 | {% endblock footer %} 124 | {% endblock wrapper %} 125 |
126 | {% endblock content %} 127 | 128 | {% block js %} 129 | 142 | {% block jquery %} 143 | 144 | 145 | 146 | {% endblock jquery %} 147 | 148 | {% block analytics %} 149 | {% include "analytics.j2" %} 150 | {% endblock analytics %} 151 | 152 | {% endblock js %} 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /production.yaml: -------------------------------------------------------------------------------- 1 | extends: site.yaml 2 | 3 | mode: production 4 | media_url: /media 5 | base_url: / 6 | deploy_root: deploy_production 7 | 8 | publisher: 9 | ssh: 10 | type: hyde.ext.publishers.ssh.SSH 11 | username: jakevdp 12 | server: jakevdp.ovid.u.washington.edu 13 | target: /rc00/d68/jakevdp/public_html -------------------------------------------------------------------------------- /site.yaml: -------------------------------------------------------------------------------- 1 | mode: development 2 | 3 | base_url: / # The base url for autogenerated links. 4 | media_url: /media # URL where the media files are served from. 5 | media_root: media # Relative path from content folder. 6 | 7 | plugins: 8 | - hyde.ext.plugins.meta.MetaPlugin 9 | - hyde.ext.plugins.auto_extend.AutoExtendPlugin 10 | - hyde.ext.plugins.sorter.SorterPlugin 11 | - hyde.ext.plugins.tagger.TaggerPlugin 12 | - hyde.ext.plugins.syntext.SyntextPlugin 13 | - hyde.ext.plugins.textlinks.TextlinksPlugin 14 | context: 15 | data: 16 | tweet_via: jakevdp 17 | meta: 18 | nodemeta: meta.yaml 19 | created: !!timestamp 2013-04-18 00:00:00 20 | author: Jake VanderPlas 21 | analytics: 22 | id: UA-11762888-1 23 | 24 | sorter: 25 | time: 26 | attr: 27 | - meta.created 28 | reverse: true 29 | filters: 30 | source.kind: html 31 | meta.listable: true 32 | tagger: 33 | sorter: time 34 | archives: 35 | blog: 36 | source: blog 37 | target: blog/tags 38 | template: tagged_posts.j2 39 | archive_extension: html 40 | meta: 41 | listable: false --------------------------------------------------------------------------------