matlab-prettifier 包的 tex4ht 问题。lstlisting 代码显示与 lstinputlisting 不同

matlab-prettifier 包的 tex4ht 问题。lstlisting 代码显示与 lstinputlisting 不同

当谈到 tex4ht 时,在 Latex 中使用 Matlab 代码似乎是失败的案例。

我改用matlab-prettifierpackage 而不是mcodepackage 在 Latex 中加载 Matlab 代码,因为我发现 tex4ht 使用 mcode 存在太多问题。我已经发布了 2 个相关问题。mcode-package-with-tex4ht-and-lualatex-produce-invalid-html-for-strings-in-matlatex4ht 使用 mcode 包时会对某些 matlab 代码进行打乱

现在我发现使用matlab-prettifier包的另一个问题。问题是,使用时,字符串引号会从 Matlab 代码中删除,而使用相同代码\lstinputlisting时,字符串引号会被删除。lstlisting

我尝试过更改,escapechar但没有任何效果。这是 MWE

\documentclass[12pt]{article}%
\usepackage[T1]{fontenc}
\usepackage[utf8]{luainputenc}
\usepackage{amsmath,mathtools}
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
  style              = Matlab-editor,
  basicstyle         = \mlttfamily,
  escapechar         = `,
  mlshowsectionrules = true,
}

\begin{document}

\lstinputlisting{foo_x.m}

\begin{lstlisting}[language=Matlab,style=Matlab-editor]
% ode45 "is based on an explicit Runge-Kutta formula...
% program"
%

function foo_x
clear; clf; clc;
x=10;
fprinf('this is %d\n',x);
end
\end{lstlisting}
\end{document}

文件中的代码 foo_x.m 与上面显示的 latex 文件中的代码相同。完全相同的列表。为了节省您制作foo_x.m和复制代码以重现此内容的时间,这里是链接到 m 文件

这是 make4ht 在 HTML 中生成的内容:

Mathematica 图形

注意同一代码的第一个清单和第二个清单之间的区别。第一个清单中的字符串没有单引号。

使用编译

 make4ht --lua -u foo.tex

以下是 lualatex 生成的结果。两种情况下的代码相同。

Mathematica 图形

\usepackage[utf8]{luainputenc}从 MWE 中删除了它,但没有什么区别。我可以继续尝试添加和删除包并更改选项,但这真的很累。似乎在 Listing with 中使用 Matlab 代码make4ht --lua是一个问题。当我删除该--lua选项时,它可以工作:

make4ht -u foo.tex

Mathematica 图形

但我需要使用--lua选项make4ht。那么解决方案是什么?

Linux 上的 TL 2015。

答案1

我发现了问题。tex4ht\lstset的工作方式与 lualatex 不同。当我将选项的顺序更改为时,\lstset问题就消失了!我只需更改

\lstset{
  language           = Matlab,
  style              = Matlab-editor,
  basicstyle         = \mlttfamily,
  escapechar         = `,
  mlshowsectionrules = true  
}

\lstset{
  basicstyle         = \mlttfamily,
  language           = Matlab,
  style              = Matlab-editor,
  escapechar         = `,
  mlshowsectionrules = true  
}

现在字符串引号就在那里!移动到language= Matlab上面basicstyle= \mlttfamily又把问题带回来了。所以解决方案是这样的

\documentclass[12pt]{article}%    
\usepackage[T1]{fontenc}
\usepackage[utf8]{luainputenc}
\usepackage{amsmath,mathtools}           
\ifdefined\HCode
\usepackage{matlab-prettifier}
\lstset{
  basicstyle         = \mlttfamily,
  language           = Matlab,
  style              = Matlab-editor,
  escapechar         = `,
  mlshowsectionrules = true  
}
\else
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
  language           = Matlab,
  style              = Matlab-editor,
  basicstyle         = \mlttfamily,
  escapechar         = `,
  mlshowsectionrules = true  
}
\fi

\begin{document}

Now showing lstinputlisting

\lstinputlisting{foo_x.m}

Now showing lstlisting

\begin{lstlisting}[language=Matlab,style=Matlab-editor]
% ode45 "is based on an explicit Runge-Kutta formula...
% program"
%

function foo_x
clear; clf; clc;
x=10;
fprinf('this is %d\n',x);
end
\end{lstlisting}
\end{document}

以下是结果make4ht --lua -u foo.tex

Mathematica 图形

我发现的另一个问题是,如果我使用\usepackage{times}tex4ht,代码周围的引号也会丢失!只需添加\usepackage{times}上面的 MWE,引号就会再次消失。

因此要注意两点:不要使用,\usepackage{times}并确保在使用和编译时将其放在后面。language = Matlab,我怀疑这两件事在使用选项时会导致与tex4ht相同的基本编码问题。basicstyle= \mlttfamilymake4ht--lua--lua

软件包冲突和选项冲突太多了。跟踪所有这些事情简直是一场噩梦。

相关内容