Absinthe
Absinthe
这家伙很懒,什么也没写!

注册于 1年前

回答
6
文章
0
关注者
0

  • 不建议在 'asymptote' 代码前面使用缩进。
  • 如果你真期望在 'texstudio' 运行 'asy' 代码,请向像上一个回答一样配置好编译路径。值得注意的是,如果你使用的发行版是 'miktex',我的建议是现在就卸了,它的'asy'版本太旧了,会和你安装的冲突,这里涉及到环境变量的问题。
  • 关于手册中 'latexmk' 的配置,注意这并不适用于 'windows' 平台,参考tse进行配置。
  • 此外如果想方便点编译,可以尝试给'asy' 添加一个快捷键,例如 'ctrl+alt+A'。
  • 关于你的代码,'graph' 包并没有起到作用

一个基于 asymptotegeometry 模块的方案(编译可以在官方在线网站 Asymptote Web Application, 注意需要在最前面加上 import workcone;, 虽然没有加上也可以编译出来)如下

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);

效果如下
image.png

asy 提供了一种 defaultpen(1pt); 控制默认画笔线宽的方法。
image.png

坐标轴的控制 graph 模块应该也提供了相关函数(不过我给忘了,后面再补上吧)。

感谢 Explorer 老师,接骨木剑老师,hob 老师在 QQ 群的关注。Explorer 老师最终给出了如下解决方案

使用 tikzcalc 控制位置

\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}

效果如下

image.png

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

image.png

Explorer 老师还提到 “这里三个tblr的排布需要tikz环境,我感觉tabularraytikz功能更多是处理「一个tblr内部的连接需求」”

请问下大佬们有没有这方面使用的资料可以引导我一下。

E 老师已经讲了一些 vsCode 的使用方法。

这里补充一些 TeXstudio 的材料:

关于 TeXstudio 的一些重要的特性可以在 install-latex-guide-zh-cn.pdf 找到, 更多的特性应当仔细阅读官方的用户指南 texstudio/getting_started, 在这里你可以看到关于下面 TeXstudio
工具栏的详细说明,不妨去探索一下,当然这是在你熟悉一些必要的命令的情况下。
image.png

下面是一些技巧(?):

  • 快捷键 :不限于Ctrl+B 加粗, 你可以非常方便地设置一些快捷键, 例如可以设置 Ctrl+Alt+X 是使用 xelatex 编译, Ctrl+Alt+Z 启用补全(有的时候 Ctrl+空格 会被占用掉?), Ctrl+Alt+Q 清理辅助文件(类似于 latexmk -c)

image.png

  • 编译命令: 也可以绑定快捷键

image.png

  • 创建/使用模板: 这个你可以用来保存一下常用的.tex文件, 例如一些作图,或者表格文件

image.png

  • : 类似于 vscode 的代码片段(snippet): 这里你可以放一些常用的代码(下面那张图不是很好的实现,由于没有学过正则,请不要学习模仿), 甚至写一些脚本

image.png

  • excel 中画好的表格, 可以通过向导迅速导入(可以会损失一些信息)

image.png

  • 还有一些常用数学符号表,tikz 绘图代码等等可以在侧边栏点击即用,事实上当你熟练以后,翻看的是各个宏包的手册,以及一些比较正式的书籍等等,而不是点击补全提示。。。

当然这些功能统统可以在 vscode 或者一些网站插件中找到, 但 texstudio 对于新手而言是相对友好的。更多的 tips 应当在实践中积累,否则出现收藏了很多东西,但在最后什么都没有学到的情况。

感谢 @u70550 Explorer 老师在 QQ 群的关注和关照,

  1. 问题的解决方案如下

    • 删掉 \tcbuselibrary 中的 breakable
      (该库与 before={\begin{listing}[htbp!]}, after={\label{#3}\end{listing}}, 冲突, 原意是为了实现引用盒子, 由于没有仔细阅读 tcolorbox 盒子, 导致该错误. 引用可以使用宏包中的 label 可选项, 然后 \ref 即可, 在最后的完整示例中给出了一个例子)
    • 修改 abMATLAB 环境的定义
  2. 基本功能已经实现 (更多的功能应当 仔细 阅读 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 代码}`
* 引用盒子: 上面已经提到
  1. 完整的示例如下:

image.png
image.png

\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 群的关注和关照,问题的解决方案如下

  1. 一定要为所有用户安装字体 关键是这一步!!!

Windows 11, 右键鼠标可以找到这个选项;不为所有用户安装,字体也可以在控制面板中的字体找到,但 LaTeX 找不到)
image.png

  1. 刷新字体缓存:依次执行 texhashfc-cache -fv

image.png

  1. 检查是否安装方正字体:fc-list | findstr "FZ"

例如 (乱码的原因不是这个问题的关键,解决可以通过 fc-list | finder "FZ" > FZfont.txt 在对应根目录导出 FZfont.txt 文件解决)
image.png

参考

再次感谢 Explorer 老师

发布
问题