From 095378a35586513ab7893fe0b15e7de520e0502a Mon Sep 17 00:00:00 2001 From: Aaron Gullickson Date: Mon, 27 May 2019 11:48:06 -0700 Subject: [PATCH] updates to paper production to allow for separate paper information yaml and auotomated manuscript PDF generation using R script --- products/paper/README.md | 6 +- products/paper/appendix.Rmd | 6 +- products/paper/combine_pdfs.py | 28 - products/paper/generate_full_paper.R | 45 + products/paper/main.Rmd | 14 +- products/paper/paper_info.yaml | 12 + products/paper/resources/asr.bst | 1340 ++++++++++++++++++++++++++ products/paper/tablesfigs.Rmd | 5 +- products/paper/title_page.Rmd | 16 + 9 files changed, 1423 insertions(+), 49 deletions(-) delete mode 100755 products/paper/combine_pdfs.py create mode 100644 products/paper/generate_full_paper.R create mode 100644 products/paper/paper_info.yaml create mode 100644 products/paper/resources/asr.bst create mode 100644 products/paper/title_page.Rmd diff --git a/products/paper/README.md b/products/paper/README.md index 260fe6d..27a7180 100644 --- a/products/paper/README.md +++ b/products/paper/README.md @@ -2,9 +2,11 @@ This directory contains all the files necessary to produce a final manuscript. -When possible, I attempt to write the manuscript in R Markdown. The `main.Rmd` is used to write the main manuscript. I use a custom tex template [adapated from Steven V. Miller](http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/) to produce the R Markdown in PDF format. You can define a variety of options in the YAML header to get a different look. The template itself contains more details about all of these options. Most importantly, the `anonymous` option can be changed to true to remove author names and change to the crappy double spaced and ragged edged manuscript that most journals expect. You can see a version of what a nicely formatted version of this template looks like [here](http://pages.uoregon.edu/aarong/assets/fullmanuscript.pdf) and a version that has been anonymized [here](http://pages.uoregon.edu/aarong/assets/fullmanuscript_submission.pdf). I also include an MS Word template that can be used to knit to Word when necessary. +When possible, I attempt to write the manuscript in R Markdown. The `main.Rmd` is used to write the main manuscript. I use a custom tex template [adapated from Steven V. Miller](http://svmiller.com/blog/2016/02/svm-r-markdown-manuscript/) to produce the R Markdown in PDF format. You can define a variety of options in the YAML header to get a different look. The template itself contains more details about all of these options. Most importantly, the `anonymous` option can be changed to true to remove author names and change to the crappy double spaced and ragged edged manuscript that most journals expect. You can see a version of what a nicely formatted version of this template looks like [here](https://aarongullickson.github.io/assets/fullmanuscript.pdf) and a version that has been anonymized [here](https://aarongullickson.github.io/assets/fullmanuscript_submission.pdf). I also include an MS Word template that can be used to knit to Word when necessary. -I sometimes just write the manuscript using `main.Rmd`. However, sometimes it is preferable to keep separate Rmd files for tables and figures and any technical appendices. Journals often want tables and figures at the end of the document and sometimes I just don't want my main document to be slowed down by the processing of code. Starter code for these two R Markdown files are also located in this directory. When I do it this way, the three PDFs can be combined together with the `combine_pdfs.py` python script. This will create a `full_manuscript.pdf` file that includes all PDFs. Users will have to have the [PyPDF2 library](https://github.com/mstamy2/PyPDF2) installed in order for this script to work. In order for page numbering to be accurate, the pagenumber variable will also need to be adjusted for the supplementary R Markdown files. +I keep information on title, authors, affiliations, abstract, and acknowledgements in a separate `paper_info.yaml`. This information will be added to the `main.Rmd` output when knit. This way the same information can also be used to generate a title page pdf with `title_page.Rmd` without having to copy everything over. Such title pages are often required by journals (god knows why we need them in this day and age). + +I sometimes just write the manuscript using `main.Rmd`. However, sometimes it is preferable to keep separate Rmd files for tables and figures and any technical appendices. Journals often want tables and figures at the end of the document and sometimes I just don't want my main document to be slowed down by the processing of code. Starter code for these two R Markdown files are also located in this directory. When I do it this way, the three PDFs can be combined together with the `generate_full_paper.R` script. This will create a `full_manuscript.pdf` file that includes all PDFs. One of the the nice features of this script is that it will adjust the page numbers of the additional R Markdown files when it knits so that the final document will have proper pagination throughout. At the top of this script are two boolean options to indicate whether you want a particular thing to be knit and added to the full manuscript. In order to create tables and figures, I usually just load constructed data from the analysis side of the directory using relative paths from within R Markdown. Something like: diff --git a/products/paper/appendix.Rmd b/products/paper/appendix.Rmd index 5030299..2176814 100644 --- a/products/paper/appendix.Rmd +++ b/products/paper/appendix.Rmd @@ -5,12 +5,8 @@ output: template: ./resources/aog-latex-ms.tex fontfamily: mathpazo fontsize: 11pt -anonymous: false -endnotes: false appendix: true appendixletter: A -#change page number for the final pdf -pagenumber: 1 --- -#Technical Appendix +# Technical Appendix diff --git a/products/paper/combine_pdfs.py b/products/paper/combine_pdfs.py deleted file mode 100755 index c3bea0d..0000000 --- a/products/paper/combine_pdfs.py +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env python - -#This script will combine the separate main paper with the tables -#and figures and appendix PDFs to create a full_manuscript.pdf file. -#To change the files that are combined, edit the 'pdfs=' line below. - -#The PyPDF2 python library must be installed on the system for this -#program to work. - -#I recommend running this from the command line as the "Run Script" -#option in RStudio cannot seem to find the PyPDF2 library even if -#installed. - -#basic code borrowed from answer 39 to this stack overflow queston -#https://stackoverflow.com/questions/3444645/merge-pdf-files - -import sys -from PyPDF2 import PdfFileMerger - -pdfs = ['main.pdf', 'tablesfigs.pdf', 'appendix.pdf'] - -merger = PdfFileMerger() - -for pdf in pdfs: - merger.append(open(pdf, 'rb')) - -with open('full_manuscript.pdf', 'wb') as fout: - merger.write(fout) diff --git a/products/paper/generate_full_paper.R b/products/paper/generate_full_paper.R new file mode 100644 index 0000000..662de72 --- /dev/null +++ b/products/paper/generate_full_paper.R @@ -0,0 +1,45 @@ +#a script to knit and produce the full document + +#You can specify below what additional Rmd files you want to be added to +#main.pdf for the full manuscript (currently tables and figures and appendix). +#The program will change page numbering for the supplementary pdfs so there +#is no need to change page numbers in the YAML. The script will also +#create a title page since many journals require this. + +separate_tabfigs <- TRUE +separate_appendix <- TRUE + +library(pdftools) +library(rmarkdown) + +# Knit PDFs --------------------------------------------------------------- + +#first remove all existing PDF files +system("rm *.pdf") + +#assume main.Rmd exists or no point to this +render("main.Rmd") + +#now render additional pdfs +list_of_pdfs <- "main.pdf" +start_page <- pdf_length("main.pdf")+1 +if(separate_tabfigs & file.exists("tablesfigs.Rmd")) { + render("tablesfigs.Rmd", + output_options = list(pandoc_args = c(paste("--metadata=pagenumber:", + start_page, sep=" ")))) + start_page <- start_page + pdf_length("tablesfigs.pdf") + list_of_pdfs <- c(list_of_pdfs, "tablesfigs.pdf") +} +if(separate_appendix & file.exists("appendix.Rmd")) { + render("appendix.Rmd", + output_options = list(pandoc_args = c(paste("--metadata=pagenumber:", + start_page, sep=" ")))) + list_of_pdfs <- c(list_of_pdfs, "appendix.pdf") +} + +#now do the title page +if(file.exists("title_page.Rmd")) { + render("title_page.Rmd") +} + +pdf_combine(list_of_pdfs, output = "full_manuscript.pdf") diff --git a/products/paper/main.Rmd b/products/paper/main.Rmd index d94ea8f..5905475 100644 --- a/products/paper/main.Rmd +++ b/products/paper/main.Rmd @@ -1,27 +1,21 @@ --- output: pdf_document: + pandoc_args: './paper_info.yaml' citation_package: natbib fig_caption: yes template: ./resources/aog-latex-ms.tex word_document: + pandoc_args: './paper_info.yaml' reference_docx: ./resources/aog_word_style.docx + html_document: + pandoc_args: './paper_info.yaml' fontfamily: mathpazo fontsize: 11pt anonymous: false endnotes: false -pagenumber: 1 bibliography: ../project.bib biblio-style: ./resources/ajs.bst -title: "The Title" -author: -- affiliation: University of Oregon, Sociology - name: Aaron Gullickson -- affiliation: Some Research University - name: My co-author -keywords: keywords -thanks: Thanks to people and stuff -abstract: This is a test abstract --- # Introduction diff --git a/products/paper/paper_info.yaml b/products/paper/paper_info.yaml new file mode 100644 index 0000000..b7c8ff5 --- /dev/null +++ b/products/paper/paper_info.yaml @@ -0,0 +1,12 @@ +--- +title: "The Title" +author: +- affiliation: University of Oregon, Sociology + name: Aaron Gullickson +- affiliation: Some Research University + name: My co-author +keywords: keywords +#FYI: the thanks and abstract are easier to view and edit in Atom which does proper linewrapping +thanks: Thanks to people and stuff +abstract: This is a test abstract +--- \ No newline at end of file diff --git a/products/paper/resources/asr.bst b/products/paper/resources/asr.bst new file mode 100644 index 0000000..41a047a --- /dev/null +++ b/products/paper/resources/asr.bst @@ -0,0 +1,1340 @@ +%% +%% This is file `asr.bst', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% genbst.mbs (with options: `,ay,cay,nm-rev1,dt-beg,yr-per, +%% tit-qq,atit-u,vnum-x,jnm-x,edby,pp,ed') +%% ---------------------------------------- +%% *** American Sociological Review*** +%% +%% (Here are the specifications of the source file) +%% \ProvidesFile{genbst.mbs}[1995/02/02 1.6 (PWD)] +%% For use with BibTeX version 0.99a or later +%% and with LaTeX 2.09 or 2e +%%------------------------------------------------------------------- +%% NOTICE: +%% This file may be used for non-profit purposes. +%% It may not be distributed in exchange for money, +%% other than distribution costs. +%% +%% The author provides it `as is' and does not guarantee it in any way. +%% +%% Copyright (C) 1994, 1995 Patrick W. Daly +%% Max-Planck-Institut f\"ur Aeronomie +%% Postfach 20 +%% D-37189 Katlenburg-Lindau +%% Germany +%% +%% E-mail: +%% SPAN-- nsp::linmpi::daly (note nsp also known as ecd1) +%% Internet-- daly@linmpi.dnet.gwdg.de +%%----------------------------------------------------------- +%% \CharacterTable +%% {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 +%% 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 +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +%%--------------------------------------------------------------------- + % This is an author-year citation style bibliography. As such, it is + % non-standard LaTeX, and requires a special package file to function properly. + % Such a package is natbib.sty by Patrick W. Daly + % or: chicago.sty + % The form of the bibitem entries is + % \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith} + % {Jones et al.}{1990}{key}... +%%--------------------------------------------------------------------- + +%%We modified the style-file produced by makebst as described above to +%%list address of the publisher then the publisher separated by a +%%colon. + +%%Authors: Julian B. Dierkes and Hugh W. Louch +%%Dept. of Sociology, Princeton University + +ENTRY + { abstract + address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + } + {} + { label extra.label sort.label } + +INTEGERS { output.state before.all mid.sentence after.sentence after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.sentence := + #3 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +%The following two functions came from chicago.bst to switch around +%publisher and address + +FUNCTION {output.nonnull.colon} +{ 's := + output.state mid.sentence = + { ": " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { add.period$ " " * write$ } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output.check.colon} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull.colon + if$ +} + +FUNCTION {fin.entry} +{ add.period$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { after.block 'output.state := } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {add.blank} +{ " " * before.all 'output.state := +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {non.stop} +{ duplicate$ + "}" * add.period$ + #-1 #1 substring$ "." = +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * non.stop + { "\/}" * } + { "}" * } + if$ + } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ 't := } + { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := } + if$ + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.names.ed} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{ff~}{v.~}{ll}{, jj}" + format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.key} +{ empty$ + { key field.or.null } + { "" } + if$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { " (eds.)" * } + { " (ed.)" * } + if$ + } + if$ +} + +FUNCTION {format.in.editors} +{ editor empty$ + { "" } + { editor format.names.ed + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { title + "\enquote{" swap$ * + add.period$ "}" * + } + if$ +} + +FUNCTION {format.full.names} +{'s := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr + "{vv~}{ll}" format.name$ 't := + nameptr #1 > + { + namesleft #1 > + { ", " * t * } + { + numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {author.editor.key.full} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {author.key.full} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.full.names } + if$ +} + +FUNCTION {editor.key.full} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.full.names } + if$ +} + +FUNCTION {make.full.names} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.full + { type$ "proceedings" = + 'editor.key.full + 'author.key.full + if$ + } + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem[" write$ + "\protect\citeauthoryear{" make.full.names * "}{" * write$ + label write$ + "}{" year duplicate$ empty$ + { pop$ "????" } + 'skip$ + if$ + * extra.label * "}]{" * write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {word.in} +{ "In " } + +FUNCTION {format.date} +{ year duplicate$ empty$ + { "empty year in " cite$ * "; set to ????" * warning$ + pop$ "????" } + 'skip$ + if$ + after.sentence 'output.state := + extra.label * +} + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "volume" volume tie.or.space.connect + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "number" } + { "Number" } + if$ + number tie.or.space.connect + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { output.state mid.sentence = + { edition "l" change.case$ " edition" * } + { edition "t" change.case$ " edition" * } + if$ + } + if$ +} + +% FUNCTION {format.abstract} +% { abstract empty$ +% { "" } +% { newline$ +% "Abstract: " emphasize +% abstract } +% if$ +% } + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pp." pages n.dashify tie.or.space.connect } + { "p." pages tie.or.space.connect } + if$ + } + if$ +} + +FUNCTION {format.vol.num.pages} +{ volume field.or.null + pages empty$ + 'skip$ + { duplicate$ empty$ + { pop$ format.pages } + { ":" * pages n.dashify * } + if$ + } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "chapter" } + { type "l" change.case$ } + if$ + chapter tie.or.space.connect + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { editor empty$ + { word.in booktitle emphasize * } + { word.in booktitle emphasize * + ", " * + editor num.names$ #1 > + { "edited by " } + { "edited by " } + if$ + * " " * + format.in.editors * + } + if$ + } + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + type "t" change.case$ + } + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Technical Report" } + 'type + if$ + number empty$ + { "t" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.article.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + word.in + } + { "Volume" volume tie.or.space.connect + " of " * + } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ + word.in + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { journal emphasize "journal" output.check + add.blank + format.vol.num.pages output + } + { format.article.crossref output.nonnull + format.pages output + } + if$ + new.block + note output +% new.block +% format.abstract "abstract" output.check +% abstract output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + address output + publisher "publisher" output.check.colon + } + { + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + howpublished output + address output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + author empty$ + { format.editors "author and editor" output.check + editor format.key output + } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.date "year" output.check + new.block + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.sentence + address output + publisher "publisher" output.check.colon + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.sentence + address output + publisher "publisher" output.check.colon + format.edition output + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.pages output + address output + new.sentence + organization output + publisher output + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + new.block + format.btitle "title" output.check + organization address new.block.checkb + organization output + address output + format.edition output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.btitle "title" output.check + new.block + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.authors output + author format.key output + format.date "year" output.check + new.block + format.title output + new.block + howpublished output + new.block + note output + fin.entry +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.btitle "title" output.check + new.block + "Ph.D. thesis" format.thesis.type output.nonnull + school "school" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + format.editors output + editor format.key output + format.date "year" output.check + new.block + format.btitle "title" output.check + format.bvolume output + format.number.series output + address output + new.sentence + organization output + publisher output + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + format.tr.number output.nonnull + institution "institution" output.check + address output + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.authors "author" output.check + author format.key output + format.date "year" output.check + new.block + format.title "title" output.check + new.block + note "note" output.check + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"January"} + +MACRO {feb} {"February"} + +MACRO {mar} {"March"} + +MACRO {apr} {"April"} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"August"} + +MACRO {sep} {"September"} + +MACRO {oct} {"October"} + +MACRO {nov} {"November"} + +MACRO {dec} {"December"} + +MACRO {acmcs} {"ACM Computing Surveys"} + +MACRO {acta} {"Acta Informatica"} + +MACRO {cacm} {"Communications of the ACM"} + +MACRO {ibmjrd} {"IBM Journal of Research and Development"} + +MACRO {ibmsj} {"IBM Systems Journal"} + +MACRO {ieeese} {"IEEE Transactions on Software Engineering"} + +MACRO {ieeetc} {"IEEE Transactions on Computers"} + +MACRO {ieeetcad} + {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} + +MACRO {ipl} {"Information Processing Letters"} + +MACRO {jacm} {"Journal of the ACM"} + +MACRO {jcss} {"Journal of Computer and System Sciences"} + +MACRO {scp} {"Science of Computer Programming"} + +MACRO {sicomp} {"SIAM Journal on Computing"} + +MACRO {tocs} {"ACM Transactions on Computer Systems"} + +MACRO {tods} {"ACM Transactions on Database Systems"} + +MACRO {tog} {"ACM Transactions on Graphics"} + +MACRO {toms} {"ACM Transactions on Mathematical Software"} + +MACRO {toois} {"ACM Transactions on Office Information Systems"} + +MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} + +MACRO {tcs} {"Theoretical Computer Science"} + +READ + +FUNCTION {sortify} +{ purify$ + "l" change.case$ +} + +INTEGERS { len } + +FUNCTION {chop.word} +{ 's := + 'len := + s #1 len substring$ = + { s len #1 + global.max$ substring$ } + 's + if$ +} + +FUNCTION {format.lab.names} +{ 's := + s #1 "{vv~}{ll}" format.name$ + s num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * s #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {author.key.label} +{ author empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {author.editor.key.label} +{ author empty$ + { editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ + } + { author format.lab.names } + if$ +} + +FUNCTION {editor.key.label} +{ editor empty$ + { key empty$ + { cite$ #1 #3 substring$ } + 'key + if$ + } + { editor format.lab.names } + if$ +} + +FUNCTION {calc.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + ", " + * + year duplicate$ empty$ + { pop$ "????" } + { purify$ #-1 #4 substring$ } + if$ + * + 'label := +} + +FUNCTION {calc.short.label} +{ type$ "book" = + type$ "inbook" = + or + 'author.editor.key.label + { type$ "proceedings" = + 'editor.key.label + 'author.key.label + if$ + } + if$ + 'label := +} + +FUNCTION {sort.format.names} +{ 's := + #1 'nameptr := + "" + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { nameptr #1 > + { " " * } + 'skip$ + if$ + s nameptr + "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" + format.name$ 't := + nameptr numnames = t "others" = and + { "et al" * } + { t sortify * } + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {sort.format.title} +{ 't := + "A " #2 + "An " #3 + "The " #4 t chop.word + chop.word + chop.word + sortify + #1 global.max$ substring$ +} + +FUNCTION {author.sort} +{ author empty$ + { key empty$ + { "to sort, need author or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {author.editor.sort} +{ author empty$ + { editor empty$ + { key empty$ + { "to sort, need author, editor, or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ + } + { author sort.format.names } + if$ +} + +FUNCTION {editor.sort} +{ editor empty$ + { key empty$ + { "to sort, need editor or key in " cite$ * warning$ + "" + } + { key sortify } + if$ + } + { editor sort.format.names } + if$ +} + +FUNCTION {presort} +{ calc.label + label sortify + " " + * + type$ "book" = + type$ "inbook" = + or + 'author.editor.sort + { type$ "proceedings" = + 'editor.sort + 'author.sort + if$ + } + if$ + #1 entry.max$ substring$ + 'sort.label := + sort.label + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := +} + +ITERATE {presort} + +SORT + +STRINGS { last.label next.extra } + +INTEGERS { last.extra.num } + +FUNCTION {initialize.extra.label.stuff} +{ #0 int.to.chr$ 'last.label := + "" 'next.extra := + #0 'last.extra.num := +} + +FUNCTION {forward.pass} +{ last.label label = + { last.extra.num #1 + 'last.extra.num := + last.extra.num int.to.chr$ 'extra.label := + } + { "a" chr.to.int$ 'last.extra.num := + "" 'extra.label := + label 'last.label := + } + if$ +} + +FUNCTION {reverse.pass} +{ next.extra "b" = + { "a" 'extra.label := } + 'skip$ + if$ + extra.label 'next.extra := +} + +EXECUTE {initialize.extra.label.stuff} + +ITERATE {forward.pass} + +REVERSE {reverse.pass} + +FUNCTION {bib.sort.order} +{ sort.label + " " + * + year field.or.null sortify + * + " " + * + title field.or.null + sort.format.title + * + #1 entry.max$ substring$ + 'sort.key$ := + calc.short.label +} + +ITERATE {bib.sort.order} + +SORT + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\begin{thebibliography}{}" write$ newline$ + "\newcommand{\enquote}[1]{``#1''}" + write$ newline$ +} + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}" write$ newline$ +} + +EXECUTE {end.bib} +%% End of customized bst file +%% +%% End of file `ajs.bst'. + + diff --git a/products/paper/tablesfigs.Rmd b/products/paper/tablesfigs.Rmd index 5c73064..8e29ffa 100644 --- a/products/paper/tablesfigs.Rmd +++ b/products/paper/tablesfigs.Rmd @@ -5,13 +5,10 @@ output: template: ./resources/aog-latex-ms.tex fontfamily: mathpazo fontsize: 11pt -anonymous: false -endnotes: false -#Change the page number for the final pdf -pagenumber: 1 --- ```{r preamble, echo=FALSE, warning=FALSE} +knitr::opts_chunk$set(warning = FALSE, message = FALSE) #load libraries, data, whatever ``` diff --git a/products/paper/title_page.Rmd b/products/paper/title_page.Rmd new file mode 100644 index 0000000..c5b864f --- /dev/null +++ b/products/paper/title_page.Rmd @@ -0,0 +1,16 @@ +--- +output: + pdf_document: + pandoc_args: './paper_info.yaml' + citation_package: natbib + fig_caption: yes + template: ./resources/aog-latex-ms.tex + word_document: + reference_docx: ./resources/aog_word_style.docx + pandoc_args: './paper_info.yaml' + html_document: + pandoc_args: './paper_info.yaml' +fontfamily: times +fontsize: 12pt +--- +