Я хочу использовать латекс на своих участках с помощью matplotlib. Пока что это работает, но теперь обратная косая черта усложняет задачу.
Вот что я пробовал:
r'$a_{{\text{{test}}}}$ ({})'.format('foo')
Out[13]: '$a_{\\text{test}}$ (foo)'
Но мой ожидаемый результат
'$a_{\text{test}}$ (foo)'
Я пробовал много возиться с этим, но безрезультатно: экранирование обратной косой черты в необработанной среде естественным образом создает 4 из них. Как получить ожидаемую одинарную обратную косую черту?
То, что принципиально не работает, строит это в matplotlib
import matplotlib.pyplot as plt
plt.plot(np.array([1, 1]), label=r'$a_{{\text{{test}}}}$ ({})'.format('foo'))
plt.legend()
что приводит к следующей ошибке:
RuntimeError: latex was not able to process the following string:
b'$a_{\\\\text{test}}$ (foo)'
Here is the full report generated by latex:
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/Debian) (preloaded format=latex)
restricted \write18 enabled.
entering extended mode
(/home/saman/.cache/matplotlib/tex.cache/3d4d47cda002ea7b54e89aca2a4b3fae.tex
LaTeX2e <2017-04-15>
Babel <3.18> and hyphenation patterns for 84 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/latex/type1cm/type1cm.sty)
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/helvet.sty
(/usr/share/texlive/texmf-dist/tex/latex/graphics/keyval.sty))
(/usr/share/texlive/texmf-dist/tex/latex/base/textcomp.sty
(/usr/share/texlive/texmf-dist/tex/latex/base/ts1enc.def))
(/usr/share/texlive/texmf-dist/tex/latex/geometry/geometry.sty
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifpdf.sty)
(/usr/share/texlive/texmf-dist/tex/generic/oberdiek/ifvtex.sty)
(/usr/share/texlive/texmf-dist/tex/generic/ifxetex/ifxetex.sty)
Package geometry Warning: Over-specification in `h'-direction.
`width' (5058.9pt) is ignored.
Package geometry Warning: Over-specification in `v'-direction.
`height' (5058.9pt) is ignored.
)
No file 3d4d47cda002ea7b54e89aca2a4b3fae.aux.
(/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)
*geometry* driver: auto-detecting
*geometry* detected driver: dvips
(/usr/share/texlive/texmf-dist/tex/latex/psnfss/ot1phv.fd)
! Undefined control sequence.
l.13 ...{10.000000}{12.500000}{\sffamily $a_{\text
{test}}$ (foo)}
No pages of output.
Transcript written on 3d4d47cda002ea7b54e89aca2a4b3fae.log.
@torek Действительно, это ответ, и его стоит сформулировать как единое целое :)






После форматирования не сырье. Выход в порядке. Попробуйте сохранить это в переменной, а затем распечатать.
s = r"\{}"
print(s)
res = s.format("foo")
print(res)
В качестве альтернативы можно использовать r'string'.decode('string_escape').
Я обновил вопрос, так как вы предполагаете, что результат в порядке: в целом, matplotlib не нравится строка, поэтому я попытался отладить ее так, как был.
@FooBar, значит, с латексом что-то не так. вы заметили выход? l.13 ...{10.000000}{12.500000}{\sffamily $a_{\text {test}}$ (foo)}, это правильно? =
У вас есть только одна обратная косая черта. Я не знаю, как вы смотрите на свою строку, но вывод имеет необработанную строковую нотацию, поэтому вы видите \\. Но это только для демонстрационных целей. Например, вывод также показывает одинарные кавычки ('...'), которые на самом деле также не являются частью вашей строки.
Попробуйте print(r'$a_{{\text{{test}}}}$ ({})'.format('foo')).
Я обновил вопрос, так как вы предполагаете, что результат в порядке: в целом, matplotlib не нравится строка, поэтому я попытался отладить ее так, как был.
@FooBar Ошибка LaTeX l.13 ...{10.000000}{12.500000}{\sffamily $a_{\text {test}}$ (foo)} показывает, что это действительно \text{test}. Что-то еще не так (например, действительно ли \text{...} действителен LaTeX?).
Вне python $a_{\text{test}}$ (foo) прекрасно компилируется прямо в латексе. Вы предлагаете мне открыть новый вопрос, посвященный matplotlib?
@FooBar В этом есть смысл, да.
Вы получаете ошибку, заключающуюся в том, что
\textне определен, и действительно, он не определен (вы не вызывалиamsmath). Возможно, вы хотели\mathrmили\textnormal. См. Также tex.stackexchange.com/q/98406/95042