Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

pgfutils

REUSE statusSPEC 0 — Minimum Supported Dependencies

The Portable Graphics Format (PGF) is a language for producing vector graphics within TeX documents. There is also a higher-level language TikZ (TikZ ist kein Zeichenprogramm -- TikZ is not a drawing program) which uses PGF.

Since version 1.2, the Python plotting library Matplotlib has included a PGF backend to generate figures ready for inclusion in a TeX document. In order to get consistent figures that fit with the style of the document, this requires some configuration. The aim of pgfutils is to simplify this configuration and allow figures to be easily generated from a Python script.

The module provides two functions which set up and then save the figure. The actual plotting is performed by standard Matplotlib functions. For example, to generate a plot showing the 1st, 3rd, 5th, 7th, 9th and 11th harmonics of an ideal square wave and the resulting sum:

# Set up the figure environment.frompgfutilsimportsetup_figure, savesetup_figure(width=0.9, height=0.4)
importnumpyasnpfrommatplotlibimportpyplotasplt# Generate a square wave from a few terms of its Fourier series.f=3t=np.linspace(0, 1, 501)
square=np.zeros(t.shape)
forninrange(1, 12, 2):
# Create this harmonic and plot it as a dashed# partially-transparent line.component=np.sin(2*n*np.pi*f*t) /nplt.plot(t, component, '--', alpha=0.4)
# Add it to the overall signal.square+=component# Scale the final sum.square*=4/np.pi# Plot and label the figure.plt.plot(t, square, 'C0')
plt.xlim(0, 1)
plt.ylim(-1.2, 1.2)
plt.xlabel("Time (s)")
plt.ylabel("Amplitude (V)")
# Save as a PGF image.save()

Requirements

pgfutils follows SPEC0 when determining supported Python versions. Any minor version of Python released within the 3 years prior to a pgfutils release is supported. As of April 2026, this means Python 3.12 or later.

The only required external dependency is Matplotlib. Any minor version of Matplotlib which was first released within the 24 months prior to a pgfutils release is supported. As of April 2026, this means Matplotlib 3.9.0 or later.

The continuous integration testing checks the combinations of supported Python and Matplotlib version. Older versions of Python or Matplotlib may work, but are not tested and are not supported.

Examples

pgfutils comes with some examples which demonstrate its usage and integration into a build system. Depending on your installation method, these may be present somewhere in your filesystem (e.g., on a Linux system, they might be at /usr/share/matplotlib-pgfutils/examples). They can also be found in the data/share/matplotlib-pgfutils/examples directory.

Documentation

Documentation for pgfutils can be found online at https://matplotlib-pgfutils.readthedocs.io/

Alternatively, you can find the source of this documentation in Markdown format in the doc/ directory of the source:

An example configuration file showing the default settings is given in data/share/matplotlib-pgfutils/pgfutils.cfg.

Unit testing

Test Statuscodecov

Extensive unit tests are included in the tests/ directory of the source. Each commit to the source repository is automatically tested using GitHub actions. The test coverage (that is, how many of the lines of code in the source were executed during the tests) is monitored by Codecov. The badges above show the status of the last commit made to the source.

You can also run the tests on a local copy of the code. They are designed to be run with the pytest framework and employ the Coverage.py package via the pytest-cov plugin to measure the coverage. If you have these packages installed, run pytest from the top-level directory to execute the tests. A basic test coverage report will be printed on the terminal, and the full report can be viewed by opening the htmlcov/index.html file in your web browser.

License

pgfutils is released under the three-clause BSD license. The terms of this license can be found in the LICENSES/BSD-3-Clause.txt file in the source, or online at https://opensource.org/licenses/BSD-3-Clause

The Cotham Sans font used in some unit tests is copyright (c) 2015 Sebastien Sanfilippo and is licensed under the SIL Open Font License, Version 1.1. The license can be found in the source at LICENSES/OFL-1.1.txt or online at https://scripts.sil.org/OFL and the font itself can be found at https://github.com/sebsan/Cotham

pgfutils supports the REUSE initiative. All files either have with SPDX-compliant license identifiers in their headers, or have a REUSE.toml manifest file accompanying them.

About

Turn Matplotlib scripts into PGF (LaTeX) figures easily.

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages