基于 asymptote 的一个方案(仅作为练习,这张图应该更适合 pgfplot 这种可以通过数据绘图的宏包,下面 IgnoreAspect 其实也可以在 tikz 找到对应的方案的,使用 scale 等等 ):

完整代码如下:
/*======== 设置(Set) =========*/
settings.outformat="pdf";
settings.tex="xelatex"; usepackage("ctex","fontset=fandol");
size(7cm,6cm,IgnoreAspect); arrowbar cAr=Arrow(5);
pen cdotted=linetype(new real[] {0,3});
/*======== 定义(Define) =========*/
pair O=(0,0),A=(1,30),B=(1.5,30),C=(2,50),D=(3,50),F=(5,0);
pair G=(0.5,50),H=(3,0);
path cong=(0,50)--G--H;
path hui=O--A--B--C--D--F--H;
/*======== 绘制(Draw) =========*/
draw(cong,cdotted); draw(hui);
draw(Label("\small$t(\mathrm{h})$",Relative(1),S),(0,0)--(6.5,0),cAr);
draw(Label("\small$s(\mathrm{km})$",Relative(1),E),(0,0)--(0,60),cAr);
draw(Label("\small 小聪",W),(5,55)--(6.5,55),cdotted);
draw(Label("\small 小慧",W),(5,45)--(6.5,45));
/*======== 标注(Label) =========*/
for (real t=1; t<=5; t+=1) {
draw((t,0)--(t,1.5));
label((string)t,(t,0),S);
}
for (real s=10; s<=50; s+=10) {
draw((0,s)--(0.25,s));
label((string)s,(0,s),W);
}
label("$O$",O,SW); label("$A$",A,W); label("$B$",B,E);
label("$C$",C,N); label("$D$",D,NE); label("$F$",F,NE);
label("$G$",G,N); label("$H$",H,NNE);基于 asymptote 的一个回答:
settings.outformat="pdf";
unitsize(1cm);
import primetable;
int nums=100; int cols=10; real dx=1; real dy=0.6;
markPrimeTable(nums,cols,dx,dy,lineMarkers);
newpage();
markPrimeTable(nums,cols,dx,dy,ploymarkers(getPrimeFactors(nums).length));
newpage();
labelPrimeTable(nums,cols,dx,dy,randrgbs(getPrimeFactors(nums).length));


还可以:
settings.outformat="pdf";
unitsize(1cm);
import primetable;
int nums=1000; int cols=50; real dx=1; real dy=0.6;
// markPrimeTable(nums,cols,dx,dy,lineMarkers);
// newpage();
markPrimeTable(nums,cols,dx,dy,ploymarkers(getPrimeFactors(nums).length));
newpage();
labelPrimeTable(nums,cols,dx,dy,randrgbs(getPrimeFactors(nums).length));

