У меня есть файл metapost, который я компилирую через mpost. Этот файл содержит специальные символы, которые не могут быть отображены, когда я включаю файл в latex. Мне потребовался inputenc utf8 в latex.
Кто-нибудь знает ответ на этот вопрос?
решение1
Я так предполагаю, вы не очень много говорите о своем окружении.
Вот три способа установки символов Юникода в Metapost.
Традиционный латекс
Чтобы использовать UTF8 в строках меток, вы можете сделать следующее:
prologues := 3;
outputtemplate := "%j%c.eps";
verbatimtex
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
etex
beginfig(1);
label.top(btex sprichwörtlichen etex, origin);
draw (left--right) scaled 2cm;
endfig;
end.
Чтобы Metapost мог latex
обрабатывать это, вам необходимо скомпилировать его с помощью:
mpost -tex=latex <filename>
В моей системе это выдает:
Используя эту настройку, вы сможете использовать любые символы Unicode, которые utf8
известны кодировке. Возможно, вам будет удобнее преобразовать .eps
созданный файл в .pdf
файл, прежде чем включать его в свой .tex
файл.
Современный LuaLaTeX
Мое личное предпочтение сегодня — использовать lualatex
для всей работы Metapost с luamplib
библиотекой. Преимущество в том, что вы получаете всю fontspec
среду, работающую на вас, и вы можете использовать любой из установленных вами надлежащих шрифтов OTF. Здесь я использовал Linux Libertine O
в качестве шрифта, который имеет хороший диапазон определенных символов Unicode.
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);
label.top("☞ sprichwörtlichen", origin);
draw (left--right) scaled 2cm;
endfig;
\end{mplibcode}
\end{document}
Вы компилируете это с помощью lualatex <filename>
, что дает:
Если вы не готовы использовать lualatex
LaTeX в качестве основного движка, то вы можете сделать то, что сделал я, и использовать standalone
класс для создания, э-э, автономного PDF-файла для вашей графики MP.
Старомодный простой метапост
(Не делайте этого на самом деле...)
Если вы предпочитаете придерживаться старого доброго Metapost и вообще не использовать LaTeX, все равно можно поддерживать по крайней мере подмножество UTF8 с помощью встроенного infont
оператора.
Рассмотрим следующую программу депутата:
prologues := 3;
outputtemplate := "%j%c.eps";
def U primary s = if string s: decode(s) fi enddef;
vardef decode(expr given) =
save a, i, s, out; string s, out; numeric a, i;
out = ""; i=0;
forever:
s := substring (i, incr i) of given;
a := ASCII s;
if a < 128:
elseif a = 194:
s := substring (i, incr i) of given;
elseif a = 195:
s := char (64 + ASCII substring (i, incr i) of given);
else:
s := "?";
fi
out := out & s;
exitif i >= length given;
endfor
out
enddef;
beginfig(1);
defaultfont := "phvr8r";
label.top(U"sprichwörtlichen", origin);
draw (left--right) scaled 2cm;
endfig;
end.
Это можно скомпилировать обычным способом mpost
без каких-либо опций, и это даст:
но будьте осторожны, что простая, быстрая и грязная decode
процедура поддерживает только очень ограниченное подмножество UTF8, и она преобразует то, что она делает, в ISO8859-1, или, скорее, в близкое приближение к ISO8859-1, которое обеспечивается кодировкой, 8r
используемой со phvr8r
шрифтом. С другой стороны, это быстро...
Примечания
- Основной цикл
decode
показывает "ловкий" способ пройти по строке. Макросincr
взят из простого MP: он увеличивает значение числовой переменной на 1, а затем возвращает это значение. Это именно то, что нам нужно использоватьsubstring
для чтения каждого символа в строке.