ufo_aim_panel1_final_report
This repository contains the code to assemble all Chapters of the AIM project into a final document. It also contains a loose guide to the R scripts and data we used for ths project.
Science Score: 31.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
○.zenodo.json file
-
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.9%) to scientific vocabulary
Repository
This repository contains the code to assemble all Chapters of the AIM project into a final document. It also contains a loose guide to the R scripts and data we used for ths project.
Basic Info
- Host: GitHub
- Owner: sagesteppe
- License: mit
- Language: TeX
- Default Branch: main
- Size: 68.7 MB
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Metadata Files
README.md
Uncompahgre Field Office Terrestrial Assess, Inventory and Monitor Final Report
A framework for the assembly of many chapters of work into a BLM style report.
This repository contains the code to assemble all Chapters of the AIM project into a final document. It also contains a loose guide to the R scripts and data we used for ths project.
Layout of the final report:
1) Cover page
2) Report Identifier Information
3) Table of Contents
4) Introduction; Written Sections
Introduction; Analyses
5) Sample Design, Stratification, and Plots Weights
6) Ecological Side Descriptions Completion Assessment
7) Ecological Site Description and Ecological Site Groups Comparision - Vegetation 'Benchmarks'
8) An Assessment of Drought Conditions
9) An overview of the Analytical Sections
10) Bareground
11) Soil Stability
12) Noxious Species
13) Plant Functional Diversity - Cover
14) Plant Functional Diveristy - Species
15) Rare Species
16) Floristic Quality Index
17) Glossary 18) Acknowledgements
All analyses which occurred at a local scale were recorded using the version control language 'git'. These data are all available at a local path at the Bureau of Land Management Office. However, I do not have Git Large File Service Access, and several spatial products will not be available on here. Hopefully my notes and links, which are contained in the scripts, are enough to allow you to readily acquire them.
It is worth noting, essentially, all computations were performed outside of the Windows environment. Whenever possible, only open-source software was utilized, so that any interested Citizen, or other, may emulate and build upon these analyses without a large barrier to entry associated with expensive software subscriptions. E.g. Microsoft and ESRI licenses. Unfortunately, it was required to use ESRI due to data sharing speeds in the internal BLM system. If you are a person external to the Bureau , I believe (but am not positive if this is correct, nor the mechanism to do so) you can request a copy of the AIM Geodatabase (~ TerraDat). You can much more readily import this into R using the 'sf' package, and reading and listing layers. I envy you.
However, with that said, computational power may be a limit for some. Two different hardware environments will be referred to colloquially throughout these scipts. One computer referred to as 'lightscape' and another (seldom noted) as 'parkland'. Nearly all computations were performed on 'parkland', (hopefully) unless otherwise noted. The specs of Parkland and Lightscape are listed at the end of this page, and you should ensure you have appropriate compute power; in nearly all cases you should.
Project Directory Structure:
This project utilizes the idea of relative paths. There are essentially two very common ways to 'identify' a location on a computers memory. The first can be thought of as form the root of the computer. For example, if your neighbor saw you on the street and asked you for directions to your favorite deli, you may only be able to state the directions from your house - not the location we are currently at. If the same neighbor asked you for directions to the deli you just ate at, you may only be able to give them directions from where you currently are.
The path from the 'base' of a computer all the way to a file is called an 'absolute path'.
'/home/UserName/Documents/FavoriteDeli
The path from the current location on a computer to where a file is located is called a 'relative path'.
If we were already in 'Documents' part of town (and this is where the example turns sour), we could simply navigate to Deli we just ate as:
'./DeliWeJustAteAt'
that first '.', just means 'LOOK FOR FOLDER HERE!!!' and (in most? programming languages) this can be shortened to:
'DeliWeJustAteAt'
Now let us consider one more possibility, we return to our office in the 'Documents' part of town, and our co-worker, 'Dave' asks where we ate for lunch, and wants to go out himself. We can give dave directions from our office.
For illustrative purposes the absolute path to our office is:
'/home/UserName/Documents/TheOffice'
And we can give Dave directions like:
'../DeliWeJustAteAt'
where '..', means go up one level, or 'out of the current building'. What a relative path does is make it easy to share project structures across multiple computers.
Our whole project structure is essentially 'flat' and looks like this:
.
├── AIM_Field_rasters
├── AIM_Frame1_data
├── drought_geospatial
├── Get_Gridmet
├── GraphModulesEsds
├── NAIP
├── plot_post_stratification
├── UFO_AIM_Compliance
├── UFO_AIM_Design_Stratification
├── UFO_AIM_Panel1_Final_Report
├── UFO_cartography
├── UFO_cover_estimates_ESD_ESG
├── UFO_drought
├── UFO_elements_of_style
├── UFO_ESD_completion
├── UFO_ESD_manual_classification
├── UFO_noxious_weeds
├── UFO_Plant_Diversity
├── UFO_Soil_Stability
├── UFO_Weights_for_stratification
├── UFO_Weighted_Analyses
├── UFO_bareground
A suitable thing to do would be to create your own directory (folder) called, 'UFO_AIM', and just store these in there! And using relative paths you can leap frog back and forth between projects to grab data!
Individual sub-project Directory Structures
each of the above folders, mostly follow the same substructure, here is the example from the 'drought_geospatial' directory. It is somewhat rare that the R script will 'reach outside' of their own directories. This is generally to access large datasets, which are not easily tracked by git.
.
├── citations
│ ├── citations
│ └── literature
├── data
│ ├── processed
│ │ ├── SPEI
│ │ └── SPEI_coarse
│ └── raw
│ └── SPEI_coarse
├── results
└── scripts
Github Repositories:
Get_Gridmet automate downloading data products from the Gridmet website. Used for Drought analyses.
plotpoststratification a framework for the generation of useful major vegetation strata at the scale of a single BLM field office.
UFOAIMCompliance Interim reporting throughout the life of the sample design, and analysis of nearly all indicators without plot weights.
UFOAIMPanel1FinalReport A framework for the assembly of many chapters of work into a BLM style report.
UFOcoverestimatesESDESG Compare the reference benchmark conditions for Ecological Sites, with 'Ecological Site Group' derived mean values.
UFO_drought Calculate the Standardized Precipitation Evapotranspiration Index (SPEI) at the scale of a BLM Office scale.
UFOelementsof_style Design elements for a consistent 5 year AIM report. We define palettes, ggplot themes, and write some function to automate plot creation for us.
UFOESDcompletion How much of each Ecological Site Description has been written? Which portions are present?
UFOESDmanual_classification Tools to help in retroactively identifying which ESD an AIM plot was located in. Helpful in Major Land Resource Area's which did not have their ES complete, or mapped to SSURGO, at the start of the sample design.
UFOnoxiousweeds Indentifying common noxious weeds, impacted ecological sites, and trends in their distributions from AIM data
UFOPlantDiversity These scripts serve as the heart of the interpretations of an AIM sample design. Their are four main scripts, each with a major focus which warrants a chapter (Functional Diversity, Species Diversity, Rare Species, Floristic Quality Index) in a report.
UFOSoilStability Analysing soil surface pedon stability, and contextualizing information regarding canopy cover and biocrusts
UFOWeightsfor_stratification The initial sample designs from the NOC may not include weights of plots broken down into special management areas. For examples, Wilderness areas, which have higher land health objectives than other BLM land. We recalculate the initial weights from these types of oversights in the initial design, and calculcate the weights of plots after sampling a panel has been completed.
UFOWeightedAnalyses Calculate the weighted summaries of numerous ecological indicators for multiple strata using spSurvey and AIM TerraDat Summaries
UFO_bareground compare the NOC values of bareground from a terradat summary to the benchmarks from the Reference Sheet of an ESD.
List of R packages
the following widely used packages are required for all scripts, or are common enough I can blanky say you should install them if you do not already have them:
install.packages(c("caret", "data.table", "kableExtra", "knitr", "RColorBrewer", "sf", "spsurvey", "terra", "tidyverse"))
If you only have a couple of these, don't worry about copy and pasting the above; it will only update packages, or if they are current, R will gracefully not re-install them.
The following packages are a little bit more uncommon, but are used throughout the project:
install.packages(c("bipartite", "cowplot", "ggalluvial", "ggnewscale", "ggpubr", "ggspatial", "ggthemes", "grid", "gridExtra", "hrbrthemes", "prism", "scales", "tigris", "waffle") )
bipartite (networks)
cowplot (multi-panel plots)
ggalluvial (alluvial plot)
ggnewscale (multiple fills per plot)
ggpubr (boxplots)
ggspatial (cartographic components)
ggthemes (pretty plots)
grid (graphics)
gridExtra (graphics)
hrbrthemes (waffeplots)
prism (climate)
scales (convert, and colors)
tigris (census bureau data)
waffle (waffleplots)
the following packages are only used once or twice throughout the project.
install.packages(c("circlize", "doParallel", "factoextra", "FactoMineR", "glcm", "gt", "here", "iNEXT", "jpeg", "MuMin", "parallel", "randomForest", "reshape2", "RImagePalette", "usdm", "vegan"))
circlize (circle graph, vegetation classification)
doParallel (split cores)
factoextra (PCA, vegetation classification)
FactoMineR (PCA, vegetation classification)
here (used in veg class, hoping to remove)
glcm (vegetation classification)
gt (fancy tables)
iNEXT (rarefaction, Species Diversity)
jpeg (import images)
MuMIn (multimodel inference, FQI)
parallel (split cores)
randomForest (Random Forest models, vegetation classification)
reshape2 (from long data to matrices, Species Diversity)
RImagePalette (extract colours fom images)
usdm (variance inflation factors, FQI)
vegan (plant ecology)
I probably missed a few... but you can curse me as you go.
Remember, start a FRESH r session (close R/Rstudio and reopen!) before installing these, so that you do not get the weird 'would you like to restart R before installing?' message.
Hardware Specs:
Parkland:
12th Gen Intel(R) Core(TM) i7-12700H
20 cores
RAM - 32gb
Lightscape:
11th gen Intel(R) Core(TM) i7---
16 cores
RAM - 128gb
Owner
- Name: Reed
- Login: sagesteppe
- Kind: user
- Location: Chicago and Western North America
- Repositories: 5
- Profile: https://github.com/sagesteppe
I shape informed land management decisions using data science to synthesize field surveys, remote sensing, & genetics data.
Citation (citations/citations/apa.csl)
<?xml version="1.0" encoding="utf-8"?>
<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" page-range-format="expanded">
<info>
<title>American Psychological Association 7th edition</title>
<title-short>APA</title-short>
<id>http://www.zotero.org/styles/apa</id>
<link href="http://www.zotero.org/styles/apa" rel="self"/>
<link href="http://www.zotero.org/styles/apa-6th-edition" rel="template"/>
<link href="https://apastyle.apa.org/style-grammar-guidelines/references/examples" rel="documentation"/>
<author>
<name>Brenton M. Wiernik</name>
<email>zotero@wiernik.org</email>
</author>
<category citation-format="author-date"/>
<category field="psychology"/>
<category field="generic-base"/>
<updated>2022-01-31T14:30:00+00:00</updated>
<rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights>
</info>
<locale xml:lang="en">
<terms>
<term name="editortranslator" form="short">
<single>ed. & trans.</single>
<multiple>eds. & trans.</multiple>
</term>
<term name="translator" form="short">trans.</term>
<term name="interviewer" form="short">
<single>interviewer</single>
<multiple>interviewers</multiple>
</term>
<term name="collection-editor" form="short">
<single>ed.</single>
<multiple>eds.</multiple>
</term>
<term name="circa" form="short">ca.</term>
<term name="bc"> B.C.E.</term>
<term name="ad"> C.E.</term>
<term name="letter">personal communication</term>
<term name="letter" form="short">letter</term>
<term name="issue" form="long">
<single>issue</single>
<multiple>issues</multiple>
</term>
</terms>
</locale>
<locale xml:lang="af">
<terms>
<term name="letter">persoonlike kommunikasie</term>
<term name="letter" form="short">brief</term>
</terms>
</locale>
<locale xml:lang="ar">
<terms>
<term name="letter">اتصال شخصي</term>
<term name="letter" form="short">خطاب</term>
</terms>
</locale>
<locale xml:lang="bg">
<terms>
<term name="letter">лична комуникация</term>
<term name="letter" form="short">писмо</term>
</terms>
</locale>
<locale xml:lang="ca">
<terms>
<term name="letter">comunicació personal</term>
<term name="letter" form="short">carta</term>
</terms>
</locale>
<locale xml:lang="cs">
<terms>
<term name="letter">osobní komunikace</term>
<term name="letter" form="short">dopis</term>
</terms>
</locale>
<locale xml:lang="cy">
<terms>
<term name="letter">cyfathrebu personol</term>
<term name="letter" form="short">llythyr</term>
</terms>
</locale>
<locale xml:lang="da">
<terms>
<term name="et-al">et al.</term>
<term name="letter">personlig kommunikation</term>
<term name="letter" form="short">brev</term>
</terms>
</locale>
<locale xml:lang="de">
<terms>
<term name="et-al">et al.</term>
<term name="letter">persönliche Kommunikation</term>
<term name="letter" form="short">Brief</term>
</terms>
</locale>
<locale xml:lang="el">
<terms>
<term name="letter">προσωπική επικοινωνία</term>
<term name="letter" form="short">επιστολή</term>
</terms>
</locale>
<locale xml:lang="es">
<terms>
<term name="from">de</term>
<term name="letter">comunicación personal</term>
<term name="letter" form="short">carta</term>
</terms>
</locale>
<locale xml:lang="et">
<terms>
<term name="letter">isiklik suhtlus</term>
<term name="letter" form="short">kiri</term>
</terms>
</locale>
<locale xml:lang="eu">
<terms>
<term name="letter">komunikazio pertsonala</term>
<term name="letter" form="short">gutuna</term>
</terms>
</locale>
<locale xml:lang="fa">
<terms>
<term name="letter">ارتباط شخصی</term>
<term name="letter" form="short">نامه</term>
</terms>
</locale>
<locale xml:lang="fi">
<terms>
<term name="letter">henkilökohtainen viestintä</term>
<term name="letter" form="short">kirje</term>
</terms>
</locale>
<locale xml:lang="fr">
<terms>
<term name="letter">communication personnelle</term>
<term name="letter" form="short">lettre</term>
<term name="editor" form="short">
<single>éd.</single>
<multiple>éds.</multiple>
</term>
</terms>
</locale>
<locale xml:lang="he">
<terms>
<term name="letter">תקשורת אישית</term>
<term name="letter" form="short">מכתב</term>
</terms>
</locale>
<locale xml:lang="hr">
<terms>
<term name="letter">osobna komunikacija</term>
<term name="letter" form="short">pismo</term>
</terms>
</locale>
<locale xml:lang="hu">
<terms>
<term name="letter">személyes kommunikáció</term>
<term name="letter" form="short">levél</term>
</terms>
</locale>
<locale xml:lang="id">
<terms>
<term name="letter">komunikasi pribadi</term>
<term name="letter" form="short">surat</term>
</terms>
</locale>
<locale xml:lang="is">
<terms>
<term name="letter">persónuleg samskipti</term>
<term name="letter" form="short">bréf</term>
</terms>
</locale>
<locale xml:lang="it">
<terms>
<term name="letter">comunicazione personale</term>
<term name="letter" form="short">lettera</term>
</terms>
</locale>
<locale xml:lang="ja">
<terms>
<term name="letter">個人的なやり取り</term>
<term name="letter" form="short">手紙</term>
</terms>
</locale>
<locale xml:lang="ko">
<terms>
<term name="letter">개인 서신</term>
<term name="letter" form="short">편지</term>
</terms>
</locale>
<locale xml:lang="la">
<terms>
<term name="letter"/>
<term name="letter" form="short">epistula</term>
</terms>
</locale>
<locale xml:lang="lt">
<terms>
<term name="letter">communicationis personalis</term>
<term name="letter" form="short"/>
</terms>
</locale>
<locale xml:lang="lv">
<terms>
<term name="letter">personīga komunikācija</term>
<term name="letter" form="short">vēstule</term>
</terms>
</locale>
<locale xml:lang="mn">
<terms>
<term name="letter">хувийн харилцаа холбоо</term>
<term name="letter" form="short">захиа</term>
</terms>
</locale>
<locale xml:lang="nb">
<terms>
<term name="et-al">et al.</term>
<term name="letter">personlig kommunikasjon</term>
<term name="letter" form="short">brev</term>
</terms>
</locale>
<locale xml:lang="nl">
<terms>
<term name="et-al">et al.</term>
<term name="letter">persoonlijke communicatie</term>
<term name="letter" form="short">brief</term>
</terms>
</locale>
<locale xml:lang="nn">
<terms>
<term name="et-al">et al.</term>
<term name="letter">personlig kommunikasjon</term>
<term name="letter" form="short">brev</term>
</terms>
</locale>
<locale xml:lang="pl">
<terms>
<term name="letter">osobista komunikacja</term>
<term name="letter" form="short">list</term>
</terms>
</locale>
<locale xml:lang="pt">
<terms>
<term name="letter">comunicação pessoal</term>
<term name="letter" form="short">carta</term>
</terms>
</locale>
<locale xml:lang="ro">
<terms>
<term name="letter">comunicare personală</term>
<term name="letter" form="short">scrisoare</term>
</terms>
</locale>
<locale xml:lang="ru">
<terms>
<term name="letter">личная переписка</term>
<term name="letter" form="short">письмо</term>
</terms>
</locale>
<locale xml:lang="sk">
<terms>
<term name="letter">osobná komunikácia</term>
<term name="letter" form="short">list</term>
</terms>
</locale>
<locale xml:lang="sl">
<terms>
<term name="letter">osebna komunikacija</term>
<term name="letter" form="short">pismo</term>
</terms>
</locale>
<locale xml:lang="sr">
<terms>
<term name="letter">лична комуникација</term>
<term name="letter" form="short">писмо</term>
</terms>
</locale>
<locale xml:lang="sv">
<terms>
<term name="letter">personlig kommunikation</term>
<term name="letter" form="short">brev</term>
</terms>
</locale>
<locale xml:lang="th">
<terms>
<term name="letter">การสื่อสารส่วนบุคคล</term>
<term name="letter" form="short">จดหมาย</term>
</terms>
</locale>
<locale xml:lang="tr">
<terms>
<term name="letter">kişisel iletişim</term>
<term name="letter" form="short">mektup</term>
</terms>
</locale>
<locale xml:lang="uk">
<terms>
<term name="letter">особисте спілкування</term>
<term name="letter" form="short">лист</term>
</terms>
</locale>
<locale xml:lang="vi">
<terms>
<term name="letter">giao tiếp cá nhân</term>
<term name="letter" form="short">thư</term>
</terms>
</locale>
<locale xml:lang="zh-CN">
<terms>
<term name="letter">的私人交流</term>
<term name="letter" form="short">信函</term>
</terms>
</locale>
<locale xml:lang="zh-TW">
<terms>
<term name="letter">私人通訊</term>
<term name="letter" form="short">信函</term>
</terms>
</locale>
<!-- General categories of item types:
Periodical: article-journal article-magazine article-newspaper post-weblog review review-book
Periodical or Booklike: paper-conference
Booklike: article book broadcast chapter dataset entry entry-dictionary entry-encyclopedia figure
graphic interview manuscript map motion_picture musical_score pamphlet patent
personal_communication report song speech thesis post webpage
Legal: bill legal_case legislation treaty
-->
<!-- APA references contain four parts: author, date, title, source -->
<macro name="author-bib">
<names variable="composer" delimiter=", ">
<name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<substitute>
<names variable="author"/>
<names variable="illustrator"/>
<names variable="director">
<name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<label form="long" prefix=" (" suffix=")" text-case="title"/>
</names>
<choose>
<if variable="container-title">
<choose>
<if type="book entry entry-dictionary entry-encyclopedia" match="any">
<choose>
<if variable="title">
<group delimiter=" ">
<text macro="title"/>
<text macro="parenthetical"/>
</group>
</if>
<else>
<text macro="title-and-descriptions"/>
</else>
</choose>
</if>
</choose>
</if>
</choose>
<!-- Test for editortranslator and put that first as that becomes available -->
<names variable="editor" delimiter=", ">
<name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<label form="short" prefix=" (" suffix=")" text-case="title"/>
</names>
<names variable="editorial-director">
<name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<label form="short" prefix=" (" suffix=")" text-case="title"/>
</names>
<names variable="collection-editor">
<name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/>
<label form="short" prefix=" (" suffix=")" text-case="title"/>
</names>
<choose>
<if variable="title">
<group delimiter=" ">
<text macro="title"/>
<text macro="parenthetical"/>
</group>
</if>
<else>
<text macro="title-and-descriptions"/>
</else>
</choose>
</substitute>
</names>
</macro>
<macro name="author-intext">
<choose>
<if type="bill legal_case legislation treaty" match="any">
<text macro="title-intext"/>
</if>
<else-if type="interview personal_communication" match="any">
<choose>
<!-- These variables indicate that the letter is retrievable by the reader.
If not, then use the APA in-text-only personal communication format -->
<if variable="archive container-title DOI publisher URL" match="none">
<group delimiter=", ">
<names variable="author">
<name and="symbol" delimiter=", " initialize-with=". "/>
<substitute>
<text macro="title-intext"/>
</substitute>
</names>
<!-- Replace with term="personal-communication" if that becomes available -->
<text term="letter"/>
</group>
</if>
<else>
<names variable="author" delimiter=", ">
<name form="short" and="symbol" delimiter=", " initialize-with=". "/>
<substitute>
<text macro="title-intext"/>
</substitute>
</names>
</else>
</choose>
</else-if>
<else>
<names variable="composer" delimiter=", ">
<name form="short" and="symbol" delimiter=", " initialize-with=". "/>
<substitute>
<names variable="author"/>
<names variable="illustrator"/>
<names variable="director"/>
<choose>
<if variable="container-title">
<choose>
<if type="book entry entry-dictionary entry-encyclopedia" match="any">
<text macro="title-intext"/>
</if>
</choose>
</if>
</choose>
<names variable="editor"/>
<names variable="editorial-director"/>
<text macro="title-intext"/>
</substitute>
</names>
</else>
</choose>
</macro>
<macro name="date-bib">
<group delimiter=" " prefix="(" suffix=")">
<choose>
<if is-uncertain-date="issued">
<text term="circa" form="short"/>
</if>
</choose>
<group>
<choose>
<if variable="issued">
<date variable="issued">
<date-part name="year"/>
</date>
<text variable="year-suffix"/>
<choose>
<if type="article-magazine article-newspaper broadcast interview motion_picture pamphlet personal_communication post post-weblog song speech webpage" match="any">
<!-- Many video and audio examples in manual give full dates. Err on the side of too much information. -->
<date variable="issued">
<date-part prefix=", " name="month"/>
<date-part prefix=" " name="day"/>
</date>
</if>
<else-if type="paper-conference">
<!-- Capture 'speech' stored as 'paper-conference' -->
<choose>
<if variable="collection-editor editor editorial-director issue page volume" match="none">
<date variable="issued">
<date-part prefix=", " name="month"/>
<date-part prefix=" " name="day"/>
</date>
</if>
</choose>
</else-if>
<!-- Only year: article article-journal book chapter entry entry-dictionary entry-encyclopedia dataset figure graphic
manuscript map musical_score paper-conference[published] patent report review review-book thesis -->
</choose>
</if>
<else-if variable="status">
<group>
<text variable="status" text-case="lowercase"/>
<text variable="year-suffix" prefix="-"/>
</group>
</else-if>
<else>
<text term="no date" form="short"/>
<text variable="year-suffix" prefix="-"/>
</else>
</choose>
</group>
</group>
</macro>
<macro name="date-sort-group">
<!-- APA sorts 1. no-date items, 2. items with dates, 3. in-press (status) items -->
<choose>
<if variable="issued">
<text value="1"/>
</if>
<else-if variable="status">
<text value="2"/>
</else-if>
<else>
<text value="0"/>
</else>
</choose>
</macro>
<macro name="date-sort-date">
<date variable="issued" form="numeric"/>
</macro>
<macro name="date-intext">
<choose>
<if variable="issued">
<group delimiter="/">
<group delimiter=" ">
<choose>
<if is-uncertain-date="original-date">
<text term="circa" form="short"/>
</if>
</choose>
<date variable="original-date">
<date-part name="year"/>
</date>
</group>
<group delimiter=" ">
<choose>
<if is-uncertain-date="issued">
<text term="circa" form="short"/>
</if>
</choose>
<group>
<choose>
<if type="interview personal_communication" match="any">
<choose>
<if variable="archive container-title DOI publisher URL" match="none">
<!-- These variables indicate that the communication is retrievable by the reader.
If not, then use the in-text-only personal communication format -->
<date variable="issued" form="text"/>
</if>
<else>
<date variable="issued">
<date-part name="year"/>
</date>
</else>
</choose>
</if>
<else>
<date variable="issued">
<date-part name="year"/>
</date>
</else>
</choose>
<text variable="year-suffix"/>
</group>
</group>
</group>
</if>
<else-if variable="status">
<text variable="status" text-case="lowercase"/>
<text variable="year-suffix" prefix="-"/>
</else-if>
<else>
<text term="no date" form="short"/>
<text variable="year-suffix" prefix="-"/>
</else>
</choose>
</macro>
<!-- APA has two description elements following the title:
title (parenthetical) [bracketed] -->
<macro name="title-and-descriptions">
<choose>
<if variable="title">
<group delimiter=" ">
<text macro="title"/>
<text macro="parenthetical"/>
<text macro="bracketed"/>
</group>
</if>
<else>
<group delimiter=" ">
<text macro="bracketed"/>
<text macro="parenthetical"/>
</group>
</else>
</choose>
</macro>
<macro name="title">
<choose>
<if type="post webpage" match="any">
<!-- Webpages are always italicized -->
<text variable="title" font-style="italic"/>
</if>
<else-if variable="container-title" match="any">
<!-- Other types are italicized based on presence of container-title.
Assume that review and review-book are published in periodicals/blogs,
not just on a web page (ex. 69) -->
<text variable="title"/>
</else-if>
<else>
<choose>
<if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any">
<text variable="title" font-style="italic"/>
</if>
<else-if type="paper-conference">
<choose>
<if variable="collection-editor editor editorial-director" match="any">
<group delimiter=": " font-style="italic">
<text variable="title"/>
<!-- Replace with volume-title as that becomes available -->
<choose>
<if is-numeric="volume" match="none">
<group delimiter=" ">
<label variable="volume" form="short" text-case="capitalize-first"/>
<text variable="volume"/>
</group>
</if>
</choose>
</group>
</if>
<else>
<text variable="title" font-style="italic"/>
</else>
</choose>
</else-if>
<else>
<group delimiter=": " font-style="italic">
<text variable="title"/>
<!-- Replace with volume-title as that becomes available -->
<choose>
<if is-numeric="volume" match="none">
<group delimiter=" ">
<label variable="volume" form="short" text-case="capitalize-first"/>
<text variable="volume"/>
</group>
</if>
</choose>
</group>
</else>
</choose>
</else>
</choose>
</macro>
<macro name="title-intext">
<choose>
<if variable="title" match="none">
<text macro="bracketed-intext" prefix="[" suffix="]"/>
</if>
<else-if type="bill">
<!-- If a bill has no number or container-title, assume it is a hearing; italic -->
<choose>
<if variable="number container-title" match="none">
<text variable="title" form="short" font-style="italic" text-case="title"/>
</if>
<else-if variable="title">
<text variable="title" form="short" text-case="title"/>
</else-if>
<else>
<group delimiter=" ">
<text variable="genre"/>
<group delimiter=" ">
<choose>
<if variable="chapter-number container-title" match="none">
<!-- Replace with label variable="number" as that becomes available -->
<text term="issue" form="short"/>
</if>
</choose>
<text variable="number"/>
</group>
</group>
</else>
</choose>
</else-if>
<else-if type="legal_case" match="any">
<!-- Cases are italicized -->
<text variable="title" font-style="italic"/>
</else-if>
<else-if type="legislation treaty" match="any">
<!-- Legislation and treaties not italicized or quoted -->
<text variable="title" form="short" text-case="title"/>
</else-if>
<else-if type="post webpage" match="any">
<!-- Webpages are always italicized -->
<text variable="title" form="short" font-style="italic" text-case="title"/>
</else-if>
<else-if variable="container-title" match="any">
<!-- Other types are italicized or quoted based on presence of container-title. As in title macro. -->
<text variable="title" form="short" quotes="true" text-case="title"/>
</else-if>
<else>
<text variable="title" form="short" font-style="italic" text-case="title"/>
</else>
</choose>
</macro>
<macro name="parenthetical">
<!-- (Secondary contributors; Database location; Genre no. 123; Report Series 123, Version, Edition, Volume, Page) -->
<group prefix="(" suffix=")">
<choose>
<if type="patent">
<!-- authority: U.S. ; genre: patent ; number: 123,445 -->
<group delimiter=" ">
<text variable="authority" form="short"/>
<choose>
<if variable="genre">
<text variable="genre" text-case="capitalize-first"/>
</if>
<else>
<!-- This should be localized -->
<text value="patent" text-case="capitalize-first"/>
</else>
</choose>
<group delimiter=" ">
<!-- Replace with label variable="number" if that becomes available -->
<text term="issue" form="short" text-case="capitalize-first"/>
<text variable="number"/>
</group>
</group>
</if>
<else-if type="post webpage" match="any">
<!-- For post webpage, container-title is treated as publisher -->
<group delimiter="; ">
<text macro="secondary-contributors"/>
<text macro="database-location"/>
<text macro="number"/>
<text macro="locators-booklike"/>
</group>
</else-if>
<else-if variable="container-title">
<group delimiter="; ">
<text macro="secondary-contributors"/>
<choose>
<if type="broadcast graphic map motion_picture song" match="any">
<!-- For audiovisual media, number information comes after title, not container-title -->
<text macro="number"/>
</if>
</choose>
</group>
</else-if>
<else>
<group delimiter="; ">
<text macro="secondary-contributors"/>
<text macro="database-location"/>
<text macro="number"/>
<text macro="locators-booklike"/>
</group>
</else>
</choose>
</group>
</macro>
<macro name="parenthetical-container">
<choose>
<if variable="container-title" match="any">
<group prefix="(" suffix=")">
<group delimiter="; ">
<text macro="database-location"/>
<choose>
<if type="broadcast graphic map motion_picture song" match="none">
<!-- For audiovisual media, number information comes after title, not container-title -->
<text macro="number"/>
</if>
</choose>
<text macro="locators-booklike"/>
</group>
</group>
</if>
</choose>
</macro>
<macro name="bracketed">
<!-- [Descriptive information] -->
<!-- If there is a number, genre is already printed in macro="number" -->
<group prefix="[" suffix="]">
<choose>
<if variable="reviewed-author reviewed-title" type="review review-book" match="any">
<!-- Reviewed item -->
<group delimiter="; ">
<group delimiter=", ">
<group delimiter=" ">
<!-- Assume that genre is entered as 'Review of the book' or similar -->
<choose>
<if variable="number" match="none">
<choose>
<if variable="genre">
<text variable="genre" text-case="capitalize-first"/>
</if>
<else-if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
</else-if>
<else>
<!-- Replace with term="review" as that becomes available -->
<text value="Review of"/>
</else>
</choose>
</if>
<else>
<choose>
<if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
</if>
<else>
<!-- Replace with term="review" as that becomes available -->
<text value="Review of"/>
</else>
</choose>
</else>
</choose>
<text macro="reviewed-title"/>
</group>
<names variable="reviewed-author">
<label form="verb-short" suffix=" "/>
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</group>
<choose>
<if variable="genre" match="any">
<choose>
<if variable="number" match="none">
<text variable="medium" text-case="capitalize-first"/>
</if>
</choose>
</if>
</choose>
</group>
</if>
<else-if type="thesis">
<!-- Thesis type and institution -->
<group delimiter="; ">
<choose>
<if variable="number" match="none">
<group delimiter=", ">
<text variable="genre" text-case="capitalize-first"/>
<choose>
<if variable="archive DOI URL" match="any">
<!-- Include the university in brackets if thesis is published -->
<text variable="publisher"/>
</if>
</choose>
</group>
</if>
</choose>
<text variable="medium" text-case="capitalize-first"/>
</group>
</else-if>
<else-if variable="interviewer" type="interview" match="any">
<!-- Interview information -->
<choose>
<if variable="title">
<text macro="format"/>
</if>
<else-if variable="genre">
<group delimiter="; ">
<group delimiter=" ">
<text variable="genre" text-case="capitalize-first"/>
<group delimiter=" ">
<text term="author" form="verb"/>
<names variable="interviewer">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</group>
</group>
</group>
</else-if>
<else-if variable="interviewer">
<group delimiter="; ">
<names variable="interviewer">
<label form="verb" suffix=" " text-case="capitalize-first"/>
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
<text variable="medium" text-case="capitalize-first"/>
</group>
</else-if>
<else>
<text macro="format"/>
</else>
</choose>
</else-if>
<else-if type="personal_communication">
<!-- Letter information -->
<choose>
<if variable="recipient">
<group delimiter="; ">
<group delimiter=" ">
<choose>
<if variable="number" match="none">
<choose>
<if variable="genre">
<text variable="genre" text-case="capitalize-first"/>
</if>
<else-if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
</else-if>
<else>
<text term="letter" form="short" text-case="capitalize-first"/>
</else>
</choose>
</if>
<else>
<choose>
<if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
</if>
<else>
<text term="letter" form="short" text-case="capitalize-first"/>
</else>
</choose>
</else>
</choose>
<names variable="recipient" delimiter=", ">
<label form="verb" suffix=" "/>
<name and="symbol" delimiter=", "/>
</names>
</group>
<choose>
<if variable="genre" match="any">
<choose>
<if variable="number" match="none">
<text variable="medium" text-case="capitalize-first"/>
</if>
</choose>
</if>
</choose>
</group>
</if>
<else>
<text macro="format"/>
</else>
</choose>
</else-if>
<else-if variable="composer" type="song" match="all">
<!-- Performer of classical music works -->
<group delimiter="; ">
<choose>
<if variable="number" match="none">
<group delimiter=" ">
<choose>
<if variable="genre">
<text variable="genre" text-case="capitalize-first"/>
<!-- Replace prefix with performer label as that becomes available -->
<names variable="author" prefix="recorded by ">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</if>
<else-if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
<!-- Replace prefix with performer label as that becomes available -->
<names variable="author" prefix="recorded by ">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</else-if>
<else>
<!-- Replace prefix with performer label as that becomes available -->
<names variable="author" prefix="Recorded by ">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</else>
</choose>
</group>
</if>
<else>
<group delimiter=" ">
<choose>
<if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
<!-- Replace prefix with performer label as that becomes available -->
<names variable="author" prefix="recorded by ">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</if>
<else>
<!-- Replace prefix with performer label as that becomes available -->
<names variable="author" prefix="Recorded by ">
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
</else>
</choose>
</group>
</else>
</choose>
<choose>
<if variable="genre" match="any">
<choose>
<if variable="number" match="none">
<text variable="medium" text-case="capitalize-first"/>
</if>
</choose>
</if>
</choose>
</group>
</else-if>
<else-if variable="container-title" match="none">
<!-- Other description -->
<text macro="format"/>
</else-if>
<else>
<!-- For conference presentations, chapters in reports, software, place bracketed after the container title -->
<choose>
<if type="paper-conference speech" match="any">
<choose>
<if variable="collection-editor editor editorial-director issue page volume" match="any">
<text macro="format"/>
</if>
</choose>
</if>
<else-if type="book">
<choose>
<if variable="version" match="none">
<text macro="format"/>
</if>
</choose>
</else-if>
<else-if type="report" match="none">
<text macro="format"/>
</else-if>
</choose>
</else>
</choose>
</group>
</macro>
<macro name="bracketed-intext">
<group prefix="[" suffix="]">
<choose>
<if variable="reviewed-author reviewed-title" type="review review-book" match="any">
<!-- This should be localized -->
<text macro="reviewed-title-intext" prefix="Review of "/>
</if>
<else-if variable="interviewer" type="interview" match="any">
<names variable="interviewer">
<label form="verb" suffix=" " text-case="capitalize-first"/>
<name and="symbol" initialize-with=". " delimiter=", "/>
<substitute>
<text macro="format-intext"/>
</substitute>
</names>
</else-if>
<else-if type="personal_communication">
<!-- Letter information -->
<choose>
<if variable="recipient">
<group delimiter=" ">
<choose>
<if variable="number" match="none">
<text variable="genre" text-case="capitalize-first"/>
</if>
<else>
<text term="letter" form="short" text-case="capitalize-first"/>
</else>
</choose>
<names variable="recipient" delimiter=", ">
<label form="verb" suffix=" "/>
<name and="symbol" delimiter=", "/>
</names>
</group>
</if>
<else>
<text macro="format-intext"/>
</else>
</choose>
</else-if>
<else>
<text macro="format-intext"/>
</else>
</choose>
</group>
</macro>
<macro name="bracketed-container">
<group prefix="[" suffix="]">
<choose>
<if type="paper-conference speech" match="any">
<!-- Conference presentations should describe the session [container] in bracketed unless published in a proceedings -->
<choose>
<if variable="collection-editor editor editorial-director issue page volume" match="none">
<text macro="format"/>
</if>
</choose>
</if>
<else-if type="book" variable="version" match="all">
<!-- For entries in mobile app reference works, place bracketed after the container-title -->
<text macro="format"/>
</else-if>
<else-if type="report">
<!-- For chapters in reports, place bracketed after the container title -->
<text macro="format"/>
</else-if>
</choose>
</group>
</macro>
<macro name="secondary-contributors">
<choose>
<if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any">
<text macro="secondary-contributors-periodical"/>
</if>
<else-if type="paper-conference">
<choose>
<if variable="collection-editor editor editorial-director" match="any">
<text macro="secondary-contributors-booklike"/>
</if>
<else>
<text macro="secondary-contributors-periodical"/>
</else>
</choose>
</else-if>
<else>
<text macro="secondary-contributors-booklike"/>
</else>
</choose>
</macro>
<macro name="secondary-contributors-periodical">
<group delimiter="; ">
<choose>
<if variable="title">
<names variable="interviewer" delimiter="; ">
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" prefix=", " text-case="title"/>
</names>
</if>
</choose>
<names variable="translator" delimiter="; ">
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" prefix=", " text-case="title"/>
</names>
</group>
</macro>
<macro name="secondary-contributors-booklike">
<group delimiter="; ">
<choose>
<if variable="title">
<names variable="interviewer">
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" prefix=", " text-case="title"/>
</names>
</if>
</choose>
<!-- When editortranslator becomes available, add a test: variable="editortranslator" match="none"; then print translator -->
<choose>
<if type="post webpage" match="none">
<!-- Webpages treat container-title like publisher -->
<choose>
<if variable="container-title" match="none">
<group delimiter="; ">
<names variable="container-author">
<label form="verb-short" suffix=" " text-case="title"/>
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
<names variable="editor translator" delimiter="; ">
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" prefix=", " text-case="title"/>
</names>
</group>
</if>
</choose>
</if>
<else>
<group delimiter="; ">
<names variable="container-author">
<label form="verb-short" suffix=" " text-case="title"/>
<name and="symbol" initialize-with=". " delimiter=", "/>
</names>
<names variable="editor translator" delimiter="; ">
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" prefix=", " text-case="title"/>
</names>
</group>
</else>
</choose>
</group>
</macro>
<macro name="database-location">
<choose>
<if variable="archive-place" match="none">
<!-- With `archive-place`: physical archives. Without: online archives. -->
<!-- Add archive_collection as that becomes available -->
<text variable="archive_location"/>
</if>
</choose>
</macro>
<macro name="number">
<choose>
<if variable="number">
<group delimiter=", ">
<group delimiter=" ">
<text variable="genre" text-case="title"/>
<choose>
<if is-numeric="number">
<!-- Replace with label variable="number" if that becomes available -->
<text term="issue" form="short" text-case="capitalize-first"/>
<text variable="number"/>
</if>
<else>
<text variable="number"/>
</else>
</choose>
</group>
<choose>
<if type="thesis">
<choose>
<!-- Include the university in brackets if thesis is published -->
<if variable="archive DOI URL" match="any">
<text variable="publisher"/>
</if>
</choose>
</if>
</choose>
</group>
</if>
</choose>
</macro>
<macro name="locators-booklike">
<choose>
<if type="article-journal article-magazine article-newspaper broadcast interview patent post post-weblog review review-book speech webpage" match="any"/>
<else-if type="paper-conference">
<choose>
<if variable="collection-editor editor editorial-director" match="any">
<group delimiter=", ">
<text macro="version"/>
<text macro="edition"/>
<text macro="volume-booklike"/>
</group>
</if>
</choose>
</else-if>
<else>
<group delimiter=", ">
<text macro="version"/>
<text macro="edition"/>
<text macro="volume-booklike"/>
</group>
</else>
</choose>
</macro>
<macro name="version">
<choose>
<if is-numeric="version">
<group delimiter=" ">
<!-- replace with label variable="version" if that becomes available -->
<text term="version" text-case="capitalize-first"/>
<text variable="version"/>
</group>
</if>
<else>
<text variable="version"/>
</else>
</choose>
</macro>
<macro name="edition">
<choose>
<if is-numeric="edition">
<group delimiter=" ">
<number variable="edition" form="ordinal"/>
<label variable="edition" form="short"/>
</group>
</if>
<else>
<text variable="edition"/>
</else>
</choose>
</macro>
<macro name="volume-booklike">
<group delimiter=", ">
<!-- Report series [ex. 52] -->
<choose>
<if type="report">
<group delimiter=" ">
<text variable="collection-title" text-case="title"/>
<text variable="collection-number"/>
</group>
</if>
</choose>
<choose>
<if variable="volume" match="any">
<choose>
<!-- Non-numeric volumes are already printed as part of the book title -->
<if is-numeric="volume" match="none"/>
<else>
<group delimiter=" ">
<label variable="volume" form="short" text-case="capitalize-first"/>
<number variable="volume" form="numeric"/>
</group>
</else>
</choose>
</if>
<else>
<group>
<!-- Replace with label variable="number-of-volumes" if that becomes available -->
<text term="volume" form="short" text-case="capitalize-first" suffix=" "/>
<text term="page-range-delimiter" prefix="1"/>
<number variable="number-of-volumes" form="numeric"/>
</group>
</else>
</choose>
<group delimiter=" ">
<label variable="issue" text-case="capitalize-first"/>
<text variable="issue"/>
</group>
<group delimiter=" ">
<label variable="page" form="short" suffix=" "/>
<text variable="page"/>
</group>
</group>
</macro>
<macro name="reviewed-title">
<choose>
<if variable="reviewed-title">
<!-- Not possible to distinguish TV series episode from other reviewed
works [Ex. 69] -->
<text variable="reviewed-title" font-style="italic"/>
</if>
<else>
<!-- Assume title is title of reviewed work -->
<text variable="title" font-style="italic"/>
</else>
</choose>
</macro>
<macro name="reviewed-title-intext">
<choose>
<if variable="reviewed-title">
<!-- Not possible to distinguish TV series episode from other reviewed works [Ex. 69] -->
<text variable="reviewed-title" form="short" font-style="italic" text-case="title"/>
</if>
<else>
<!-- Assume title is title of reviewed work -->
<text variable="title" form="short" font-style="italic" text-case="title"/>
</else>
</choose>
</macro>
<macro name="format">
<choose>
<if variable="genre medium" match="any">
<group delimiter="; ">
<choose>
<if variable="number" match="none">
<text variable="genre" text-case="capitalize-first"/>
</if>
</choose>
<text variable="medium" text-case="capitalize-first"/>
</group>
</if>
<!-- Generic labels for specific types -->
<!-- These should be localized when possible -->
<else-if type="dataset">
<text value="Data set"/>
</else-if>
<else-if type="book" variable="version" match="all">
<!-- Replace with type="software" and term="software" as that becomes available -->
<text value="Computer software"/>
</else-if>
<else-if type="interview personal_communication" match="any">
<choose>
<if variable="archive container-title DOI publisher URL" match="none">
<text term="letter" text-case="capitalize-first"/>
</if>
<else-if type="interview">
<text term="interview" text-case="capitalize-first"/>
</else-if>
</choose>
</else-if>
<else-if type="map">
<text value="Map"/>
</else-if>
</choose>
</macro>
<macro name="format-intext">
<choose>
<if variable="genre" match="any">
<text variable="genre" text-case="capitalize-first"/>
</if>
<else-if variable="medium">
<text variable="medium" text-case="capitalize-first"/>
</else-if>
<!-- Generic labels for specific types -->
<!-- These should be localized when possible -->
<else-if type="dataset">
<text value="Data set"/>
</else-if>
<else-if type="book" variable="version" match="all">
<!-- Replace with type="software" and term="software" as that becomes available -->
<text value="Computer software"/>
</else-if>
<else-if type="interview personal_communication" match="any">
<choose>
<if variable="archive container-title DOI publisher URL" match="none">
<text term="letter" text-case="capitalize-first"/>
</if>
<else-if type="interview">
<text term="interview" text-case="capitalize-first"/>
</else-if>
</choose>
</else-if>
<else-if type="map">
<text value="Map"/>
</else-if>
</choose>
</macro>
<!-- APA 'source' element contains four parts:
container, event, publisher, access -->
<macro name="container">
<choose>
<if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any">
<!-- Periodical items -->
<text macro="container-periodical"/>
</if>
<else-if type="paper-conference">
<!-- Determine if paper-conference is a periodical or booklike -->
<choose>
<if variable="editor editorial-director collection-editor container-author" match="any">
<text macro="container-booklike"/>
</if>
<else>
<text macro="container-periodical"/>
</else>
</choose>
</else-if>
<else-if type="post webpage" match="none">
<!-- post and webpage treat container-title like publisher -->
<text macro="container-booklike"/>
</else-if>
</choose>
</macro>
<macro name="container-periodical">
<group delimiter=". ">
<group delimiter=", ">
<text variable="container-title" font-style="italic" text-case="title"/>
<choose>
<if variable="volume">
<group>
<text variable="volume" font-style="italic"/>
<text variable="issue" prefix="(" suffix=")"/>
</group>
</if>
<else>
<text variable="issue" font-style="italic"/>
</else>
</choose>
<choose>
<if variable="number">
<!-- Ex. 6: Journal article with article number or eLocator -->
<!-- This should be localized -->
<group delimiter=" ">
<text term="article-locator" text-case="capitalize-first"/>
<text variable="number"/>
</group>
</if>
<else>
<text variable="page"/>
</else>
</choose>
</group>
<choose>
<if variable="issued">
<choose>
<if variable="issue page volume" match="none">
<text variable="status" text-case="capitalize-first"/>
</if>
</choose>
</if>
</choose>
</group>
</macro>
<macro name="container-booklike">
<choose>
<if variable="container-title" match="any">
<group delimiter=" ">
<text term="in" text-case="capitalize-first"/>
<group delimiter=", ">
<names variable="editor translator" delimiter=", & ">
<!-- Change to editortranslator and move editor to substitute as that becomes available -->
<name and="symbol" initialize-with=". " delimiter=", "/>
<label form="short" text-case="title" prefix=" (" suffix=")"/>
<substitute>
<names variable="editorial-director"/>
<names variable="collection-editor"/>
<names variable="container-author"/>
</substitute>
</names>
<group delimiter=": " font-style="italic">
<text variable="container-title"/>
<!-- Replace with volume-title as that becomes available -->
<choose>
<if is-numeric="volume" match="none">
<group delimiter=" ">
<label variable="volume" form="short" text-case="capitalize-first"/>
<text variable="volume"/>
</group>
</if>
</choose>
</group>
</group>
<text macro="parenthetical-container"/>
<text macro="bracketed-container"/>
</group>
</if>
</choose>
</macro>
<macro name="publisher">
<group delimiter="; ">
<choose>
<if type="thesis">
<choose>
<if variable="archive DOI URL" match="none">
<text variable="publisher"/>
</if>
</choose>
</if>
<else-if type="post webpage" match="any">
<!-- For websites, treat container title like publisher -->
<group delimiter="; ">
<text variable="container-title" text-case="title"/>
<text variable="publisher"/>
</group>
</else-if>
<else-if type="paper-conference">
<!-- For paper-conference, don't print publisher if in a journal-like proceedings -->
<choose>
<if variable="collection-editor editor editorial-director" match="any">
<text variable="publisher"/>
</if>
</choose>
</else-if>
<else-if type="article-journal article-magazine article-newspaper post-weblog" match="none">
<text variable="publisher"/>
</else-if>
</choose>
<group delimiter=", ">
<choose>
<if variable="archive-place">
<!-- With `archive-place`: physical archives. Without: online archives. -->
<!-- For physical archives, print the location before the archive name.
For electronic archives, these are printed in macro="description". -->
<!-- Split "archive_location" into "archive_collection" and "archive_location" as that becomes available -->
<!-- Must test for archive_collection:
With collection: archive_collection (archive_location), archive, archive-place
No collection: archive (archive_location), archive-place
-->
<text variable="archive_location"/>
</if>
</choose>
<text variable="archive"/>
<text variable="archive-place"/>
</group>
</group>
</macro>
<macro name="access">
<choose>
<if variable="DOI" match="any">
<text variable="DOI" prefix="https://doi.org/"/>
</if>
<else-if variable="URL">
<group delimiter=" ">
<choose>
<if variable="issued status" match="none">
<group delimiter=" ">
<text term="retrieved" text-case="capitalize-first"/>
<date variable="accessed" form="text" suffix=","/>
<text term="from"/>
</group>
</if>
</choose>
<text variable="URL"/>
</group>
</else-if>
</choose>
</macro>
<macro name="event">
<choose>
<if variable="event event-title" match="any">
<!-- To prevent Zotero from printing event-place due to its double-mapping of all 'place' to
both publisher-place and event-place. Remove this 'choose' when that is changed. -->
<choose>
<if variable="collection-editor editor editorial-director issue page volume" match="none">
<!-- Don't print event info if published in a proceedings -->
<group delimiter=", ">
<text macro="event-title"/>
<text variable="event-place"/>
</group>
</if>
</choose>
</if>
</choose>
</macro>
<macro name="event-title">
<choose>
<!-- TODO: We expect "event-title" to be used,
but processors and applications may not be updated yet.
This macro ensures that either "event" or "event-title" can be accpeted.
Remove if procesor logic and application adoption can handle this. -->
<if variable="event-title">
<text variable="event-title"/>
</if>
<else>
<text variable="event"/>
</else>
</choose>
</macro>
<!-- After 'source', APA also prints publication history (original publication, reprint info, retraction info) -->
<macro name="publication-history">
<choose>
<if type="patent" match="none">
<group prefix="(" suffix=")">
<choose>
<if variable="references">
<!-- This provides the option for more elaborate description
of publication history, such as full "reprinted" references
(examples 11, 43, 44) or retracted references -->
<text variable="references"/>
</if>
<else>
<group delimiter=" ">
<text value="Original work published"/>
<choose>
<if is-uncertain-date="original-date">
<text term="circa" form="short"/>
</if>
</choose>
<date variable="original-date">
<date-part name="year"/>
</date>
</group>
</else>
</choose>
</group>
</if>
<else>
<text variable="references" prefix="(" suffix=")"/>
</else>
</choose>
</macro>
<!-- Legal citations have their own rules -->
<macro name="legal-cites">
<choose>
<if type="legal_case">
<group delimiter=". ">
<group delimiter=", ">
<text variable="title"/>
<group delimiter=" ">
<text macro="container-legal"/>
<text macro="date-legal"/>
</group>
<text variable="references"/>
</group>
<text macro="access"/>
</group>
</if>
<else-if type="bill">
<!-- Currently designed to handle bills, resolutions, hearings, rederal reports. -->
<group delimiter=". ">
<group delimiter=", ">
<choose>
<if variable="number container-title" match="none">
<!-- If no number or container-title, then assume it is a hearing -->
<text variable="title" font-style="italic"/>
</if>
<else>
<text variable="title"/>
</else>
</choose>
<group delimiter=" ">
<text macro="container-legal"/>
<text macro="date-legal"/>
<choose>
<if variable="number container-title" match="none">
<!-- If no number or container-title, then assume it is a hearing -->
<names variable="author" prefix="(testimony of " suffix=")">
<name and="symbol" delimiter=", "/>
</names>
</if>
<else>
<text variable="status" prefix="(" suffix=")"/>
</else>
</choose>
</group>
<text variable="references"/>
</group>
<text macro="access"/>
</group>
</else-if>
<else-if type="legislation">
<!-- Currently designed to handle statutes, codified regulations, executive orders.
For uncodified regulations, assume future code section is in status. -->
<group delimiter=". ">
<group delimiter=", ">
<text variable="title"/>
<group delimiter=" ">
<text macro="container-legal"/>
<text macro="date-legal"/>
<text variable="status" prefix="(" suffix=")"/>
</group>
<text variable="references"/>
</group>
<text macro="access"/>
</group>
</else-if>
<else-if type="treaty">
<!-- APA generally defers to Bluebook for legal citations, but diverges without
explanation for treaty items. The Bluebook format that was used in APA 6th
ed. is used here. -->
<group delimiter=", ">
<text variable="title" text-case="title"/>
<names variable="author">
<name initialize-with="." form="short" delimiter="-"/>
</names>
<text macro="date-legal"/>
<text macro="container-legal"/>
<text macro="access"/>
</group>
</else-if>
</choose>
</macro>
<macro name="date-legal">
<choose>
<if type="legal_case">
<group prefix="(" suffix=")" delimiter=" ">
<text variable="authority"/>
<choose>
<if variable="container-title" match="any">
<!-- Print only year for cases published in reporters-->
<date variable="issued" form="numeric" date-parts="year"/>
</if>
<else>
<date variable="issued" form="text"/>
</else>
</choose>
</group>
</if>
<else-if type="bill legislation" match="any">
<group prefix="(" suffix=")" delimiter=" ">
<group delimiter=" ">
<date variable="original-date">
<date-part name="year"/>
</date>
<text term="and" form="symbol"/>
</group>
<date variable="issued">
<date-part name="year"/>
</date>
</group>
</else-if>
<else-if type="treaty">
<date variable="issued" form="text"/>
</else-if>
</choose>
</macro>
<macro name="container-legal">
<!-- Expect legal item container-titles to be stored in short form -->
<choose>
<if type="legal_case">
<group delimiter=" ">
<choose>
<if variable="container-title">
<group delimiter=" ">
<text variable="volume"/>
<text variable="container-title"/>
<group delimiter=" ">
<!-- Change to label variable="section" as that becomes available -->
<text term="section" form="symbol"/>
<text variable="section"/>
</group>
<choose>
<if variable="page page-first" match="any">
<text variable="page-first"/>
</if>
<else>
<text value="___"/>
</else>
</choose>
</group>
</if>
<else>
<group delimiter=" ">
<choose>
<if is-numeric="number">
<!-- Replace with label variable="number" if that becomes available -->
<text term="issue" form="short" text-case="capitalize-first"/>
</if>
</choose>
<text variable="number"/>
</group>
</else>
</choose>
</group>
</if>
<else-if type="bill">
<group delimiter=", ">
<group delimiter=" ">
<text variable="genre"/>
<group delimiter=" ">
<choose>
<if variable="chapter-number container-title" match="none">
<!-- Replace with label variable="number" as that becomes available -->
<text term="issue" form="short"/>
</if>
</choose>
<text variable="number"/>
</group>
</group>
<text variable="authority"/>
<text variable="chapter-number"/>
<group delimiter=" ">
<text variable="volume"/>
<text variable="container-title"/>
<text variable="page-first"/>
</group>
</group>
</else-if>
<else-if type="legislation">
<choose>
<if variable="number">
<!--There's a public law number-->
<group delimiter=", ">
<text variable="number" prefix="Pub. L. No. "/>
<group delimiter=" ">
<text variable="volume"/>
<text variable="container-title"/>
<text variable="page-first"/>
</group>
</group>
</if>
<else>
<group delimiter=" ">
<text variable="volume"/>
<text variable="container-title"/>
<choose>
<if variable="section">
<group delimiter=" ">
<!-- Change to label variable="section" as that becomes available -->
<text term="section" form="symbol"/>
<text variable="section"/>
</group>
</if>
<else>
<text variable="page-first"/>
</else>
</choose>
</group>
</else>
</choose>
</else-if>
<else-if type="treaty">
<group delimiter=" ">
<number variable="volume"/>
<text variable="container-title"/>
<choose>
<if variable="page page-first" match="any">
<text variable="page-first"/>
</if>
<else>
<group delimiter=" ">
<!-- Replace with label variable="number" if that becomes available -->
<text term="issue" form="short" text-case="capitalize-first"/>
<text variable="number"/>
</group>
</else>
</choose>
</group>
</else-if>
</choose>
</macro>
<macro name="citation-locator">
<group delimiter=" ">
<choose>
<if locator="chapter">
<label variable="locator" text-case="capitalize-first"/>
</if>
<else>
<label variable="locator" form="short"/>
</else>
</choose>
<text variable="locator"/>
</group>
</macro>
<citation et-al-min="3" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" collapse="year" givenname-disambiguation-rule="primary-name-with-initials">
<sort>
<key macro="author-bib" names-min="3" names-use-first="1"/>
<key macro="date-sort-group"/>
<key macro="date-sort-date" sort="ascending"/>
<key variable="status"/>
</sort>
<layout prefix="(" suffix=")" delimiter="; ">
<group delimiter=", ">
<text macro="author-intext"/>
<text macro="date-intext"/>
<text macro="citation-locator"/>
</group>
</layout>
</citation>
<bibliography hanging-indent="true" et-al-min="21" et-al-use-first="19" et-al-use-last="true" entry-spacing="0" line-spacing="2">
<sort>
<key macro="author-bib"/>
<key macro="date-sort-group"/>
<key macro="date-sort-date" sort="ascending"/>
<key variable="status"/>
<key macro="title"/>
</sort>
<layout>
<choose>
<if type="bill legal_case legislation treaty" match="any">
<!-- Legal items have different orders and delimiters -->
<choose>
<if variable="DOI URL" match="any">
<text macro="legal-cites"/>
</if>
<else>
<text macro="legal-cites" suffix="."/>
</else>
</choose>
</if>
<else>
<group delimiter=" ">
<group delimiter=". " suffix=".">
<text macro="author-bib"/>
<text macro="date-bib"/>
<text macro="title-and-descriptions"/>
<text macro="container"/>
<text macro="event"/>
<text macro="publisher"/>
</group>
<text macro="access"/>
<text macro="publication-history"/>
</group>
</else>
</choose>
</layout>
</bibliography>
</style>