primetable.asy 如下(包含结构体)
private from math access grid;
/*======== 画笔/标注 =========*/
pen[] randrgbs(int n) {
return sequence(new pen(int){return rgb(unitrand(),unitrand(),unitrand());},n);
}
real defaultangle=45; real defaultxscale=0.5; real defaultyscale=10;
pen NWLine(real angle=defaultangle, real xscale=defaultxscale, real yscale=defaultyscale) {
return makepen(rotate(angle)*scale(xscale,yscale)*polygon(4));
}
pen NELine(real angle=-defaultangle, real xscale=defaultxscale, real yscale=defaultyscale) {
return makepen(rotate(angle)*scale(xscale,yscale)*polygon(4));
}
pen NWNELine(real angle=defaultangle, real xscale=defaultxscale, real yscale=defaultyscale) {
path NWLine=rotate(angle)*scale(xscale,yscale)*polygon(4);
path NELine=rotate(-angle)*scale(xscale,yscale)*polygon(4);
real[][] inters=intersections(NWLine,NELine);
path p=subpath(NELine,inters[1][1],inters[0][1]);
real[][] inters=intersections(NELine,NWLine);
path q=subpath(NWLine,inters[2][1],inters[3][1]);
return makepen(buildcycle(p,q,rotate(180)*p,rotate(180)*q));
}
pen HLine(real xscale=defaultxscale, real yscale=defaultyscale) {
return makepen(rotate(90)*scale(xscale,yscale)*polygon(4));
}
pen ploypen(int N, real angle=0, real xscale=1, real yscale=1) {
return makepen(rotate(angle)*scale(xscale,yscale)*polygon(N));
}
pen NWLine=NWLine();
pen NELine=NELine();
pen NWNELine=NWNELine();
pen HLine=HLine();
pen[] lineMarkers=new pen[] {NELine,NWLine,NWNELine,HLine};
pen[] ploymarkers(int n, real scalefactor=6) {
return sequence(new pen(int i) {return scale(scalefactor)*ploypen(i+3)+opacity(0.4);},n);
}
/*======== 素数判断 =========*/
// 判断是否是素数
bool isPrime(int n) {
if (n <= 1) { return false; }
else if ( n == 2) { return true; }
else if ( n % 2 == 0 ) { return false; }
else {
for (int i=3; i<= ceil(sqrt(n)); i+=2) {
if (n % i == 0) {
return false;
}
}
return true;
}
}
// 素因子
int[] getPrimeFactors(int n) {
int[] op;
for (int i=1; i<=ceil(sqrt(n)); ++i) {
if (isPrime(i)) { op.push(i); }
}
return op;
}
/*======== 标记/标注表格 =========*/
// 标注数字
void labelnumber(int i, int cols, real dx, real dy, pen p=currentpen) {
label("$"+(string)i+"$",scale(dx,dy)*((i-1) % cols, -quotient(i-1,cols)),p);
}
// 标记数字
void marknumber(int i, int cols, real dx, real dy, pen p=currentpen) {
draw("$"+(string)i+"$",scale(dx,dy)*((i-1) % cols, -quotient(i-1,cols)),p);
}
// 绘制表格
void drawTable(int nums, int cols, real dx, real dy) {
int rows=ceil(nums/cols);
add(shift(0,-rows*dy)*shift(-0.5dx,0.5dy)*scale(dx,dy)*grid(cols,rows));
}
// 标注素数表格
void markPrimeTable(int nums, int cols, real dx, real dy, pen[] pens) {
int[] primes=getPrimeFactors(nums);
drawTable(nums,cols,dx,dy);
for (int i=2; i<=nums; ++i) {
bool[] b=sequence(new bool(int j) {return i % primes[j] ==0; }, primes.length);
int j=find(b);
if (j == -1) {
marknumber(i,cols,dx,dy,linewidth(0));
} else {
marknumber(i,cols,dx,dy,(i == primes[j] ? nullpen : pens[j]));
}
}
}
// 标注素数表格
void labelPrimeTable(int nums, int cols, real dx, real dy, pen[] pens) {
int[] primes=getPrimeFactors(nums);
drawTable(nums,cols,dx,dy);
for (int i=2; i<=nums; ++i) {
bool[] b=sequence(new bool(int j) {return i % primes[j] ==0; }, primes.length);
int j=find(b);
if (j == -1) {
labelnumber(i,cols,dx,dy,linewidth(0));
} else {
labelnumber(i,cols,dx,dy,(i == primes[j] ? nullpen : pens[j]));
}
}
}
struct primetable {
int nums;
int cols;
int rows;
real dx;
real dy;
int[] primefactors;
void operator init(int nums, int cols, real dx, real dy) {
this.nums=nums;
this.cols=cols;
this.rows=ceil(nums / cols);
this.dx=dx;
this.dy=dy;
this.primefactors=getPrimeFactors(nums);
}
}
void mark(primetable pt, pen[] pens) {
drawTable(pt.nums,pt.cols,pt.dx,pt.dy);
for (int i=2; i<=pt.nums; ++i) {
bool[] b=sequence(new bool(int j) {return i % pt.primefactors[j] == 0; }, pt.primefactors.length);
int j=find(b);
if (j == -1) {
marknumber(i,pt.cols,pt.dx,pt.dy,linewidth(0));
} else {
marknumber(i,pt.cols,pt.dx,pt.dy,(i == pt.primefactors[j] ? nullpen : pens[j]));
}
}
}
void label(primetable pt, pen[] pens) {
drawTable(pt.nums,pt.cols,pt.dx,pt.dy);
for (int i=2; i<=pt.nums; ++i) {
bool[] b=sequence(new bool(int j) {return i % pt.primefactors[j] == 0; }, pt.primefactors.length);
int j=find(b);
if (j == -1) {
marknumber(i,pt.cols,pt.dx,pt.dy,linewidth(0));
} else {
marknumber(i,pt.cols,pt.dx,pt.dy,(i == pt.primefactors[j] ? nullpen : pens[j]));
}
}
}利用结构体 primetable 可以较为简洁的绘出
settings.outformat="pdf";
unitsize(1cm);
import primetable;
int nums=100; int cols=10; real dx=1; real dy=0.6;
primetable pt=primetable(nums,cols,dx,dy);
mark(pt,lineMarkers);
newpage();
defaultangle=aTan(dx/dy); defaultyscale=15;
pen[] lineMarkers={NELine(),NWLine(),NWNELine(),HLine()};
mark(pt,lineMarkers); newpage();
real angle=aTan(dx/dy); real xscale=0.5; real yscale=15;
pen[] mylineMarkers2={NELine(-angle,xscale,yscale),
NWLine(angle,xscale,yscale),
NWNELine(angle,xscale,yscale),
HLine(xscale,yscale)};
mark(pt,mylineMarkers2); newpage();
mark(pt,ploymarkers(pt.primefactors.length)); newpage();
label(pt,randrgbs(pt.primefactors.length));




