Compare commits

..

2 commits

Author SHA1 Message Date
c2893c30a6 refactor(docker, utils): streamline Dockerfile and update PDF build script
All checks were successful
continuous-integration/drone/push Build is passing
This change removes unnecessary dependencies and optimizes the PDF build
process, enhancing maintainability and reducing potential errors.

- Removed `python3-pypandoc` from Dockerfile to minimize dependency
  footprint.
- Replaced `texlive-xetex` with `texlive` in Dockerfile for broader TeX
  support.
- Introduced `subprocess` in `build_pdf.py` to replace `pypandoc`,
  improving process control.
- Added `run_process_with_params` function to handle command execution,
  increasing code modularity and error handling.
- Created `build_pdf.old.py` as a backup of the original script for
  reference.

Signed-off-by: Glenn Y. Rolland <glenux@glenux.net>
2025-03-27 15:23:11 +01:00
7aabf1235e feat(docs): add support for Bitcoin symbol in LaTeX documents
Enhanced document compatibility with Bitcoin symbol for broader
financial documentation needs.

- Added `newunicodechar` package to support Unicode characters.
- Implemented `\DeclareUnicodeCharacter` command to define custom
  Unicode characters.
- Defined `\bitcoinA` command to render the Bitcoin symbol using Unicode
  20BF.

Signed-off-by: Glenn Y. Rolland <glenux@glenux.net>
2025-03-27 11:02:48 +01:00
4 changed files with 157 additions and 51 deletions

View file

