Recognise usual functions even without the leading '\'
This commit is contained in:
parent
f3735c4e47
commit
0efa4c9ed1
10
Makefile
10
Makefile
@ -1,7 +1,7 @@
|
||||
SOURCES = $(wildcard *.md)
|
||||
OUT = $(SOURCES:.md=.pdf)
|
||||
|
||||
HS_FILTERS_NAMES = nice-frac
|
||||
HS_FILTERS_NAMES = nice-frac usual-fun
|
||||
PY_FILTERS_NAMES = pandoc-svg.py
|
||||
EXT_FILTERS = pandoc-crossref
|
||||
|
||||
@ -13,11 +13,11 @@ FILTERS = $(PY_FILTERS) $(HS_FILTERS) $(EXT_FILTERS)
|
||||
|
||||
all: $(HS_FILTERS) $(OUT)
|
||||
|
||||
$(OUT): $(SOURCES)
|
||||
pandoc --smart -t latex $< $(addprefix --filter=, $(FILTERS)) -o $@
|
||||
$(OUT):
|
||||
pandoc -S -t latex $(basename $@).md $(addprefix --filter=, $(FILTERS)) -o $@
|
||||
|
||||
$(HS_FILTERS): $(addsuffix .hs, $(HS_FILTERS))
|
||||
ghc --make -O2 $< -o $@
|
||||
$(HS_FILTERS):
|
||||
ghc --make $@.hs -o $@
|
||||
|
||||
clean:
|
||||
rm -f $(OUT)
|
||||
|
12
README.md
12
README.md
@ -12,14 +12,14 @@ Includes various Pandoc filters:
|
||||
* Include [pandoc-crossref](https://github.com/lierdakil/pandoc-crossref) for
|
||||
easy numbering and referencing.
|
||||
|
||||
* Convert fractions like "(n/k)" to "\frac{n}{k}" when n and k are integers in
|
||||
math environment.
|
||||
* Convert simple fractions like "(n / k)" to LaTeX's "\\frac{n}{k}" when n and
|
||||
k are integers in a math environment.
|
||||
|
||||
* automatically convert function names (cos, sin, exp, log) to their
|
||||
LaTeX equivalent (\\cos and so on) when in a mathematical environment,
|
||||
then taking out the useless leading `\`.
|
||||
|
||||
## TODO
|
||||
|
||||
* automatically convert function names (cos, sin, exp, log) to their
|
||||
LaTeX equivalent (\cos and so on) when in a mathematical environment,
|
||||
then taking out the useless leading `\`.
|
||||
|
||||
* anything else like this that could help writing more readable LaTeX
|
||||
code :)
|
||||
|
@ -9,12 +9,12 @@ space = "[ \\t\\n\\r]*"
|
||||
num :: String
|
||||
num = "([0-9]+)"
|
||||
|
||||
-- Substitute latex fractions like '\frac{42}{1}' for (42 / 1)
|
||||
-- Replace fractions like "(42 / 1)" by "\frac{42}{1}"
|
||||
fracReg :: Regex
|
||||
fracReg = mkRegex $
|
||||
"\\(" ++ space ++ num ++ space ++ "/" ++ space ++ num ++ "\\)"
|
||||
"\\(" ++ space ++ num ++ space ++ "/" ++ space ++ num ++ space ++ "\\)"
|
||||
frac :: String -> String
|
||||
frac s = subRegex fracReg s "\\frac{\\1}{\\2}"
|
||||
frac s = subRegex fracReg s "\\\\frac{\\1}{\\2}"
|
||||
|
||||
-- Apply the substitution to all Latex parts on the AST
|
||||
niceFrac :: Inline -> Inline
|
||||
|
33
filters/usual-fun.hs
Normal file
33
filters/usual-fun.hs
Normal file
@ -0,0 +1,33 @@
|
||||
-- usual-fun.hs
|
||||
|
||||
import Text.Pandoc.JSON
|
||||
import Text.Regex
|
||||
import Data.List (intercalate)
|
||||
|
||||
-- Association list for usual functions
|
||||
usual :: String
|
||||
usual = intercalate "|" [
|
||||
"cos", "sin", "tan", "cotan",
|
||||
"arccos", "arcsin", "arctan",
|
||||
"exp", "log"]
|
||||
|
||||
-- Remove the '\' before usual functions' names if present
|
||||
rmBSReg :: Regex
|
||||
rmBSReg = mkRegex $ "(\\\\)(" ++ usual ++ ")\\>"
|
||||
rmBS :: String -> String
|
||||
rmBS s = subRegex rmBSReg s "\\2"
|
||||
|
||||
-- Add a '\' before usual functions' names
|
||||
addBSReg :: Regex
|
||||
addBSReg = mkRegex $ "\\<(" ++ usual ++ ")\\>"
|
||||
addBS :: String -> String
|
||||
addBS s = subRegex addBSReg s "\\\\\\0"
|
||||
|
||||
-- Apply the substitution to all Latex parts on the AST
|
||||
niceFrac :: Inline -> Inline
|
||||
niceFrac (Math t s) = Math t (addBS . rmBS $ s)
|
||||
niceFrac x = x
|
||||
|
||||
main :: IO ()
|
||||
main = toJSONFilter niceFrac
|
||||
|
Loading…
Reference in New Issue
Block a user