├── .gitignore ├── README.md ├── latin-conjugations-worksheet.yaml ├── latin-1.yaml ├── latin-3.yaml ├── latin-2.yaml ├── latin-4.yaml ├── latin-3i.yaml ├── latin-conjugations.pv └── latin-conjugations-worksheet.pv /.gitignore: -------------------------------------------------------------------------------- 1 | yaml/ 2 | *.pdf 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Latin conjugations chart 2 | 3 | Uses [PlotDevice](http://plotdevice.io). 4 | 5 | 6 | ### Installation 7 | 8 | - Download [PyYAML](http://pyyaml.org/wiki/PyYAML) (the zipfile is fine). 9 | - Unpack it. 10 | - Copy the `yaml` directory (inside of `lib`) into `~/Library/Application Support/PlotDevice` or the same directory as these files (per [the manual](http://plotdevice.io/tut/Libraries)). 11 | 12 | 13 | ### Usage 14 | 15 | On line 4 of `latin-conjugations.pv`, change `latin-1.yaml` to one of the other data filenames and rerun the script in PlotDevice. 16 | -------------------------------------------------------------------------------- /latin-conjugations-worksheet.yaml: -------------------------------------------------------------------------------- 1 | label: Conjugation Worksheet 2 | output: latin-conjugations-worksheet.pdf 3 | updated: 1 November 2018 4 | example_word: "Word:" 5 | left: 6 | - title: Active Indicative 7 | fill: "#cb202c" 8 | groups: 9 | - "Present | __________ | __________ | __________ | __________ | __________ | __________" 10 | - "Imperfect | __________ | __________ | __________ | __________ | __________ | __________" 11 | - "Future | __________ | __________ | __________ | __________ | __________ | __________" 12 | - "Perfect | __________ | __________ | __________ | __________ | __________ | __________" 13 | - "Pluperfect | __________ | __________ | __________ | __________ | __________ | __________" 14 | - "Future Perfect | __________ | __________ | __________ | __________ | __________ | __________" 15 | 16 | - title: Passive Indicative 17 | fill: "#cb202c" 18 | groups: 19 | - "Present | __________ | __________ | __________ | __________ | __________ | __________" 20 | - "Imperfect | __________ | __________ | __________ | __________ | __________ | __________" 21 | - "Future | __________ | __________ | __________ | __________ | __________ | __________" 22 | - "Perfect | __________ | __________ | __________ | __________ | __________ | __________" 23 | - "Pluperfect | __________ | __________ | __________ | __________ | __________ | __________" 24 | - "Future Perfect | __________ | __________ | __________ | __________ | __________ | __________" 25 | 26 | - title: Active Subjunctive 27 | fill: "#2075cb" 28 | groups: 29 | - "Present | __________ | __________ | __________ | __________ | __________ | __________" 30 | - "Imperfect | __________ | __________ | __________ | __________ | __________ | __________" 31 | - " | | | | | | " 32 | - "Perfect | __________ | __________ | __________ | __________ | __________ | __________" 33 | - "Pluperfect | __________ | __________ | __________ | __________ | __________ | __________" 34 | - " | | | | | | " 35 | 36 | - title: Passive Subjunctive 37 | fill: "#2075cb" 38 | groups: 39 | - "Present | __________ | __________ | __________ | __________ | __________ | __________" 40 | - "Imperfect | __________ | __________ | __________ | __________ | __________ | __________" 41 | - " | | | | | | " 42 | - "Perfect | __________ | __________ | __________ | __________ | __________ | __________" 43 | - "Pluperfect | __________ | __________ | __________ | __________ | __________ | __________" 44 | - " | | | | | | " 45 | 46 | right: 47 | - title: Infinitive 48 | fill: "#42b314" 49 | groups: 50 | - "Present | __________ | __________" 51 | - "Future | __________ | __________" 52 | - "Perfect | __________ | __________" 53 | 54 | - title: Participle 55 | fill: "#b2640a" 56 | groups: 57 | - "Present | __________ |" 58 | - "Future | __________ | __________" 59 | - "Perfect | | __________" 60 | 61 | - title: Gerund 62 | fill: "#a020cb" 63 | type: headerless 64 | groups: 65 | - "| __________ | __________ | __________ | __________" 66 | 67 | - title: Imperative 68 | fill: "#04aba5" 69 | groups: 70 | - "singular | __________ | __________" 71 | - "plural | __________ | __________" 72 | -------------------------------------------------------------------------------- /latin-1.yaml: -------------------------------------------------------------------------------- 1 | label: 1st Conjugation 2 | output: latin-1.pdf 3 | updated: 17 Jul 2018 4 | example_word: am[ō], am[āre], {amāv}[ī], {amāt}[us] 5 | left: 6 | - title: Active Indicative 7 | fill: "#cb202c" 8 | groups: 9 | - "Present | am[ō] | am[ās] | am[at] | am[āmus] | am[ātis] | am[ant]" 10 | - "Imperfect | am[ābam] | am[ābās] | am[ābat] | am[ābāmus] | am[ābātis] | am[ābant]" 11 | - "Future | am[ābō] | am[ābis] | am[ābit] | am[ābimus] | am[ābitis] | am[ābunt]" 12 | - "Perfect | {amāv}[ī] | {amāv}[istī] | {amāv}[it] | {amāv}[imus] | {amāv}[istis] | {amāv}[ērunt]" 13 | - "Pluperfect | {amāv}[eram] | {amāv}[erās] | {amāv}[erat] | {amāv}[erāmus] | {amāv}[erātis] | {amāv}[erant]" 14 | - "Future Perfect | {amāv}[erō] | {amāv}[eris] | {amāv}[erit] | {amāv}[erimus] | {amāv}[eritis] | {amāv}[erint]" 15 | 16 | - title: Passive Indicative 17 | fill: "#cb202c" 18 | groups: 19 | - "Present | am[or] | am[āris] | am[ātur] | am[āmur] | am[āminī] | am[antur]" 20 | - "Imperfect | am[ābar] | am[ābāris] | am[ābātur] | am[ābāmur] | am[ābāminī] | am[ābantur]" 21 | - "Future | am[ābor] | am[āberis] | am[ābitur] | am[ābimur] | am[ābiminī] | am[ābuntur]" 22 | - "Perfect | {amāt}[us sum] | {amāt}[us es] | {amāt}[us est] | {amāt}[ī sumus] | {amāt}[ī estis] | {amāt}[ī sunt]" 23 | - "Pluperfect | {amāt}[us eram] | {amāt}[us erās] | {amāt}[us erat] | {amāt}[ī erāmus] | {amāt}[ī erātis] | {amāt}[ī erant]" 24 | - "Future Perfect | {amāt}[us erō] | {amāt}[us eris] | {amāt}[us erit] | {amāt}[ī erimus] | {amāt}[ī eritis] | {amāt}[ī erunt]" 25 | 26 | - title: Active Subjunctive 27 | fill: "#2075cb" 28 | groups: 29 | - "Present | am[em] | am[ēs] | am[et] | am[ēmus] | am[ētis] | am[ent]" 30 | - "Imperfect | am[ārem] | am[ārēs] | am[āret] | am[ārēmus] | am[ārētis] | am[ārent]" 31 | - " | | | | | | " 32 | - "Perfect | {amāv}[erim] | {amāv}[eris] | {amāv}[erit] | {amāv}[erimus] | {amāv}[eritis] | {amāv}[erint]" 33 | - "Pluperfect | {amāv}[issem] | {amāv}[issēs] | {amāv}[isset] | {amāv}[issēmus] | {amāv}[issētis] | {amāv}[issent]" 34 | - " | | | | | | " 35 | 36 | - title: Passive Subjunctive 37 | fill: "#2075cb" 38 | groups: 39 | - "Present | am[er] | am[ēris] | am[ētur] | am[ēmur] | am[ēminī] | am[entur]" 40 | - "Imperfect | am[ārer] | am[ārēris] | am[ārētur] | am[ārēmur] | am[ārēminī] | am[ārentur]" 41 | - " | | | | | | " 42 | - "Perfect | {amāt}[us sim] | {amāt}[us sīs] | {amāt}[us sit] | {amāt}[ī sīmus] | {amāt}[ī sītis] | {amāt}[ī sint]" 43 | - "Pluperfect | {amāt}[us essem] | {amāt}[us essēs] | {amāt}[us esset] | {amāt}[ī essēmus] | {amāt}[ī essētis] | {amāt}[ī essent]" 44 | - " | | | | | | " 45 | 46 | right: 47 | - title: Infinitive 48 | fill: "#42b314" 49 | groups: 50 | - "Present | am[āre] | am[ārī]" 51 | - "Future | {amāt}[ūrus esse] | {amāt}[um īrī]" 52 | - "Perfect | {amāv}[isse] | {amāt}[us esse]" 53 | 54 | - title: Participle 55 | fill: "#b2640a" 56 | groups: 57 | - "Present | am[āns] |" 58 | - "Future | {amāt}[ūrus] | am[andus]" 59 | - "Perfect | | {amāt}[us]" 60 | 61 | - title: Gerund 62 | fill: "#a020cb" 63 | type: headerless 64 | groups: 65 | - "| am[andī] | am[andō] | am[andum] | am[andō]" 66 | 67 | - title: Imperative 68 | fill: "#04aba5" 69 | groups: 70 | - "singular | am[ā] | am[āre]" 71 | - "plural | am[āte] | am[āminī]" 72 | -------------------------------------------------------------------------------- /latin-3.yaml: -------------------------------------------------------------------------------- 1 | label: 3rd Conjugation 2 | output: latin-3.pdf 3 | updated: 17 Jul 2018 4 | example_word: dūc[ō], dūc[ere], {dūx}[ī], {duct}[us] 5 | note: "* dūcō, dīcō, faciō, and ferō drop the final -e" 6 | left: 7 | - title: Active Indicative 8 | fill: "#cb202c" 9 | groups: 10 | - "Present | dūc[ō] | dūc[is] | dūc[it] | dūc[imus] | dūc[itis] | dūc[unt]" 11 | - "Imperfect | dūc[ēbam] | dūc[ēbās] | dūc[ēbat] | dūc[ēbāmus] | dūc[ēbātis] | dūc[ēbant]" 12 | - "Future | dūc[am] | dūc[ēs] | dūc[et] | dūc[ēmus] | dūc[ētis] | dūc[ent]" 13 | - "Perfect | dūx[ī] | dūx[istī] | dūx[it] | dūx[imus] | dūx[istis] | dūx[ērunt]" 14 | - "Pluperfect | dūx[eram] | dūx[erās] | dūx[erat] | dūx[erāmus] | dūx[erātis] | dūx[erant]" 15 | - "Future Perfect | dūx[erō] | dūx[eris] | dūx[erit] | dūx[erimus] | dūx[eritis] | dūx[erint]" 16 | 17 | - title: Passive Indicative 18 | fill: "#cb202c" 19 | groups: 20 | - "Present | dūc[or] | dūc[eris] | dūc[itur] | dūc[imur] | dūc[iminī] | dūc[untur]" 21 | - "Imperfect | dūc[ēbar] | dūc[ēbāris] | dūc[ēbātur] | dūc[ēbāmur] | dūc[ēbāminī] | dūc[ēbantur]" 22 | - "Future | dūc[ar] | dūc[ēris] | dūc[ētur] | dūc[ēmur] | dūc[ēminī] | dūc[entur]" 23 | - "Perfect | {duct}[us sum] | {duct}[us es] | {duct}[us est] | {duct}[ī sumus] | {duct}[ī estis] | {duct}[ī sunt]" 24 | - "Pluperfect | {duct}[us eram] | {duct}[us erās] | {duct}[us erat] | {duct}[ī erāmus] | {duct}[ī erātis] | {duct}[ī erant]" 25 | - "Future Perfect | {duct}[us erō] | {duct}[us eris] | {duct}[us erit] | {duct}[ī erimus] | {duct}[ī eritis] | {duct}[ī erunt]" 26 | 27 | - title: Active Subjunctive 28 | fill: "#2075cb" 29 | groups: 30 | - "Present | dūc[am] | dūc[ās] | dūc[at] | dūc[āmus] | dūc[ātis] | dūc[ant]" 31 | - "Imperfect | dūc[erem] | dūc[erēs] | dūc[eret] | dūc[erēmus] | dūc[erētis] | dūc[erent]" 32 | - " | | | | | | " 33 | - "Perfect | dūx[erim] | dūx[eris] | dūx[erit] | dūx[erimus] | dūx[eritis] | dūx[erint]" 34 | - "Pluperfect | dūx[issem] | dūx[issēs] | dūx[isset] | dūx[issēmus] | dūx[issētis] | dūx[issent]" 35 | - " | | | | | | " 36 | 37 | - title: Passive Subjunctive 38 | fill: "#2075cb" 39 | groups: 40 | - "Present | dūc[ar] | dūc[āris] | dūc[ātur] | dūc[āmur] | dūc[āminī] | dūc[antur]" 41 | - "Imperfect | dūc[erer] | dūc[erēris] | dūc[erētur] | dūc[erēmur] | dūc[erēminī] | dūc[erentur]" 42 | - " | | | | | | " 43 | - "Perfect | {duct}[us sim] | {duct}[us sīs] | {duct}[us sit] | {duct}[ī sīmus] | {duct}[ī sītis] | {duct}[ī sint]" 44 | - "Pluperfect | {duct}[us essem] | {duct}[us essēs] | {duct}[us esset] | {duct}[ī essēmus] | {duct}[ī essētis] | {duct}[ī essent]" 45 | - " | | | | | | " 46 | 47 | right: 48 | - title: Infinitive 49 | fill: "#42b314" 50 | groups: 51 | - "Present | dūc[ere] | dūc[ī]" 52 | - "Future | {duct}[ūrus esse] | {duct}[um īrī]" 53 | - "Perfect | dūx[isse] | {duct}[us esse]" 54 | 55 | - title: Participle 56 | fill: "#b2640a" 57 | groups: 58 | - "Present | dūc[ēns] | " 59 | - "Future | {duct}[ūrus] | dūc[endus]" 60 | - "Perfect | | {duct}[us]" 61 | 62 | - title: Gerund 63 | fill: "#a020cb" 64 | type: headerless 65 | groups: 66 | - "| dūc[endī] | dūc[endō] | dūc[endum] | dūc[endō]" 67 | 68 | - title: Imperative 69 | fill: "#04aba5" 70 | groups: 71 | - "singular | dūc* | dūc[ere]" 72 | - "plural | dūc[ite] | dūc[iminī]" 73 | -------------------------------------------------------------------------------- /latin-2.yaml: -------------------------------------------------------------------------------- 1 | label: 2nd Conjugation 2 | output: latin-2.pdf 3 | updated: 17 Jul 2018 4 | example_word: mon[eō], mon[ēre], {monu}[ī], {monit}[us] 5 | left: 6 | - title: Active Indicative 7 | fill: "#cb202c" 8 | groups: 9 | - "Present | mon[eō] | mon[ēs] | mon[et] | mon[ēmus] | mon[ētis] | mon[ent]" 10 | - "Imperfect | mon[ēbam] | mon[ēbās] | mon[ēbat] | mon[ēbāmus] | mon[ēbātis] | mon[ēbant]" 11 | - "Future | mon[ēbō] | mon[ēbis] | mon[ēbit] | mon[ēbimus] | mon[ēbitis] | mon[ēbunt]" 12 | - "Perfect | monu[ī] | monu[istī] | monu[it] | monu[imus] | monu[istis] | monu[ērunt]" 13 | - "Pluperfect | monu[eram] | monu[erās] | monu[erat] | monu[erāmus] | monu[erātis] | monu[erant]" 14 | - "Future Perfect | monu[erō] | monu[eris] | monu[erit] | monu[erimus] | monu[eritis] | monu[erint]" 15 | 16 | - title: Passive Indicative 17 | fill: "#cb202c" 18 | groups: 19 | - "Present | mon[eor] | mon[ēris] | mon[ētur] | mon[ēmur] | mon[ēminī] | mon[entur]" 20 | - "Imperfect | mon[ēbar] | mon[ēbāris] | mon[ēbātur] | mon[ēbāmur] | mon[ēbāminī] | mon[ēbantur]" 21 | - "Future | mon[ēbor] | mon[ēberis] | mon[ēbitur] | mon[ēbimur] | mon[ēbiminī] | mon[ēbuntur]" 22 | - "Perfect | {monit}[us sum] | {monit}[us es] | {monit}[us est] | {monit}[ī sumus] | {monit}[ī estis] | {monit}[ī sunt]" 23 | - "Pluperfect | {monit}[us eram] | {monit}[us erās] | {monit}[us erat] | {monit}[ī erāmus] | {monit}[ī erātis] | {monit}[ī erant]" 24 | - "Future Perfect | {monit}[us erō] | {monit}[us eris] | {monit}[us erit] | {monit}[ī erimus] | {monit}[ī eritis] | {monit}[ī erunt]" 25 | 26 | - title: Active Subjunctive 27 | fill: "#2075cb" 28 | groups: 29 | - "Present | mon[eam] | mon[eās] | mon[eat] | mon[eāmus] | mon[eātis] | mon[eant]" 30 | - "Imperfect | mon[ērem] | mon[ērēs] | mon[ēret] | mon[ērēmus] | mon[ērētis] | mon[ērent]" 31 | - " | | | | | | " 32 | - "Perfect | {monu}[erim] | {monu}[eris] | {monu}[erit] | {monu}[erimus] | {monu}[eritis] | {monu}[erint]" 33 | - "Pluperfect | {monu}[issem] | {monu}[issēs] | {monu}[isset] | {monu}[issēmus] | {monu}[issētis] | {monu}[issent]" 34 | - " | | | | | | " 35 | 36 | - title: Passive Subjunctive 37 | fill: "#2075cb" 38 | groups: 39 | - "Present | mon[ear] | mon[eāris] | mon[eātur] | mon[eāmur] | mon[eāminī] | mon[eantur]" 40 | - "Imperfect | mon[ērer] | mon[ērēris] | mon[ērētur] | mon[ērēmur] | mon[ērēminī] | mon[ērentur]" 41 | - " | | | | | | " 42 | - "Perfect | {monit}[us sim] | {monit}[us sīs] | {monit}[us sit] | {monit}[ī sīmus] | {monit}[ī sītis] | {monit}[ī sint]" 43 | - "Pluperfect | {monit}[us essem] | {monit}[us essēs] | {monit}[us esset] | {monit}[ī essēmus] | {monit}[ī essētis] | {monit}[ī essent]" 44 | - " | | | | | | " 45 | 46 | right: 47 | - title: Infinitive 48 | fill: "#42b314" 49 | groups: 50 | - "Present | mon[ēre] | mon[ērī]" 51 | - "Future | {monit}[ūrus esse] | {monit}[um īrī]" 52 | - "Perfect | {monu}[isse] | {monit}[us esse]" 53 | 54 | - title: Participle 55 | fill: "#b2640a" 56 | groups: 57 | - "Present | mon[ēns] | " 58 | - "Future | {monit}[ūrus] | mon[endus]" 59 | - "Perfect | | {monit}[us]" 60 | 61 | - title: Gerund 62 | fill: "#a020cb" 63 | type: headerless 64 | groups: 65 | - "| mon[endī] | mon[endō] | mon[endum] | mon[endō]" 66 | 67 | - title: Imperative 68 | fill: "#04aba5" 69 | groups: 70 | - "singular | mon[ē] | mon[ēre]" 71 | - "plural | mon[ēte] | mon[ēminī]" 72 | -------------------------------------------------------------------------------- /latin-4.yaml: -------------------------------------------------------------------------------- 1 | label: 4th Conjugation 2 | output: latin-4.pdf 3 | updated: 17 Jul 2018 4 | example_word: aud[iō], aud[īre], {audīv}[ī], {audīt}[us] 5 | left: 6 | - title: Active Indicative 7 | fill: "#cb202c" 8 | groups: 9 | - "Present | aud[iō] | aud[īs] | aud[it] | aud[īmus] | aud[ītis] | aud[iunt]" 10 | - "Imperfect | aud[iēbam] | aud[iēbās] | aud[iēbat] | aud[iēbāmus] | aud[iēbātis] | aud[iēbant]" 11 | - "Future | aud[iam] | aud[iēs] | aud[iet] | aud[iēmus] | aud[iētis] | aud[ient]" 12 | - "Perfect | {audīv}[ī] | {audīv}[istī] | {audīv}[it] | {audīv}[imus] | {audīv}[istis] | {audīv}[ērunt]" 13 | - "Pluperfect | {audīv}[eram] | {audīv}[erās] | {audīv}[erat] | {audīv}[erāmus] | {audīv}[erātis] | {audīv}[erant]" 14 | - "Future Perfect | {audīv}[erō] | {audīv}[eris] | {audīv}[erit] | {audīv}[erimus] | {audīv}[eritis] | {audīv}[erint]" 15 | 16 | - title: Passive Indicative 17 | fill: "#cb202c" 18 | groups: 19 | - "Present | aud[ior] | aud[īris] | aud[ītur] | aud[īmur] | aud[īminī] | aud[iuntur]" 20 | - "Imperfect | aud[iēbar] | aud[iēbāris] | aud[iēbātur] | aud[iēbāmur] | aud[iēbāminī] | aud[iēbantur]" 21 | - "Future | aud[iar] | aud[iēris] | aud[iētur] | aud[iēmur] | aud[iēminī] | aud[ientur]" 22 | - "Perfect | {audīt}[us sum] | {audīt}[us es] | {audīt}[us est] | {audīt}[ī sumus] | {audīt}[ī estis] | {audīt}[ī sunt]" 23 | - "Pluperfect | {audīt}[us eram] | {audīt}[us erās] | {audīt}[us erat] | {audīt}[ī erāmus] | {audīt}[ī erātis] | {audīt}[ī erant]" 24 | - "Future Perfect | {audīt}[us erō] | {audīt}[us eris] | {audīt}[us erit] | {audīt}[ī erimus] | {audīt}[ī eritis] | {audīt}[ī erunt]" 25 | 26 | - title: Active Subjunctive 27 | fill: "#2075cb" 28 | groups: 29 | - "Present | aud[iam] | aud[iās] | aud[iat] | aud[iāmus] | aud[iātis] | aud[iant]" 30 | - "Imperfect | aud[īrem] | aud[īrēs] | aud[īret] | aud[īrēmus] | aud[īrētis] | aud[īrent]" 31 | - " | | | | | | " 32 | - "Perfect | {audīv}[erim] | {audīv}[eris] | {audīv}[erit] | {audīv}[erimus] | {audīv}[eritis] | {audīv}[erint]" 33 | - "Pluperfect | {audīv}[issem] | {audīv}[issēs] | {audīv}[isset] | {audīv}[issēmus] | {audīv}[issētis] | {audīv}[issent]" 34 | - " | | | | | | " 35 | 36 | - title: Passive Subjunctive 37 | fill: "#2075cb" 38 | groups: 39 | - "Present | aud[iar] | aud[iāris] | aud[iātur] | aud[iāmur] | aud[iāminī] | aud[iantur]" 40 | - "Imperfect | aud[īrer] | aud[īrēris] | aud[īrētur] | aud[īrēmur] | aud[īrēminī] | aud[īrentur]" 41 | - " | | | | | | " 42 | - "Perfect | {audīt}[us sim] | {audīt}[us sīs] | {audīt}[us sit] | {audīt}[ī sīmus] | {audīt}[ī sītis] | {audīt}[ī sint]" 43 | - "Pluperfect | {audīt}[us essem] | {audīt}[us essēs] | {audīt}[us esset] | {audīt}[ī essēmus] | {audīt}[ī essētis] | {audīt}[ī essent]" 44 | - " | | | | | | " 45 | 46 | right: 47 | - title: Infinitive 48 | fill: "#42b314" 49 | groups: 50 | - "Present | aud[īre] | aud[īrī]" 51 | - "Future | {audīt}[ūrus esse] | {audīt}[um īrī]" 52 | - "Perfect | {audīv}[isse] | {audīt}[us esse]" 53 | 54 | - title: Participle 55 | fill: "#b2640a" 56 | groups: 57 | - "Present | aud[iēns] | " 58 | - "Future | {audīt}[ūrus] | aud[iendus]" 59 | - "Perfect | | {audīt}[us]" 60 | 61 | - title: Gerund 62 | fill: "#a020cb" 63 | type: headerless 64 | groups: 65 | - "| aud[iendī] | aud[iendō] | aud[iendum] | aud[iendō]" 66 | 67 | - title: Imperative 68 | fill: "#04aba5" 69 | groups: 70 | - "Singular | aud[ī] | aud[īre]" 71 | - "Plural | aud[īte] | aud[īminī]" 72 | -------------------------------------------------------------------------------- /latin-3i.yaml: -------------------------------------------------------------------------------- 1 | label: 3rd Conjugation i-Stems 2 | output: latin-3i.pdf 3 | updated: 17 July 2018 4 | example_word: incip[iō], incip[ere], {incēp}[ī], {incept}[us] 5 | left: 6 | - title: Active Indicative 7 | fill: "#cb202c" 8 | groups: 9 | - "Present | incip[iō] | incip[is] | incip[it] | incip[imus] | incip[itis] | incip[iunt]" 10 | - "Imperfect | incip[iēbam] | incip[iēbās] | incip[iēbat] | incip[iēbāmus] | incip[iēbātis] | incip[iēbant]" 11 | - "Future | incip[iam] | incip[iēs] | incip[iet] | incip[iēmus] | incip[iētis] | incip[ient]" 12 | - "Perfect | {incēp}[ī] | {incēp}[istī] | {incēp}[it] | {incēp}[imus] | {incēp}[istis] | {incēp}[ērunt]" 13 | - "Pluperfect | {incēp}[eram] | {incēp}[erās] | {incēp}[erat] | {incēp}[erāmus] | {incēp}[erātis] | {incēp}[erant]" 14 | - "Future Perfect | {incēp}[erō] | {incēp}[eris] | {incēp}[erit] | {incēp}[erimus] | {incēp}[eritis] | {incēp}[erint]" 15 | 16 | - title: Passive Indicative 17 | fill: "#cb202c" 18 | groups: 19 | - "Present | incip[ior] | incip[eris] | incip[itur] | incip[imur] | incip[iminī] | incip[iuntur]" 20 | - "Imperfect | incip[iēbar] | incip[iēbāris] | incip[iēbātur] | incip[iēbāmur] | incip[iēbāminī] | incip[iēbantur]" 21 | - "Future | incip[iar] | incip[iēris] | incip[iētur] | incip[iēmur] | incip[iēminī] | incip[ientur]" 22 | - "Perfect | {incept}[us sum] | {incept}[us es] | {incept}[us est] | {incept}[ī sumus] | {incept}[ī estis] | {incept}[ī sunt]" 23 | - "Pluperfect | {incept}[us eram] | {incept}[us erās] | {incept}[us erat] | {incept}[ī erāmus] | {incept}[ī erātis] | {incept}[ī erant]" 24 | - "Future Perfect | {incept}[us erō] | {incept}[us eris] | {incept}[us erit] | {incept}[ī erimus] | {incept}[ī eritis] | {incept}[ī erunt]" 25 | 26 | - title: Active Subjunctive 27 | fill: "#2075cb" 28 | groups: 29 | - "Present | incip[iam] | incip[iās] | incip[iat] | incip[iāmus] | incip[iātis] | incip[iant]" 30 | - "Imperfect | incip[erem] | incip[erēs] | incip[eret] | incip[erēmus] | incip[erētis] | incip[erent]" 31 | - " | | | | | | " 32 | - "Perfect | {incēp}[erim] | {incēp}[eris] | {incēp}[erit] | {incēp}[erimus] | {incēp}[eritis] | {incēp}[erint]" 33 | - "Pluperfect | {incēp}[issem] | {incēp}[issēs] | {incēp}[isset] | {incēp}[issēmus] | {incēp}[issētis] | {incēp}[issent]" 34 | - " | | | | | | " 35 | 36 | - title: Passive Subjunctive 37 | fill: "#2075cb" 38 | groups: 39 | - "Present | incip[iar] | incip[iāris] | incip[iātur] | incip[iāmur] | incip[iāminī] | incip[iantur]" 40 | - "Imperfect | incip[erer] | incip[erēris] | incip[erētur] | incip[erēmur] | incip[erēminī] | incip[erentur]" 41 | - " | | | | | | " 42 | - "Perfect | {incept}[us sim] | {incept}[us sīs] | {incept}[us sit] | {incept}[ī sīmus] | {incept}[ī sītis] | {incept}[ī sint]" 43 | - "Pluperfect | {incept}[us essem] | {incept}[us essēs] | {incept}[us esset] | {incept}[ī essēmus] | {incept}[ī essētis] | {incept}[ī essent]" 44 | - " | | | | | | " 45 | 46 | right: 47 | - title: Infinitive 48 | fill: "#42b314" 49 | groups: 50 | - "Present | incip[ere] | incip[ī]" 51 | - "Future | {incept}[ūrus esse] | {incept}[um īrī]" 52 | - "Perfect | {incēp}[isse] | {incept}[us esse]" 53 | 54 | - title: Participle 55 | fill: "#b2640a" 56 | groups: 57 | - "Present | incip[iēns] | " 58 | - "Future | {incept}[ūrus] | incip[iendus]" 59 | - "Perfect | | {incept}[us]" 60 | 61 | - title: Gerund 62 | fill: "#a020cb" 63 | type: headerless 64 | groups: 65 | - "| incip[iendī] | incip[iendō] | incip[iendum] | incip[iendō]" 66 | 67 | - title: Imperative 68 | fill: "#04aba5" 69 | groups: 70 | - "singular | incip[e] | incip[ere]" 71 | - "plural | incip[ite] | incip[iminī]" 72 | -------------------------------------------------------------------------------- /latin-conjugations.pv: -------------------------------------------------------------------------------- 1 | import re 2 | import yaml 3 | 4 | with open("latin-1.yaml", "r") as f: 5 | data = yaml.load(f.read()) 6 | 7 | page_width = 792 8 | page_height = 612 9 | 10 | heading_size = 7 11 | group_heading_size = 7 12 | word_size = 9 13 | horizontal_spacing = 63 14 | default_spacing = 13 # line spacing 15 | group_header_size = 9 16 | group_header_offset = 16 17 | row_spacing = 130 18 | 19 | size(page_width, page_height) 20 | background(1) 21 | 22 | font("Minion", size=11) 23 | 24 | stylesheet("ending", weight="bold") 25 | #stylesheet("stem", italic=True) 26 | 27 | def style_line(l): 28 | # swap out [ending] for ending 29 | text_line = re.sub(r"\{(.*?)\}", r"\1", l) 30 | text_line = re.sub(r"\[(.*?)\]", r"\1", text_line) 31 | return "%s" % text_line 32 | 33 | def draw_chart(x, y, chart, fill_color="#cb202c", spacing=default_spacing): 34 | push() 35 | translate(x, y) 36 | 37 | font("Minion", size=word_size, tracking=-8) 38 | fill(0) 39 | 40 | stylesheet("ending", fill=fill_color, weight="bold") 41 | 42 | for l in chart: 43 | if l != '': 44 | text(0, 0, xml=style_line(l)) 45 | 46 | # line spacing 47 | translate(0, spacing) 48 | 49 | font(tracking=0) 50 | 51 | pop() 52 | 53 | def draw_group(x, y, group, fill_color="#cb202c", spacing=default_spacing): 54 | push() 55 | translate(x, y) 56 | 57 | if group['chart']: 58 | font("Museo Sans", size=group_heading_size, tracking=15) 59 | fill(0.5) 60 | if group['title']: 61 | text(group['title'].upper(), 0, 0) 62 | font(tracking=0) 63 | 64 | draw_chart(0, group_header_offset, group['chart'], fill_color, spacing) 65 | 66 | pop() 67 | 68 | def draw_headings(x, y, headings, spacing=default_spacing): 69 | push() 70 | translate(x, y + group_header_offset - 0.75) 71 | font("Minion", size=heading_size, sc=True) 72 | fill(0.5) 73 | 74 | for line in headings: 75 | text(line, 0, 0) 76 | 77 | # line spacing 78 | translate(0, spacing) 79 | 80 | font(sc=False) 81 | pop() 82 | 83 | def draw_group_header(x, y, label, width): 84 | push() 85 | fill(0) 86 | stroke(0.5) 87 | translate(x, y) 88 | font("Museo Sans", size=group_header_size, tracking=15) 89 | line(0, -11, width, -11) 90 | text(label.upper(), 0, 0) 91 | font(tracking=0) 92 | pop() 93 | 94 | def parse_list(groups): 95 | response = [] 96 | 97 | for line in groups: 98 | data = line.split('|') 99 | 100 | group = { 101 | 'title': data[0].strip(), 102 | 'chart': [x.strip() for x in data[1:]], 103 | } 104 | 105 | response.append(group) 106 | 107 | return response 108 | 109 | headings = [ 110 | '1st sg.', 111 | '2nd sg.', 112 | '3rd sg.', 113 | '1st pl.', 114 | '2nd pl.', 115 | '3rd pl.', 116 | ] 117 | 118 | active_headings = [ 119 | 'active', 120 | 'passive', 121 | ] 122 | 123 | gerund_headings = [ 124 | 'gen.', 125 | 'dat.', 126 | 'acc.', 127 | 'abl.', 128 | ] 129 | 130 | margin = 30 131 | 132 | # Heading 133 | 134 | font("Museo Sans", size=14, tracking=15) 135 | text("Latin — {}".format(data['label']).upper(), margin, margin + 10) 136 | 137 | align(RIGHT) 138 | font("Minion", size=9, italic=True, tracking=0) 139 | stroke(0) 140 | fill(0.5) 141 | text("bencrowder.net • Last modified {}".format(data['updated']), page_width-margin, margin + 10) 142 | font(italic=False) 143 | 144 | align(LEFT) 145 | if 'example_word' in data: 146 | text(margin, margin + 25, xml=style_line(data['example_word'])) 147 | 148 | pen(0.5) 149 | 150 | # Groups 151 | 152 | base_y = margin + 50 153 | 154 | for group in data['left']: 155 | draw_group_header(margin, base_y, group['title'], 430) 156 | draw_headings(30, base_y + 20, headings) 157 | 158 | for index, g in enumerate(parse_list(group['groups'])): 159 | draw_group(margin + 40 + (index * horizontal_spacing), base_y + 20, g, fill_color=group['fill']) 160 | 161 | base_y += row_spacing 162 | 163 | # Right side 164 | right_x = 520 165 | base_y = margin + 50 166 | 167 | for group in data['right']: 168 | if 'type' in group and group['type'] == 'headerless': 169 | headings_list = gerund_headings 170 | base = base_y + 4 171 | else: 172 | headings_list = active_headings 173 | base = base_y + 20 174 | 175 | draw_group_header(right_x, base_y, group['title'], 242) 176 | draw_headings(right_x, base, headings_list) 177 | 178 | for index, g in enumerate(parse_list(group['groups'])): 179 | draw_group(right_x + 40 + (index * horizontal_spacing), base, g, fill_color=group['fill']) 180 | 181 | base_y += row_spacing 182 | 183 | if 'note' in data: 184 | font("Minion", size=8, italic=True, tracking=0) 185 | text(data['note'], right_x, page_height - margin - 11) 186 | 187 | 188 | export(data['output']) 189 | -------------------------------------------------------------------------------- /latin-conjugations-worksheet.pv: -------------------------------------------------------------------------------- 1 | # Note: this is somewhat hackish and needs to be integrated into the main 2 | # latin-conjugations.pv file at some point 3 | 4 | import re 5 | import yaml 6 | 7 | with open("latin-conjugations-worksheet.yaml", "r") as f: 8 | data = yaml.load(f.read()) 9 | 10 | page_width = 792 11 | page_height = 612 12 | 13 | heading_size = 7 14 | group_heading_size = 7 15 | word_size = 9 16 | horizontal_spacing = 63 17 | default_spacing = 13 # line spacing 18 | group_header_size = 9 19 | group_header_offset = 16 20 | row_spacing = 130 21 | 22 | size(page_width, page_height) 23 | background(1) 24 | 25 | font("Minion", size=11) 26 | 27 | stylesheet("ending", weight="bold") 28 | 29 | def style_line(l): 30 | # swap out [ending] for ending 31 | text_line = re.sub(r"\{(.*?)\}", r"\1", l) 32 | text_line = re.sub(r"\[(.*?)\]", r"\1", text_line) 33 | return "%s" % text_line 34 | 35 | def draw_chart(x, y, chart, fill_color="#cb202c", spacing=default_spacing): 36 | push() 37 | translate(x, y) 38 | 39 | font("Minion", size=word_size, tracking=-8) 40 | fill(0) 41 | 42 | stylesheet("ending", fill=fill_color, weight="bold") 43 | 44 | pen(0.5) 45 | stroke(0.5) 46 | for l in chart: 47 | if l != '': 48 | line(0, 1, 50, 1) 49 | 50 | # line spacing 51 | translate(0, spacing) 52 | 53 | font(tracking=0) 54 | 55 | pop() 56 | 57 | def draw_group(x, y, group, fill_color="#cb202c", spacing=default_spacing): 58 | push() 59 | translate(x, y) 60 | 61 | if group['chart']: 62 | font("Museo Sans", size=group_heading_size, tracking=15) 63 | fill(0.5) 64 | if group['title']: 65 | text(group['title'].upper(), 0, 0) 66 | font(tracking=0) 67 | 68 | draw_chart(0, group_header_offset, group['chart'], fill_color, spacing) 69 | 70 | pop() 71 | 72 | def draw_headings(x, y, headings, spacing=default_spacing): 73 | push() 74 | translate(x, y + group_header_offset - 0.75) 75 | font("Minion", size=heading_size, sc=True) 76 | fill(0.5) 77 | 78 | for line in headings: 79 | text(line, 0, 0) 80 | 81 | # line spacing 82 | translate(0, spacing) 83 | 84 | font(sc=False) 85 | pop() 86 | 87 | def draw_group_header(x, y, label, width): 88 | push() 89 | fill(0) 90 | stroke(0.5) 91 | translate(x, y) 92 | font("Museo Sans", size=group_header_size, tracking=15) 93 | line(0, -11, width, -11) 94 | text(label.upper(), 0, 0) 95 | font(tracking=0) 96 | pop() 97 | 98 | def parse_list(groups): 99 | response = [] 100 | 101 | for line in groups: 102 | data = line.split('|') 103 | 104 | group = { 105 | 'title': data[0].strip(), 106 | 'chart': [x.strip() for x in data[1:]], 107 | } 108 | 109 | response.append(group) 110 | 111 | return response 112 | 113 | headings = [ 114 | '1st sg.', 115 | '2nd sg.', 116 | '3rd sg.', 117 | '1st pl.', 118 | '2nd pl.', 119 | '3rd pl.', 120 | ] 121 | 122 | active_headings = [ 123 | 'active', 124 | 'passive', 125 | ] 126 | 127 | gerund_headings = [ 128 | 'gen.', 129 | 'dat.', 130 | 'acc.', 131 | 'abl.', 132 | ] 133 | 134 | margin = 30 135 | 136 | # Heading 137 | 138 | font("Museo Sans", size=14, tracking=15) 139 | text("Latin — Conjugation Worksheet".upper(), margin, margin + 10) 140 | 141 | align(RIGHT) 142 | font("Minion", size=9, italic=True, tracking=0) 143 | stroke(0) 144 | fill(0.5) 145 | text("bencrowder.net — Last modified 1 November 2018", page_width-margin, margin + 10) 146 | font(italic=False) 147 | 148 | align(LEFT) 149 | text("Word: ", margin, margin + 25) 150 | 151 | pen(0.5) 152 | 153 | # Groups 154 | 155 | base_y = margin + 50 156 | 157 | for group in data['left']: 158 | draw_group_header(margin, base_y, group['title'], 430) 159 | draw_headings(30, base_y + 20, headings) 160 | 161 | for index, g in enumerate(parse_list(group['groups'])): 162 | draw_group(margin + 40 + (index * horizontal_spacing), base_y + 20, g, fill_color=group['fill']) 163 | 164 | base_y += row_spacing 165 | 166 | # Right side 167 | right_x = 520 168 | base_y = margin + 50 169 | 170 | for group in data['right']: 171 | if 'type' in group and group['type'] == 'headerless': 172 | headings_list = gerund_headings 173 | base = base_y + 4 174 | else: 175 | headings_list = active_headings 176 | base = base_y + 20 177 | 178 | draw_group_header(right_x, base_y, group['title'], 242) 179 | draw_headings(right_x, base, headings_list) 180 | 181 | for index, g in enumerate(parse_list(group['groups'])): 182 | draw_group(right_x + 40 + (index * horizontal_spacing), base, g, fill_color=group['fill']) 183 | 184 | base_y += row_spacing 185 | 186 | if 'note' in data: 187 | font("Minion", size=8, italic=True, tracking=0) 188 | text(data['note'], right_x, page_height - margin - 11) 189 | 190 | 191 | export("latin-conjugations-worksheet.pdf") 192 | --------------------------------------------------------------------------------