@ -5,7 +5,7 @@ ENV DOCMACHINE_DOCS_ENABLE=1
ENV DOCMACHINE_SLIDES_ENABLE=1
RUN apt-get update \
&& apt-get install -y --no-install-recommends python3 python3-pip python-is-python3 pipenv python3-pypandoc \
&& apt-get install -y --no-install-recommends python3 python3-pip python-is-python3 pipenv \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& truncate -s 0 /var/log/*log
@ -19,7 +19,7 @@ RUN apt-get update \
# Tools for building pdfs
RUN apt-get update \
&& apt-get install -y --no-install-recommends make m4 chromium pandoc ghc libghc-pandoc-dev lmodern texlive-xetex texlive-fonts-extra texlive-fonts-recommended librsvg2-bin fonts-noto-mono \
&& apt-get install -y --no-install-recommends make m4 chromium pandoc ghc libghc-pandoc-dev lmodern texlive texlive-xetex texlive-fonts-extra texlive-fonts-recommended librsvg2-bin fonts-noto-mono \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& truncate -s 0 /var/log/*log

71
utils/docs/build_pdf.old.py Executable file
View file

@ -0,0 +1,71 @@
#!/usr/bin/env python
# Usage: ./build.py INPUT_DIR OUTPUT_FILE
import os
# import re
import sys
import pypandoc
def gx_usage():
"""Show usage"""
print(f"Usage: {sys.argv[0]} METADATA_FILE INPUT_FILE OUTPUT_FILE")
print()
if len(sys.argv) != 4:
gx_usage()
metadata_file = sys.argv[1]
if not os.path.exists(metadata_file):
print(f"Metadata file not found: {metadata_file}")
sys.exit(1)
input_file = sys.argv[2]
if not os.path.exists(input_file):
print(f"Input file not found: {input_file}")
sys.exit(1)
# Get second
output_file = sys.argv[3]
if os.path.exists(output_file):
print(f"Output file already exists: {output_file}")
sys.exit(1)
print(f"Metadata: {metadata_file}")
print(f"Input: {input_file}")
print(f"Output: {output_file}")
# Build the pandoc options as a string
pandoc_cmd = [
"--verbose",
"--toc",
"--number-sections",
"--include-in-header", "utils/docs/main.tex",
"--metadata-file", metadata_file,
# "-V", "linkcolor:blue",
# "-V", "geometry:a4paper",
# "-V", "geometry:margin=1.8cm",
"-V", "mainfont=DejaVu Serif",
"-V", "monofont=Noto Sans Mono",
"--pdf-engine=xelatex",
"--resource-path=utils/docs",
"--filter=./utils/docs/filter-nobg.hs",
]
# from glob import glob
# input_files = [os.path.join(dp, f) for dp, dn, filenames in os.walk(input_dir) for f in filenames if re.search(r'^[0-9].*\.md$', f)]
# input_files.sort()
# Convert all markdown files in the chapters/ subdirectory.
pypandoc.convert_file(
input_file,
"pdf",
outputfile=output_file,
extra_args=pandoc_cmd,
)
print(f"Conversion completed. Output saved to: {output_file}")
#

View file

@ -2,11 +2,10 @@
# Usage: ./build.py INPUT_DIR OUTPUT_FILE
import os
# import re
import os
import sys
import pypandoc
import subprocess
def gx_usage():
"""Show usage"""
@ -14,6 +13,31 @@ def gx_usage():
print()
def run_process_with_params(command_params):
"""
Runs a process with parameters provided in the command_params list.
Args:
- command_params (list): List of parameters to run the process.
The first item in the list should be the command (executable).
"""
try:
# Run the process using subprocess.run (Python 3.5+)
result = subprocess.run(command_params, check=True, text=True, capture_output=True)
# If the process ran successfully, print the output
print("Process output:", result.stdout)
print("Process error output (if any):", result.stderr)
except subprocess.CalledProcessError as e:
print(f"An error occurred while running the process: {e}")
print("Error Output:", e.stderr)
except Exception as e:
print(f"Unexpected error: {e}")
# Example usage
if __name__ == "__main__":
# Define the parameters for the command
# Example: Running `ls -l /home` on a Unix-like system
if len(sys.argv) != 4:
gx_usage()
@ -33,12 +57,9 @@ if os.path.exists(output_file):
print(f"Output file already exists: {output_file}")
sys.exit(1)
print(f"Metadata: {metadata_file}")
print(f"Input: {input_file}")
print(f"Output: {output_file}")
# Build the pandoc options as a string
pandoc_cmd = [
"pandoc",
"--verbose",
"--toc",
"--number-sections",
@ -52,20 +73,17 @@ pandoc_cmd = [
"--pdf-engine=xelatex",
"--resource-path=utils/docs",
"--filter=./utils/docs/filter-nobg.hs",
"-f", "markdown",
"-t", "pdf",
"-o", output_file,
input_file
]
# from glob import glob
# input_files = [os.path.join(dp, f) for dp, dn, filenames in os.walk(input_dir) for f in filenames if re.search(r'^[0-9].*\.md$', f)]
# input_files.sort()
print(f"Metadata: {metadata_file}")
print(f"Input: {input_file}")
print(f"Output: {output_file}")
# Convert all markdown files in the chapters/ subdirectory.
pypandoc.convert_file(
input_file,
"pdf",
outputfile=output_file,
extra_args=pandoc_cmd,
)
print(f"Conversion completed. Output saved to: {output_file}")
# Call the function to run the process
run_process_with_params(pandoc_cmd)
#

View file

@ -2,8 +2,25 @@
% Set the document language to English
\usepackage[english]{babel}
% \usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
% Define command \DeclareUnicodeCharacter (which was defined in inputenc for non-utf8 engines)
\newcommand{\DeclareUnicodeCharacter}[2]{%
\begingroup\lccode`|=\string"#1\relax
\lowercase{\endgroup\newunicodechar{|}}{#2}%
}
\def\bitcoinA{%
\leavevmode
\vtop{\offinterlineskip %\bfseries
\setbox0=\hbox{B}%
\setbox2=\hbox to\wd0{\hfil\hskip-.03em
\vrule height .3ex width .15ex\hskip .08em
\vrule height .3ex width .15ex\hfil}
\vbox{\copy2\box0}\box2}}
% \DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
\DeclareUnicodeCharacter{20BF}{\bitcoinA}
% Adjust page geometry
\usepackage[