在 asymptote 中利用 for 循环,变换和一些数学计算即可得到如下一个回答:

完整代码如下:
settings.render=8; settings.outformat="png";
// settings.outformat="pdf";
unitsize(1cm);
pen drawpen=purple; pen dotpen=fuchsia;
dotfactor=3;
// 单个锯齿环
// 路径的规律在 t 为单位变换时不难发现
/*
(0,-1) (1,-1) (1,0)
(0,-1) (1,-1) (1,0)
(0,-2) (1,-2) (2,-2) (2,-1) (2,0)
(0,-1) (1,-1) (1,0)
(0,-2) (1,-2) (2,-2) (2,-1) (2,0)
(0,-3) (1,-3) (2,-3) (3,-3) (3,-2) (3,-1) (3,0)
*/
path zigzagRing(int n, transform t=rotate(45)) {
path op;
if (n <= 0) { write("n must > 0"); }
else {
for (int i=0; i<=n; ++i) {
op = op -- (i,-n);
}
for (int i=-(n-1); i<=0; ++i) {
op = op -- (n,i);
}
}
return t*op;
}
// 多个锯齿环
path[] zigzagRings(int n, transform t=rotate(45)) {
path[] op;
for(int i=1; i<=n; ++i) {
op = op ^^ zigzagRing(i,t);
}
return op;
}
// 绘制并标注生成多个锯齿环所用的点
void drawDotZigzagRings(int n, transform t=rotate(45),
pen drawpen=currentpen, pen dotpen=currentpen)
{
path[] op=zigzagRings(n,t);
for (int i=0; i<n; ++i) {
draw(op[i],drawpen); dot(op[i],dotpen);
}
}
// 在同一张图中绘制多个锯齿环
// n+1 是为了添加省略号
// 平移量的确定
// n = 1 时对应 sqrt(2)*1+d
// n = 2 时对应 sqrt(2)*1+d + sqrt(2)*2+d
// ...
// 不难得到
// n = i 时对应 sqrt(2)*(1+2+...+i)+d*(1+1+...+1)
// = (i-1)^2+(i-1))/2+i*d
real d=0.7; int n=5;
for (int i=1; i<=(n+1); ++i) {
pair shiftpair=(sqrt(2)*((i-1)^2+(i-1))/2+i*d,0);
if (i==(n+1)) {
label("$\cdots$",shiftpair);
} else {
drawDotZigzagRings(i,shift(shiftpair)*rotate(45),drawpen,dotpen);
}
}基于 asymptote 的方案,需要安装 asymptote (貌似还有其他依赖,自行 texdoc asymptote 吧)同时需要编译三次(假设保持文件为 test.tex):
xelatex test.tex
asy test-1.asy
xelatex test.tex效果如下:
完整代码:
\documentclass[border=10pt]{standalone}
% ========= 绘图 ========= %
\usepackage{asymptote}
\begin{document}
\begin{asy}
settings.outformat="pdf"; unitsize(1cm);
import contour; import graph;
real d=1e-5;
real f(real x, real y) {
return 16/((x+2)^2) - (x-2)^2 - y^2;
}
pair a=(-2+d,-4); pair b=(4,4);
real[] ra=new real[] {0};
guide[][] thegraphs=contour(f,a,b,ra,nx=500,join=operator ..);
axes("$x$","$y$",min=a,max=b,arrow=Arrow(TeXHead));
draw(thegraphs[0]);
\end{asy}
\end{document}图形右边倒是没有什么问题
不过在 (0,0) 附近 join=operator .. 表现得并不是那么好
使用 join=operator -- 然后取 nx=600 会好一点:
感谢 Explorer 老师 Eureka 老师在 QQ 群(604354275)里的关注:
Explorer 最开始给出如下实现方案 这种问题的最佳实践是 xeCJKfntef xeCJK 宏包
或者luacolor+lua-ul lua-ul.pdf
(在 elegantbook 中不太好的实现,在本地貌似编译不了)
在使用xeCJKfntef包排版高亮文字时,footnote无法正常显示,如何解决? - LaTeX问答
最终的实现为
% ===== 方案 1 需要使用 lualatex 编译,在 elegantbook 内不推荐 =====
% \usepackage{luacolor}
% \usepackage[soul]{lua-ul}
% \newcommand{\wordbox}[2]{%
% \highLight[cyan!10]{\textbf{#1}}%
% \textcolor{blue!70!black}{(#2)}%
% }
% ===== 方案 2 xelatex =====
\usepackage{xeCJKfntef}
\NewDocumentCommand{\wordbox}{ m m }{%
{\bfseries\CJKunderanyline*{0.5ex}{\color{cyan!10}\rule{2pt}{2.5ex}}{#1}\textcolor{blue!70!black}{(#2)}}%
}方案1
\documentclass[lang=cn,14pt]{elegantbook}
\usepackage{zhlipsum}
\usepackage{luacolor}
\usepackage[soul]{lua-ul}
\newcommand{\wordbox}[2]{%
\highLight[cyan!10]{\textbf{#1}}%
\textcolor{blue!70!black}{(#2)}%
}
\begin{document}
\hl{\zhlipsum[1]}
\highLight[cyan!10]{\zhlipsum[1]}
\wordbox{\zhlipsum[1]}{\zhlipsum[1]}
\end{document}方案2
\documentclass[lang=cn,14pt]{elegantbook}
\usepackage{xcolor}
\usepackage{xeCJKfntef}
\NewDocumentCommand{\wordbox}{ m m }{%
{\bfseries\CJKunderanyline*{0.5ex}{\color{cyan!10}\rule{2pt}{2.5ex}}{#1}}%
\textcolor{blue!70!black}{(#2)}%
}
\begin{document}
\wordbox{劳仑衣普桑,认至将指点效则机,最你更枝。劳仑衣普桑,认至将指点效则机,最你更枝。劳仑衣普桑,认至将指点效则机,最你更枝。}{劳仑衣普桑,认至将指点效则机,最你更枝。劳仑衣普桑,认至将指点效则机,最你更枝。劳仑衣普桑,认至将指点效则机,最你更枝。}
\end{document}为什么不试试设置 自动旋转 旋转一下你的手机屏幕。。。
ctex 文档貌似有你想要的效果?
asymptote 代码前面使用缩进。texstudio 运行 asy 代码,请向像上一个回答一样配置好编译路径。值得注意的是,如果你使用的发行版是 miktex,我的建议是现在就卸了,它的asy版本太旧了,会和你安装的冲突,这里涉及到环境变量的问题。latexmk 的配置,注意这并不适用于 windows 平台,参考tse进行配置。asy 添加一个快捷键,例如 ctrl+alt+A。graph 包并没有起到作用一个基于 asymptote的 geometry 模块的方案
(编译可以在官方在线网站 Asymptote Web Application, 注意需要在最前面加上 import workcone;, 虽然没有加上也可以编译出来;
事实上如果本地安装了发行版, asy 也是可以使用的, 具体参考 asymptote 的官方手册)
如下
settings.outformat="pdf"; unitsize(1cm);
import geometry; defaultpen(1pt);
draw(Label("$x$",1,S),(-1,0)--(4,0),arrow=Arrow());
draw(Label("$y$",1,W),(0,-4)--(0,4),arrow=Arrow());
label("$O$",(0,0),SW);
parabola parab=(parabola)(conic(bqe(0,0,1,-4,0,0))); draw(parab);
point F=parab.F; label("$F$",F,2.5*dir(S+2*E));
real a=135;
line CD=line(a,F); line AB=perpendicular(F,CD); //draw(AB); draw(CD);
point[] P1=intersectionpoints(parab,AB); point A=P1[1],B=P1[0];
point[] P2=intersectionpoints(parab,CD); point C=P2[1],D=P2[0];
draw(A--B); label("$A$",A,SE); label("$B$",B,E);
draw(C--D); label("$C$",C,E); label("$D$",D,S);
draw(A--C ^^ B--D);
draw(box((-2,-5),(8,4*sqrt(2))),invisible);效果如下
asy 提供了一种 defaultpen(1pt); 控制默认画笔线宽的方法。
坐标轴的控制 graph 模块应该也提供了相关函数(不过我给忘了,后面再补上吧)。
感谢 Explorer 老师,接骨木剑老师,hob 老师在 QQ 群的关注。Explorer 老师最终给出了如下解决方案
使用 tikz 库 calc 控制位置
\def\pos{0.75}
\coordinate(start) at ($(Circular.south east)!\pos!(Circular.north east)$);
\coordinate(end) at ($(Circle.south west)!\pos!(Circle.north west)$);
\draw[black,red,thick] (start) -- (end);完整代码如下:
\documentclass[border=10pt,tikz]{standalone}
\usepackage{tabularray}
\usetikzlibrary{patterns,positioning,calc}
\begin{document}
\begin{tikzpicture}[every node/.style = {inner sep=0pt}, line cap=round]
\node (Circular)
{
\begin{tblr}{
colspec={l}, rowspec={c||l},
row{1}={font=\bfseries},
vlines,hlines
}
Circular \\
bottom: Circle \\
setBottom (Circle): void \\
\end{tblr}
};
\node (Circle) [right=1cm of Circular]
{
\begin{tblr}{
colspec={l}, rowspec={c||l},
row{1}={font=\bfseries},
vlines,hlines
}
Circle \\
radius: double \\
getArea(): double \\
radius: double \\
getArea(): double \\
\end{tblr}
};
\def\pos{0.75}
\coordinate(start) at ($(Circular.south east)!\pos!(Circular.north east)$);
\coordinate(end) at ($(Circle.south west)!\pos!(Circle.north west)$);
\draw[black,red,thick] (start) -- (end);
\end{tikzpicture}
\end{document}效果如下

关于第二个方案的一个类似的例子(参考 pgf-umlcd 宏包;这也是为什么不使用第二种方案的原因)

Explorer 老师还提到 “这里三个tblr的排布需要tikz环境,我感觉tabularray的tikz功能更多是处理「一个tblr内部的连接需求」”
请问下大佬们有没有这方面使用的资料可以引导我一下。
E 老师已经讲了一些 vsCode 的使用方法。
这里补充一些 TeXstudio 的材料:
关于 TeXstudio 的一些重要的特性可以在 install-latex-guide-zh-cn.pdf 找到, 更多的特性应当仔细阅读官方的用户指南 texstudio/getting_started, 在这里你可以看到关于下面 TeXstudio
工具栏的详细说明,不妨去探索一下,当然这是在你熟悉一些必要的命令的情况下。
下面是一些技巧(?):
Ctrl+B 加粗, 你可以非常方便地设置一些快捷键, 例如可以设置 Ctrl+Alt+X 是使用 xelatex 编译, Ctrl+Alt+Z 启用补全(有的时候 Ctrl+空格 会被占用掉?), Ctrl+Alt+Q 清理辅助文件(类似于 latexmk -c)

.tex文件, 例如一些作图,或者表格文件
vscode 的代码片段(snippet): 这里你可以放一些常用的代码(下面那张图不是很好的实现,由于没有学过正则,请不要学习模仿), 甚至写一些脚本
excel 中画好的表格, 可以通过向导迅速导入(可以会损失一些信息)
tikz 绘图代码等等可以在侧边栏点击即用,事实上当你熟练以后,翻看的是各个宏包的手册,以及一些比较正式的书籍等等,而不是点击补全提示。。。当然这些功能统统可以在 vscode 或者一些网站插件中找到, 但 texstudio 对于新手而言是相对友好的。更多的 tips 应当在实践中积累,否则出现收藏了很多东西,但在最后什么都没有学到的情况。
感谢 @u70550 Explorer 老师在 QQ 群的关注和关照,
问题的解决方案如下
\tcbuselibrary 中的 breakable before={\begin{listing}[htbp!]}, after={\label{#3}\end{listing}}, 冲突, 原意是为了实现引用盒子, 由于没有仔细阅读 tcolorbox 盒子, 导致该错误. 引用可以使用宏包中的 label 可选项, 然后 \ref 即可, 在最后的完整示例中给出了一个例子)abMATLAB 环境的定义tcolorbox 宏包手册 5.2 Lists of tcolorboxes,17 Libraries listings ,listingsutf8 , andminted 部分)(tcolorbox 手册的获取 在线: 浏览器搜素 ctan tcolorbox 等等; 本地发行版在终端运行命令 texdoc tcolorbox)
* 使用 `tcolorbox` 宏包以及 `minted` 库定义 `MATLAB` 的代码盒子
* 实现 `Lists of tcolorboxes`: `\tcblistof[\chapter*]{abMATLABlist}{MATLAB 代码}`
* 引用盒子: 上面已经提到

\documentclass[UTF8]{ctexbook}
\usepackage{geometry}
\geometry{
a4paper,
top=25.4mm,
bottom=25.4mm,
left=20mm, right=20mm,
headheight=2.17cm,
headsep=4mm,
footskip=12mm
}
%\usepackage{nameref}
%代码排版
\usepackage{tcolorbox}
\tcbuselibrary{minted}
\newtcblisting[auto counter,number within=chapter,list inside=abMATLABlist]{abMATLAB}[2][]{%
coltitle=black,
colbacktitle=white,
colupper=black,
colback=white,
boxrule=0pt,
toprule=0.08em,
titlerule=0.05em,
bottomrule=0.08em,
fonttitle=\bfseries,
title={\heiti 代码列表 \thetcbcounter: #2},
listing only,
sharp corners=all,
% nameref={\textcolor{blue}{代码列表}},
minted language=matlab,
list text=#2, %设置目录项的文本项
% list entry=\protect\numberline{\thetcbcounter} #2, %在这里等价于 list text=#2,; 可以进一步修改目录条目的样式如, 计数器等等
#1,
}
\usepackage{hyperref}
\hypersetup{colorlinks,linkcolor=blue}
\begin{document}
\tableofcontents
\tcblistof[\chapter*]{abMATLABlist}{MATLAB 代码}
\tcblistof[\section*]{abMATLABlist}{MATLAB 代码}
\begin{abMATLAB}{拉普拉斯展开计算行列式}
\end{abMATLAB}
\chapter{AAA}
%{abMATLABlist:DetLaplace}
\begin{abMATLAB}[label={abMATLABlist:DetLaplace}]{拉普拉斯展开计算行列式}
function d=DetLaplace(A)
% DETLAPLACE 使用 Lapace 展开计算行列式
% d = DetLaplace(A); 计算矩阵 A 的行列式 (determinant)
% 对第一行 (row) 使用 Laplace 展开 (expansion)
n = length(A);
if n==1
d=A(1,1);
else
d=0; v=1;
for j=1:n
M1j = [A(2:n,1:j-1) A(2:n,j+1:n)];
d = d + v*A(1,j)*DetLaplace(M1j);
v = -v;
end
end
\end{abMATLAB}
引用代码列表 \ref{abMATLABlist:DetLaplace}. 这也是引用代码列表 \nameref{abMATLABlist:DetLaplace} .
\chapter{BBB}
\begin{abMATLAB}{拉普拉斯展开计算行列式}
function d=DetLaplace(A)
% DETLAPLACE 使用 Lapace 展开计算行列式
% d = DetLaplace(A); 计算矩阵 A 的行列式 (determinant)
% 对第一行 (row) 使用 Laplace 展开 (expansion)
n = length(A);
if n==1
d=A(1,1);
else
d=0; v=1;
for j=1:n
M1j = [A(2:n,1:j-1) A(2:n,j+1:n)];
d = d + v*A(1,j)*DetLaplace(M1j);
v = -v;
end
end
\end{abMATLAB}
\chapter{CCC}
\begin{abMATLAB}{拉普拉斯展开计算行列式}
function d=DetLaplace(A)
% DETLAPLACE 使用 Lapace 展开计算行列式
% d = DetLaplace(A); 计算矩阵 A 的行列式 (determinant)
% 对第一行 (row) 使用 Laplace 展开 (expansion)
n = length(A);
if n==1
d=A(1,1);
else
d=0; v=1;
for j=1:n
M1j = [A(2:n,1:j-1) A(2:n,j+1:n)];
d = d + v*A(1,j)*DetLaplace(M1j);
v = -v;
end
end
\end{abMATLAB}
引用代码 \ref{abMATLABlist:DetLaplace}
\end{document}已解决
@u70550 感谢 Explorer 老师在 QQ 群的关注和关照,问题的解决方案如下
(Windows 11, 右键鼠标可以找到这个选项;不为所有用户安装,字体也可以在控制面板中的字体找到,但 LaTeX 找不到)
texhash 和 fc-cache -fv。
fc-list | findstr "FZ"。例如 (乱码的原因不是这个问题的关键,解决可以通过 fc-list | finder "FZ" > FZfont.txt 在对应根目录导出 FZfont.txt 文件解决)
参考
再次感谢 Explorer 老师
问 tikz根号x曲线不够光滑