diff --git a/cmake/PugsDoc.cmake b/cmake/PugsDoc.cmake
index 099eda180d7b37d3824fbfac370151c018718952..7be934abae82d06b1e5dcf7265c7710521e02c8e 100644
--- a/cmake/PugsDoc.cmake
+++ b/cmake/PugsDoc.cmake
@@ -78,6 +78,8 @@ if (EMACS)
       DEPENDS
       "${PUGS_SOURCE_DIR}/doc/userdoc.org"
       "${PUGS_SOURCE_DIR}/doc/lisp/userdoc-pdf.el"
+      "${PUGS_SOURCE_DIR}/tools/pgs-pygments.sh"
+      "${PUGS_SOURCE_DIR}/tools/pgs-pygments.py"
       pugs
       pugsdoc-dir
       pugsdoc-download-elpa
diff --git a/doc/lisp/build-doc-config.el b/doc/lisp/build-doc-config.el
index 4cf83f69251b96aaa0f9473a4c6b0ba8fa8a1e51..1da3a5c9fecf3540dfd701380a340722379642cf 100644
--- a/doc/lisp/build-doc-config.el
+++ b/doc/lisp/build-doc-config.el
@@ -43,8 +43,7 @@
 
 (custom-set-variables
  '(org-export-html-postamble nil)
- ;; By now pugs is not known by Pygments raw text is better
- '(org-latex-minted-langs '((pugs "Text") (pugs-error "Text")))
+ '(org-latex-minted-langs '((pugs "Pugs") (pugs-error "Pugs")))
  '(org-confirm-babel-evaluate nil)
  '(org-html-validation-link nil)
  '(org-src-fontify-natively t)
diff --git a/doc/userdoc.org b/doc/userdoc.org
index 8b15ca2c04a5b9cb77df1d60e66a3b1fb5424b9c..6538215304ff3da89bd385e8b7918569490cc85e 100644
--- a/doc/userdoc.org
+++ b/doc/userdoc.org
@@ -43,6 +43,9 @@
 #+LATEX_HEADER_EXTRA: \BeforeBeginEnvironment{warning}{\begin{mdframed}[linecolor=red,backgroundcolor=red!10]}
 #+LATEX_HEADER_EXTRA: \AfterEndEnvironment{warning}{\end{mdframed}}
 
+#+LATEX_HEADER_EXTRA: \usemintedstyle{perldoc}
+#+LATEX_HEADER_EXTRA: \renewcommand{\MintedPygmentize}{${PUGS_SOURCE_DIR}/tools/pgs-pygments.sh}
+
 #+begin_src latex :exports results
   \let\OldTexttt\texttt
   \renewcommand{\texttt}[1]{\fcolorbox{gray!50}{gray!5}{\OldTexttt{#1}}}
diff --git a/tools/pgs-pygments.py b/tools/pgs-pygments.py
new file mode 100755
index 0000000000000000000000000000000000000000..a6622c0dc1b25aa8f998a2480af0f5d080c4a5d5
--- /dev/null
+++ b/tools/pgs-pygments.py
@@ -0,0 +1,42 @@
+from pygments.lexer import *
+from pygments.token import *
+
+class PugsLexer(RegexLexer):
+    name = 'Pugs'
+    aliases = ['pgs']
+    filenames = ['*.pgs']
+
+    tokens = {
+        'root': [
+            (r'([Ll]?)(")', bygroups(String.Affix, String.Double), 'string'),
+            (r'([Ll]?)(\')(\\[^\']+)(\')', bygroups(String.Affix, String.Char, String.Escape, String.Char)),
+            (r'\s+', Whitespace),
+            (r'/\*', Comment.Multiline, 'comment'),
+            (r'//.*?$', Comment.Singleline),
+            (r'/', Text),
+            (words(('B', 'N', 'Z', 'R', 'R^1', 'R^2','R^3', 'R^1x1', 'R^2x2', 'R^3x3', 'string'), suffix=r'\b'), Keyword.Type),
+            (words(('let', 'import', 'do', 'while', 'for', 'if', 'else' 'break'), suffix=r'\b'), Keyword.Reserved),
+            (words(('and', 'or', 'xor', 'not', 'true', 'false'), suffix=r'\b'), Keyword.Reserved),
+            (words(('cout', 'cerr', 'clog'), suffix=r'\b'), Name.Variable),
+            (r'[,~!%&*+=|?:<>/-]', Operator),
+            (r'[+-]?\d+(\.\d*)?[Ee][+-]?\d+', Number.Float),
+            (r'[+-]?(\d+\.\d*)|(\d*\.\d+)([Ee][+-]?\d+)?', Number.Float),
+            (r'\d+[LlUu]*', Number.Integer),
+            (r'[\(\)\[\];.]', Punctuation),
+            (r'[{}]', Punctuation),
+            (r'\w+', Name),
+        ],
+        'comment': [
+            (r'[^*/]+', Comment.Multiline),
+            (r'/\*', Comment.Multiline, '#push'),
+            (r'\*/', Comment.Multiline, '#pop'),
+            (r'[*/]', Comment.Multiline)
+        ],
+        'string': [
+            (r'"', String, '#pop'),
+            (r'\\([\\abfnrtv"\']|x[a-fA-F0-9]{2,4}|[0-7]{1,3})', String.Escape),
+            (r'\\\n', String.Escape),  # line continuation
+            (r'[^\\"]+', String),  # all other characters
+            (r'\\', String),  # stray backslash
+        ],
+    }
diff --git a/tools/pgs-pygments.sh b/tools/pgs-pygments.sh
new file mode 100755
index 0000000000000000000000000000000000000000..98f90c55e028546aa8fa49fc069f06b1fe3f057a
--- /dev/null
+++ b/tools/pgs-pygments.sh
@@ -0,0 +1,28 @@
+#!/bin/env bash
+
+arguments=()
+
+while [[ "$#" -ne 0 ]]; do
+  case "$1" in
+  -l)
+    arguments+=("$1")
+
+    shift
+    lexer=$1
+
+    if [[ "$lexer" == "Pugs" ]]; then
+      arguments+=("${PUGS_SOURCE_DIR}/tools/pgs-pygments.py:PugsLexer")
+      arguments+=("-x")
+    else
+      arguments+=("${lexer}")
+    fi
+
+    ;;
+  *)
+    arguments+=("$1")
+    ;;
+  esac
+  shift
+done
+
+pygmentize -Ostyle=colorful "${arguments[@]}"