当 Latex 代码包含 \unicode{f818} 和 \unicode{f817} 时 pdflatex 崩溃以及如何处理

当 Latex 代码包含 \unicode{f818} 和 \unicode{f817} 时 pdflatex 崩溃以及如何处理

我不知道 Latex 代码(自动生成的代码无效)或者 pdflatex 是否能够处理此代码,但我需要找到正确的包。我查看了这个在 Latex 中输入 Unicode 字符并添加了那里提到的包。但仍然出现错误。也许我需要定义一个宏?我需要添加一个智能\DeclareUnicodeCharacter来处理这个问题吗?有没有办法使用它\DeclareUnicodeCharacter来使下面导致问题的这些 un​​icode 只是一个空格,以便 pdflatex 和 latex 可以处理该文件?

Mathematica 为其表达式之一生成 Latex 代码,该表达式使用特殊数学符号(字母上下的小点),如下所示关联

这是我的笔记本的屏幕截图,显示了生成的 Latex 代码

Mathematica 图形

当我在文档中使用此 Latex 代码时,pdflatex.exe 实际上崩溃了(MikTex),并且 Linux 上的 texlive 也出现了错误:

(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsa.fd)
(/usr/local/texlive/2014/texmf-dist/tex/latex/amsfonts/umsb.fd)
! Undefined control sequence.
l.11 ...to \text{DifferentialRoot}\left(\{\unicode
                                                  {f818},\unicode{f817}\}
? 

生成的代码很复杂,我无法手动编辑它,否则如果我开始移动部件,我将破坏生成的 Latex 代码(我还需要多次运行,因此需要一次性修复)

这是针对一个实际案例的 MWE。我有很多这样的案例,所以正在寻找一个可以放在 Latex 文档顶部的宏来解决所有这些\unicode问题。删除所有这些 un​​icode 的解决方案也很好。符号不必在上方或下方有这些点,但这就是 Mathematica 生成它们的方式。但对于 pdf 文件,我实际上不需要它们。

\documentclass[12pt]{article}
\usepackage{amsmath,mathtools}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[mathletters]{ucs}
\usepackage[utf8]{inputenc} 
\begin{document}

$\left\{\left\{y(x)\to \text{DifferentialRoot}\left(\{\unicode{f818},
  \unicode{f817}\}
  \unicode{f4a1}\left\{\left(a^2 \unicode{f817}^3+a\right) 
  \unicode{f818}(\unicode{f817})+\left(2 \unicode{f817}^3 a-1\right) 
  \unicode{f818}'(\unicode{f817})+\unicode{f817} 
  \unicode{f818}''(\unicode{f817})=0,
  \unicode{f818}(1)=c_1,\unicode{f818}'(1)=c_2\right\}\right)(x)\right\}\right\}$

\end{document} 

答案1

U+F817、U+F818 和 U+F4A1 指向私人使用区域,因此无法说出它们应该生成什么,因为它依赖于字体。

从你的照片来看,这封信似乎是

  • U+F817 是x
  • U+F818 是y
  • U+F4A1 是,

所以你可以

\makeatletter
\newcommand{\unicode}[1]{\@nameuse{unicode@#1}}
\newcommand{\unidef}[2]{\@namedef{unicode@#1}{#2}}
\makeatother

\unidef{f817}{x}
\unidef{f818}{y}
\unidef{f4a1}{,}

完整代码:

\documentclass[12pt]{article}
\usepackage{amsmath,mathtools}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[utf8]{inputenc}

\makeatletter
\newcommand{\unicode}[1]{\@nameuse{unicode@#1}}
\newcommand{\unidef}[2]{\@namedef{unicode@#1}{#2}}
\makeatother

\unidef{f817}{x}
\unidef{f818}{y}
\unidef{f4a1}{,}

\begin{document}

$\left\{\left\{y(x)\to \text{DifferentialRoot}\left(\{\unicode{f818},
  \unicode{f817}\}
  \unicode{f4a1}\left\{\left(a^2 \unicode{f817}^3+a\right)
  \unicode{f818}(\unicode{f817})+\left(2 \unicode{f817}^3 a-1\right)
  \unicode{f818}'(\unicode{f817})+\unicode{f817}
  \unicode{f818}''(\unicode{f817})=0,
  \unicode{f818}(1)=c_1,\unicode{f818}'(1)=c_2\right\}\right)(x)\right\}\right\}$

\end{document}

我只能显示开头,因为公式由于\left和的错误使用而无法破解\right。编写 LaTeX 代码生成器的人似乎对 TeX 了解不多。

在此处输入图片描述

\left删除所有and之后的排版结果如下\right

在此处输入图片描述

答案2

您可以在自动生成的文本之前添加以下代码:

\def\unicode#1{\csname U+#1\endcsname}
\def\unidef#1{\expandafter\def\csname U+#1\endcsname}

\unidef{f818}{{\bdot{\dot y}}}
\unidef{f817}{{\bdot{\dot x}}}
\unidef{f4a1}{,}

\def\bdot#1{\vtop{\offinterlineskip
   \halign{\hfil##\hfil\cr$#1\vphantom y$\cr\noalign{\vskip1pt}.\cr}}}

% the text generated by Mathematica follows:

\documentclass[12pt]{article} 
\usepackage{amsmath,mathtools}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage[mathletters]{ucs}
\usepackage[utf8]{inputenc}
\begin{document}

$\left\{\left\{y(x)\to \text{DifferentialRoot}\left(\{\unicode{f818},
  \unicode{f817}\}
  \unicode{f4a1}\left\{\left(a^2 \unicode{f817}^3+a\right) 
  \unicode{f818}(\unicode{f817})+\left(2 \unicode{f817}^3 a-1\right) 
  \unicode{f818}'(\unicode{f817})+\unicode{f817} 
  \unicode{f818}''(\unicode{f817})=0,
  \unicode{f818}(1)=c_1,\unicode{f818}'(1)=c_2\right\}\right)(x)\right\}\right\

\end{document}

我的意思是你需要在 x、y 的上方和下方打印点,因此\bdot被定义。

相关内容