## interactive show-hyphens, LaTeX version function hyphenation_prompt --description "Construct promt for `latex-hyphens`" set_color green; echo -n 'divide '; set_color normal; echo "> " end function worddiv --description "Interact with TeX and babel (LaTeX) to show word division (a.k.a. hyphenation)." # TODO: add languages other than English # # set up temporary directory for our own .tex files and LaTeX's logfiles # -f : scope our variable to the function set -f project_path ~/.config/fish/conf.d/worddiv set -f tmpdir $project_path/.cache/tempdir_(date -Ins) # mkdir -p "$tmpdir" || echo "Unable to create temporary directory!" # move this to inside the while loop set -f template_filename latex-hyphenation-template.tex set -f expression_filename latex-hyphenation-target.tex set -f secondary_filename latex-hyphenation-target-british.tex # welcome message set -f tex_version (tex -version | head -n 1) set -f latex_version (latex -version | head -n 1) printf "\nLet’s query " ; set_color yellow ; echo -n " $tex_version" ; set_color normal echo " and " ; set_color yellow ; echo -n "$latex_version" ; set_color normal ; echo " !" printf '\nEnter an expression to see its hyphenation, or ‘q’ to quit.\n\n' # set languages set -f language american set -f secondary_language british # interact set -f expression "" while test $expression != "q" read -f --prompt hyphenation_prompt expression if test ! -e $tmpdir mkdir -p "$tmpdir" || echo "Unable to create temporary directory!" end ## latex+babel # generate input and output # grab a copy of the template cp $project_path/$template_filename $tmpdir/ # modify the template, inserting our two variables # for now, $language just = american sed "s/language/$language/g" $tmpdir/$template_filename | sed "s/expression/$expression/g" | # also uncomment its \input ushyphex line so that # the exceptions list for AE will be included # output to a new file sed "s/% \\\input/\\\input/g" > $tmpdir/$expression_filename # let's check and see if british english divides this expression differently # modify the template with a different language # for now, $secondary_language just = british # output to a new file sed "s/language/$secondary_language/g" $tmpdir/$template_filename | sed "s/expression/$expression/g" > $tmpdir/$secondary_filename ## operate on the files and filter the output # american set -f babel_output ( latex -draftmode $tmpdir/$expression_filename | grep "\\[\\] .OT1" | sed 's_\\[\\] .OT1/cmr/m/n/10 __' ) # british set -f babel_output_british ( latex -draftmode $tmpdir/$secondary_filename | grep "\\[\\] .OT1" | sed 's_\\[\\] .OT1/cmr/m/n/10 __' ) ## tex+showhyphens # generate output set -f tex_untrimmed (echo -e "\showhyphens{$expression}" | tex --output-directory "$tmpdir" | tail -n +4 | head -n -10 | sed 's/^\[\] \\\tenrm //' ) # $tex_untrimmed has trailing whitespace; trim it set -f tex_output (string trim "$tex_untrimmed") ## run comparisons ... # babel AE vs plain TeX if test "$babel_output" = "$tex_output" # babel AE vs babel BE if test "$babel_output" != "$babel_output_british" set_color yellow ; echo -en "\nbabel (AE): " else set_color yellow ; echo -en "\nbabel (AE & BE): " end # ... and output results set_color normal ; echo -e "$babel_output\n" else set_color yellow ; echo -en "\nbabel (AE): " ; set_color normal ; echo $babel_output set_color yellow ; echo -en "\nplain TeX (AE): " ; set_color normal ; echo -e "$tex_output\n" end # one more comparison # babel AE vs babel BE if test "$babel_output" != "$babel_output_british" set_color yellow ; echo -en "babel (BE): " set_color normal ; echo -e "$babel_output_british\n" end end echo -e "\nQuitting...\n" # clean up if test -e $tmpdir rm -r $tmpdir end end