From c462ab0e3e8a7a7d3d3ac077ec633b8516386d06 Mon Sep 17 00:00:00 2001 From: zevav Date: Sun, 14 Jun 2020 10:35:00 +0200 Subject: [PATCH] add line numbers, make it one column by default --- TODO.md | 16 +++++++++------- app/main.py | 20 +++++++++++--------- app/pdf.py | 6 +++--- problems-answers.pdf | Bin 0 -> 5361 bytes problems.pdf | Bin 0 -> 5248 bytes setup.py | 2 +- 6 files changed, 24 insertions(+), 20 deletions(-) create mode 100644 problems-answers.pdf create mode 100644 problems.pdf diff --git a/TODO.md b/TODO.md index 1876240..d9a0eb1 100644 --- a/TODO.md +++ b/TODO.md @@ -1,13 +1,15 @@ ## TODO -- silent mode by default when doing PDF -- add nice spacing and typography for easy reading +- make - pdf options - - problem numbers [true] - - number of columns [auto] - include column labels - print -- addition -- subtraction -- mult? div? + - make it prettier + - different font, using nice fonts if they're available on someone's system + - better spacing + - [use different sized fonts for different parts](https://unix.stackexchange.com/a/500365) +- arithmetic + - addition + - subtraction + - mult? div? - hex? diff --git a/app/main.py b/app/main.py index 6b167b5..2d80f71 100755 --- a/app/main.py +++ b/app/main.py @@ -13,8 +13,8 @@ from app.pdf import make_pdf @click.option("--silent", default=False, is_flag=True) @click.option("--include-answers", default=True, is_flag=True) @click.option("--output-filepath") -@click.option("--num-columns", default=4) -@click.option("--font-size", default=12) +@click.option("--num-columns", default=1) +@click.option("--font-size", default=26) def main( bits: int, num_problems: int, @@ -22,17 +22,14 @@ def main( silent: bool = False, include_answers: bool = True, output_filepath: str = None, - num_columns: int = 4, - font_size: int = 12, + num_columns: int = 1, + font_size: int = 26, ) -> None: validate_args(pdf, silent, output_filepath) answers, problems = make_problems_and_answers(bits, num_problems) - if bits > 12: - num_columns = 3 - if pdf: silent = True make_pdf( @@ -65,8 +62,13 @@ def validate_args(pdf, silent, output_filepath): def make_problems_and_answers(bits, num_problems): problems = generate_problems(bits, num_problems) answers = generate_answers(problems) - problems_string = "\n\n".join(problems) + problems_string = "\n\n".join( + [f"{index:2}) {p} =" for index, p in enumerate(problems, start=1)] + ) answers_string = "\n\n".join( - [f"{problem} | {answer} " for problem, answer in zip(problems, answers)] + [ + f"{index:2}) {problem} = {answer}" + for index, (problem, answer) in enumerate(zip(problems, answers), start=1) + ] ) return answers_string, problems_string diff --git a/app/pdf.py b/app/pdf.py index 9dfaf16..83ddf60 100644 --- a/app/pdf.py +++ b/app/pdf.py @@ -46,9 +46,9 @@ def make_pdf_file(output_path): subprocess.call(command, shell=True) -def make_postscript_file(txt_file: str, num_columns: int, font_size: int): +def make_postscript_file(txt_file, num_columns: int, font_size: int): command = ( - f"enscript --columns={num_columns} --no-header --output={POSTSCRIPT_FILEPATH} " - f"-FCourier{font_size} {txt_file.name}" + f"enscript --columns={num_columns} --no-header --font=Courier{font_size} " + f"--output={POSTSCRIPT_FILEPATH} {txt_file.name}" ) subprocess.call(command, shell=True) diff --git a/problems-answers.pdf b/problems-answers.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7882cfef569b81723d406d5a3e1ed98d15d86a3b GIT binary patch literal 5361 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 K-KIP|ko8}hac!vp literal 0 HcmV?d00001 diff --git a/problems.pdf b/problems.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0338e4d935709f63103ebdbf0ec2634360f64ad3 GIT binary patch literal 5248 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