如何在gnuplot中用自定义Unicode字体生成带特殊符号的EPS/PDF?
Hey there, let’s break down why your gnuplot EPS special character issue is happening and walk through practical fixes to get your enhanced annotations working properly.
Why Your Current Setup Isn’t Working
Let’s start with the root causes:
- gnuplot 5.2.6’s PostScript Unicode Limitations: This older version’s native PostScript terminal has limited Unicode support. The
adobeglyphnamesoption only maps characters that match Adobe’s standard glyph name set (mostly Latin letters and basic symbols). Greek characters and other non-standard Unicode glyphs don’t fit this mapping, so gnuplot can’t locate them in your font. - Incomplete Font Conversion: When you converted CMU Sans Serif to PFA, your tool might have stripped out non-Latin glyphs or failed to preserve the critical Unicode-to-glyph-name mapping required for PostScript. Many conversion tools default to only including common characters to reduce file size.
- Missing Encoding Configuration: The PostScript terminal relies on explicit font encoding settings. Without telling gnuplot how to map your Unicode characters to the font’s glyphs, it can’t render non-standard symbols correctly.
Fixes to Try
Option 1: Switch to the pdfcairo Terminal (Easier, More Reliable)
The pdfcairo terminal has far better Unicode and custom font support than the native PostScript terminal. You can generate a PDF first, then convert it to EPS if needed. Here’s how:
- Either install CMU Sans Serif to your system’s font directory, or add your working directory to gnuplot’s font path with
set fontpath "./" - Update your script like this (save it as UTF-8):
set terminal pdfcairo enhanced font "CMU Sans Serif,12" encoding utf8 set output "plot.pdf" # Example plot with enhanced annotations: plot x title "*Italic Latin Text* / **Bold Latin Text** / α β γ"- Use
*for italic and**for bold (thanks toenhancedmode) - Greek characters work directly as Unicode since we set
encoding utf8
- Use
- If you need an EPS file, convert the PDF using a tool like
pdftops:pdftops -eps plot.pdf plot.eps
Option 2: Fix the Native PostScript Terminal Setup (If You Must Use It)
If you need to stick with the PostScript terminal, you’ll need to fix the font conversion and explicitly reference glyph names:
- Re-convert the Font with Full Glyph Support:
Use FontForge to ensure all glyphs and mappings are preserved:- Open CMU Sans Serif in FontForge
- Go to
File > Generate Fontsand selectType 1 (PFA) - In the generation options, check "Generate PostScript Names" and "Include Glyph Names" to ensure no characters are stripped
- Save the PFA file (e.g.,
cmusans-regular.pfa) and repeat for italic/bold variants
- Update Your Gnuplot Script:
You’ll need to reference glyph names directly for Greek characters (PostScript doesn’t use Unicode code points). Here’s an example:set fontpath "./" set terminal postscript enhanced color font "cmusans-regular,12" adobeglyphnames set output "plot.eps" # Use PostScript glyph names for Greek characters; call italic/bold via separate fonts plot x title "*Italic Latin* / **Bold Latin** / {cmusans-regular alpha beta gamma}"- Get the correct PostScript glyph names for Greek characters (e.g.,
alpha,beta) from FontForge’s glyph info panel - For italic/bold text, use the separate PFA files you converted (e.g.,
{cmusans-Italic Your Text})
- Get the correct PostScript glyph names for Greek characters (e.g.,
Additional Checks
- Verify Script Encoding: Double-check that your gnuplot script is saved as UTF-8. Some editors default to encodings like Windows-1252, which will mangle Greek characters. Use your editor’s encoding settings or run
file -I your_script.gp(Linux/macOS) to confirm. - Upgrade Gnuplot: Version 5.2.6 is quite old. Upgrading to 5.4+ improves PostScript and Unicode handling, making custom font setup smoother.
内容的提问来源于stack exchange,提问作者DanielTuzes
相关产品推荐
相关产品推荐

