lstlisting
我花了很长时间才找到这个问题的原因。由于某些奇怪的原因,当我使用独立包时,由于 Latex 找不到某些字体,我的 Matlab 代码中的字体发生了变化。
我无法找到原因以及如何解决它。当我不包含standalone
并使用lstlisting
字体时,字体就会找到,并且是我想要的。这是 MWE,它有main.tex
作为父级,以及HW1.tex
使用加载的子级import
。
\documentclass[11pt,openany]{book}%
\usepackage[T1]{fontenc}
\usepackage{standalone}
\usepackage{import}
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
style = Matlab-editor,
basicstyle=\ttfamily\small,
breaklines = false,
escapechar = `,
mlshowsectionrules = true
}
\begin{document}
\subimport*{./}{HW1}
\end{document}
该文件位于HW1.tex
同一文件夹中,仅列出了一些用于说明的小 Matlab 代码。如下
\documentclass[11pt]{article}%
\begin{document}
\begin{lstlisting}
function nma_HW1_problem2_ECE719
%function to evaluate J at corner of the cube and do
%some syms caluclations.
syms u1 u2 u3;
J = 8*u1*u2*u3-4*u1*u2-4*u1*u3-4*u2*u3+2*u1+2*u2+2*u3-1;
%first find J value at all the corners, the coordinates are
a = {[-1 1] [-1 1] [-1 1]};
coords = allcomb(a{:});
end
\end{lstlisting}
\end{document}
现在我使用编译 main.tex pdflatex
,这就是我得到的结果
现在,当我做同样的事情,但不使用import
和时standalone
,这就是我得到的结果。这是现在修改后的main.tex
\documentclass[11pt,openany]{book}%
\usepackage[T1]{fontenc}
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
style = Matlab-editor,
basicstyle=\ttfamily\small,
breaklines = false,
escapechar = `,
mlshowsectionrules = true
}
\begin{document}
\begin{lstlisting}
function nma_HW1_problem2_ECE719
%function to evaluate J at corner of the cube and do
%some syms caluclations.
syms u1 u2 u3;
J = 8*u1*u2*u3-4*u1*u2-4*u1*u3-4*u2*u3+2*u1+2*u2+2*u3-1;
%first find J value at all the corners, the coordinates are
a = {[-1 1] [-1 1] [-1 1]};
coords = allcomb(a{:});
end
\end{lstlisting}
\end{document}
相同的代码。不同之处在于我将代码放在父文件中而不是子文件中。我使用 pdflatex 编译上述内容,得到以下结果
显然,由于字体缺失问题,它与第一种情况不同。
standalone
当我编译包含和的案例时,我确实看到了字体问题import
。但我不明白为什么它不能使用某些字体,但当我删除这些包时它确实找到了字体。这些是我在顶部案例中收到的警告:
(/usr/local/texlive/2015/texmf-dist/tex/generic/oberdiek/kvdefinekeys.sty))
(/usr/local/texlive/2015/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
(./HW1.tex
LaTeX Font Warning: Font shape `T1/cmtt/m/n' undefined
(Font) using `T1/cmr/m/n' instead on input line 11.
) [1{/usr/local/texlive/2015/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./main.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
){/usr/local/texlive/2015/texmf-dist/fonts/enc/dvips/cm-super/cm-super-t1.enc}
</usr/local/texlive/2015/texmf-dist/fonts/type1/public/cm-super/sfrm1000.pfb></
在第二种情况下,上述消息不会出现。但我不知道如何解决这个问题。
TL 2015. Linux. 这是第一个案例编译的文件列表。
*File List*
book.cls 2014/09/29 v1.4h Standard LaTeX document class
bk11.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
fontenc.sty
t1enc.def 2005/09/27 v1.99g Standard LaTeX file
standalone.sty 2015/07/15 v1.2 Package to include TeX sub-files with preambl
es
ifluatex.sty 2010/03/01 v1.3 Provides the ifluatex switch (HO)
ifpdf.sty 2011/01/30 v2.3 Provides the ifpdf switch (HO)
ifxetex.sty 2010/09/12 v0.6 Provides ifxetex conditional
xkeyval.sty 2014/12/03 v2.7a package option processing (HA)
xkeyval.tex 2014/12/03 v2.7a key=value parser (HA)
currfile.sty 2013/02/01 v0.7b Provides the file path elements of the current
input file
kvoptions.sty 2011/06/30 v3.11 Key value format for package options (HO)
ltxcmds.sty 2011/11/09 v1.22 LaTeX kernel commands for general use (HO)
kvsetkeys.sty 2012/04/25 v1.16 Key value parser (HO)
infwarerr.sty 2010/04/08 v1.3 Providing info/warning/error messages (HO)
etexcmds.sty 2011/02/16 v1.5 Avoid name clashes with e-TeX commands (HO)
filehook.sty 2011/10/12 v0.5d Hooks for input files
gincltex.sty 2011/09/04 v0.3 Include external LaTeX files like graphics
svn-prov.sty 2010/04/24 v3.1862 Package Date/Version from SVN Keywords
adjustbox.sty 2012/05/21 v1.0 Adjusting TeX boxes (trim, clip, ...)
adjcalc.sty 2012/05/16 v1.1 Provides advanced setlength with multiple back-
ends (calc, etex, pgfmath)
trimclip.sty 2012/05/16 v1.0 Trim and clip general TeX material
graphicx.sty 2014/10/28 v1.0g Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty 2014/10/28 v1.0p Standard LaTeX Graphics (DPC,SPQR)
trig.sty 1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg 2010/04/23 v1.9 graphics configuration of TeX Live
pdftex.def 2011/05/27 v0.06d Graphics/color for pdfTeX
collectbox.sty 2012/05/17 v0.4b Collect macro arguments as boxes
tc-pdftex.def 2012/05/13 v1.0 Clipping driver for pdftex
ifoddpage.sty 2011/09/13 v1.0 Conditionals for odd/even page detection
varwidth.sty 2009/03/30 ver 0.92; Variable-width minipages
filemod-expmin.sty 2011/09/19 v1.2 Get and compare file modification times (
expandable; minimal)
import.sty 2009/03/23 v 5.1
matlab-prettifier.sty 2014/06/19 v0.3 A package for prettyprinting Matlab so
urce code
textcomp.sty 2005/09/27 v1.99g Standard LaTeX package
ts1enc.def 2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
xcolor.sty 2007/01/21 v2.11 LaTeX color extensions (UK)
color.cfg 2007/01/18 v1.5 color configuration of teTeX/TeXLive
listings.sty 2015/06/04 1.6 (Carsten Heinz)
lstmisc.sty 2015/06/04 1.6 (Carsten Heinz)
listings.cfg 2015/06/04 1.6 listings configuration
ts1cmr.fd 2014/09/29 v2.5h Standard LaTeX font definitions
supp-pdf.mkii
pdftexcmds.sty 2011/11/29 v0.20 Utility functions of pdfTeX for LuaTeX (HO)
epstopdf-base.sty 2010/02/09 v2.5 Base part for package epstopdf
grfext.sty 2010/08/19 v1.1 Manage graphics extensions (HO)
kvdefinekeys.sty 2011/04/07 v1.3 Define keys (HO)
epstopdf-sys.cfg 2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live
HW1.tex
***********
问题是:为什么仅使用独立包和导入包时会出现字体丢失消息?
答案1
使\ttfamily
字体可用于主文档,我通过\setbox0=\hbox{\ttfamily}
在序言中输入最后一项来做到这一点,这样在\rmfamily
加载时就会保留文档\ttfamily
。
可能还有更多官方方法来提供字体系列。例如Xelatex
,\usepackage{fontspec} \newfontfamily{\ttfamily}{Courier New}
允许加载 tt 字体而无需实际调用\ttfamily
宏。
似乎\subimport
只有当字体已在主文档中可用时,它才能使用。因此,必须确保在调用之前提供所需的字体\subimport
。
\documentclass[11pt,openany]{book}%
\usepackage[T1]{fontenc}
\usepackage{standalone}
\usepackage{import}
\usepackage[numbered,framed]{matlab-prettifier}
\lstset{
style = Matlab-editor,
basicstyle=\ttfamily\small,
breaklines = false,
escapechar = `,
mlshowsectionrules = true
}
\setbox0=\hbox{\ttfamily}
\begin{document}
\subimport*{./}{HW1}
\end{document}
与 结合HW1.tex
,这将以\ttfamily
字体形式生成列表。
答案2
这个问题与独立无关。您需要它,因为您的输入有一个前导码,但使用正常输入也会遇到类似的问题。
问题在于 \subimport* 命令。它改变了搜索路径,因此 texmf 树中的文件不再可用。这通常不是什么大问题,因为您很少在文档主体中从那里输入文件。但例外是 fd 文件:第一次使用字体时会加载这些文件。因此,在您的文档中,无法设置 tt 字体,因为t1cmtt.fd
未找到。
为了避免该问题:要么使用无星号的命令,要么通过在主文档中发出命令强制 Latex 提前\subimport{./}{HW1}
读取。t1cmtt.fd
\ttfamily