[HOME] [BASH] [Window Managers]

Correct common LaTeX punctuation

#! /bin/sh
# latex-punctuation -- Interactively correct common LaTeX punctuation

if [ ! -e $1 ] || [ "$1" = "" ] ||
	[ "`grep 'begin{document}' $1`" = "" ] ; then
	echo "Usage: `basename $0` </path/to/master-file.tex>"
	exit 1
fi

cd `dirname $1`

for i in *.tex ; do
	# Replace '...' for '\ldots'
	grep -H --line-number --color=auto '\.\.\.' $i &&
	{
		echo -e '\nCorrection:'
		grep -H --line-number --color=auto '\.\.\.' $i | \
		sed 's/\.\.\./\\ldots/g' | \
		grep --line-number --color=auto 'ldots'
		echo -n 'Apply [y|n]? '
		read accept
		while [ "$accept" = "" ] ; do
			echo -n '[y|n]? '
			read accept
		done
		[ "$accept" = "y" ] &&
		{
			sed -i 's/\.\.\./\\ldots/g' $i
			echo -e '\nApplied!'
		}
		echo '-----------------------------'
	}

	# Add scaped space when '\ldots' tag it is not at the end of a
	# paragraph
	grep -H --line-number --color=auto '[^ ``]\\ldots\ [^ \\]' $i &&
	{
		echo -e '\nCorrection:'
		grep -H --line-number --color=auto '[^ ``]\\ldots\ [^ \\]' $i | \
		sed 's/\([^ ``]\\ldots\)\(\ [^ \\]\)/\1\\\2/g' | \
		grep --line-number --color=auto 'ldots'
		echo -n 'Apply [y|n]? '
		read accept
		while [ "$accept" = "" ] ; do
			echo -n '[y|n]? '
			read accept
		done
		[ "$accept" = "y" ] &&
		{
			sed -i 's/\([^ ``]\\ldots\)\(\ [^ \\]\)/\1\\\2/g' $i
			echo -e '\nApplied!'
		}
		echo '-----------------------------'

	}

	# Add escaped space after abbreviation (LaTeX assumes end of line).
	grep -H --line-number --color=auto '[^@]\.\ [a-z]' $i &&
	{
		echo -e '\nCorrection:'
		grep -H --line-number --color=auto '[^@]\.\ [a-z]' $i | \
		sed 's/\([^@]\.\)\(\ [a-z]\)/\1\\\2/g' | \
		grep --line-number --color=auto '\.\\[^\\]'
		echo -n 'Apply [y|n]? '
		read accept
		while [ "$accept" = "" ] ; do
			echo -n '[y|n]? '
			read accept
		done
		[ "$accept" = "y" ] &&
		{
			sed -i 's/\([^@]\.\)\(\ [a-z]\)/\1\\\2/g' $i
			echo -e '\nApplied!'
		}
		echo '-----------------------------'
	}

	# Add \@ before end of line dot preceded by an upper case letter
	# (Latex assumes abbreviation).
	grep -H --line-number --color=auto '[A-Z]\.\ \ [A-Z]' $i &&
	{
		echo -e '\nCorrection:'
		grep -H --line-number --color=auto '[A-Z]\.\ \ [A-Z]' $i | \
		sed 's/\([A-Z]\)\(\.\ \ [A-Z]\)/\1\\@\2/g' | \
		grep --line-number --color=auto '\\@'
		echo -n 'Apply [y|n]? '
		read accept
		while [ "$accept" = "" ] ; do
			echo -n '[y|n]? '
			read accept
		done
		[ "$accept" = "y" ] &&
		{
			sed -i 's/\([A-Z]\)\(\.\ \ [A-Z]\)/\1\\@\2/g' $i
			echo -e '\nApplied!'
		}
		echo '-----------------------------'
	}
done

exit 0
<= Prev Next =>


[HOME] [BASH] [Window Managers]