0.提问要给代码,即使是只有矩阵的内容的代码。给代码可以大大方便别人回答。
1.在命令行输入「texdoc nicematrix
」回车
2.翻到Page 69,学!
0.提问要给代码,即使是只有矩阵的内容的代码。给代码可以大大方便别人回答。
1.在命令行输入「texdoc nicematrix
」回车
2.翻到Page 69,学!
我认为的最佳实践,当涉及「圆锥曲线」时,比较系统化的作图方式是基于tkz-elements
,下面的代码虽然较长,但是逻辑清晰,可拓展性强,方便多次复用。
\documentclass[tikz,border=2pt]{standalone}
\usepackage{tkz-euclide,tkz-elements}
\directlua{
init_elements()
z.O = point(0, 0)
z.C = point(2, 1)
z.P = point(4, 4)
% -- 准线
z.L1 = point(-1,-4.5)
z.L2 = point(-1,4.5)
L.line = line(z.L1, z.L2)
% -- 抛物线
z.F = point(1, 0)
CO.PA = conic(z.F, L.line, 1)
PA.PA = CO.PA:points(-4.5, 4.5, 300)
% -- 定义圆
z.c = point(0, 1)
C.Cc = circle(z.C, z.c)
% -- 定义过P做圆C的切线
L.T1,L.T2 = C.Cc:tangent_from(z.P)
z.T1 = L.T1.pb
z.T2 = L.T2.pb
}
\begin{document}
\begin{tikzpicture}[scale=.4,smooth,line cap=round]
\tkzGetNodes
\tkzInit[xmin=-2,xmax=5.5,ymin=-4.5,ymax=4.5]
\tkzDrawX[noticks]\tkzDrawY[noticks]
\tkzDrawCircle[red,thick](C,c)
\tkzDrawPoints(O,P,C,T1,T2)
\tkzLabelPoints[below left](O,P,C)
\tkzDrawSegment[cyan,thick](L1,L2)
\tkzDrawCoordinates[smooth,cyan,thick](PA.PA)
\tkzDrawSegments[violet,thick](P,T1 T1,C C,T2 T2,P)
\end{tikzpicture}
\end{document}
预期的目标效果是什么呢?
这个图中的c
是一个node
,圆周是node
的边界,而你代码中:
\coordinate[label=left:$C$](C)at(2,1);
\draw[red](C)circle(2);
\draw(P)--(tangent cs:node=C,point={(P)},solution=1)--(C.center)--cycle;
圆周是一个path
,你用tangent cs
绘制的是对coordinate
点C
的切线,而点是没有半径的,所以重合了...
BTW,下面这些包只有calc
和你的问题有关。
\usetikzlibrary{
% math,
calc,
% intersections,
% through,
% angles,
arrows.meta,
% shapes.geometric,
% shadows,
% quotes,
% spy,
% datavisualization,
% datavisualization.formats.functions,
% plotmarks
}
需要注意的是:
LaTeX2e内核中定义的\cases
和amsmath
宏包重定义的cases
环境并不相同。
\documentclass{article}
\begin{document}
\[
|x|=\cases{x,&if $x\ge0$;\cr
-x,&otherwise.\cr}
\]
\end{document}
重点要转到关注amsmath.dtx
中的有关定义:
% line 2604~2614
\renewenvironment{cases}{%
\matrix@check\cases\env@cases
}{%
\endarray\right.%
}
\def\env@cases{%
\let\@ifnextchar\new@ifnextchar
\left\lbrace
\def\arraystretch{1.2}%
\array{@{}l@{\quad}l@{}}%
}
cases
环境本质是是一个带\lbrace
的array
环境,与\jot
并无关系
所以...似乎patch一下\arraystretch
即可实现第二个需求:
\documentclass{ctexart}
\usepackage{amsmath,amsfonts}
\makeatletter
\def\env@cases{%
\let\@ifnextchar\new@ifnextchar
\left\lbrace
\def\arraystretch{2.5}%
\array{@{}l@{\quad}l@{}}%
}
\makeatother
\begin{document}
\[
\begin{cases}
\dfrac{1}{1} + \dfrac{2}{2} \neq \dfrac{3}{3} \\
\dfrac{1}{1} + \dfrac{2}{2} = \dfrac{3}{3}
\end{cases}
\]
\[
\begin{cases}
\dfrac{1}{1} + \dfrac{2}{2} \neq \dfrac{3}{3} \\
\dfrac{1}{1} + \dfrac{2}{2} = \dfrac{3}{3}
\end{cases}
\]
\[
\begin{cases}
\dfrac{1}{1} + \dfrac{2}{2} \neq \dfrac{3}{3} \\
\dfrac{1}{1} + \dfrac{2}{2} = \dfrac{3}{3}
\end{cases}
\]
\[
\begin{cases}
\dfrac{1}{1} + \dfrac{2}{2} \neq \dfrac{3}{3} \\
\dfrac{1}{1} + \dfrac{2}{2} = \dfrac{3}{3}
\end{cases}
\]
\[
\begin{cases}
\dfrac{1}{1} + \dfrac{2}{2} \neq \dfrac{3}{3} \\
\dfrac{1}{1} + \dfrac{2}{2} = \dfrac{3}{3}
\end{cases}
\]
\end{document}
嗯...效果并不是很好...
可以利用fgruler
宏包给PDF加上标尺
%%使用paracol环境,可以发现文字高度没有变化
%%不使用paracol环境,文字高度变化
文字高度变化是什么意思(?)是和什么做对比的(?) 可否补充详细的对比图示....
\documentclass[
oneside, % 让页面左右对称
openany, % 去掉偶数面的空白页
]{book}
\usepackage{lipsum}
\usepackage[type=upperleft]{fgruler}
\usepackage[showframe]{geometry}
\usepackage{paracol}
\newcommand{\Chapter}[1]{%
\chapter{#1}%
\enlargethispage{-2.0cm}
}
\begin{document}
%%使用paracol环境,可以发现文字高度没有变化
\Chapter{title}
\begin{paracol}{2}
\lipsum[1-2]
\end{paracol}
%%不使用paracol环境,文字高度变化
\Chapter{title}
\lipsum[1-3]
\end{document}
改不动了....一定不会有后续了...Happy LaTeX3!
我食言了。
过分使用AI只会陷入vibe coding这种「复制链接大脑,粘贴代替思考」的境地,事实上,对于\keys_value:nn
查无此命令的幻觉应该是很容易通过texdoc interface3
发觉的。
我删掉了大部分注释,也不打算做介绍了...
l3keys
的错误用法做了修改...如果我没理解错.meta:n
创建的是「元键」是用来创建多层级键值对的,也并不是「定义短名称作为别名,方便用户调用」,这 似乎 又是一个幻觉...
当一些错误混杂在基本正确的逻辑中,挺难debug的,遇到这种情况还是应该自己从最简单的「l3keys」例子开始,一步步测试,不要每次复制粘贴上百行代码...
tikz
的绘图逻辑l3keys
控制键值对tikzhl
命令一个不基于.initial:n
的做法如下:
\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{calc}
\ExplSyntaxOn
\tl_new:N \l_tikzhl_highlight_color_tl
\tl_new:N \l_tikzhl_underline_thickness_tl
\tl_new:N \l_tikzhl_underline_color_tl
\tl_new:N \l_tikzhl_corner_radius_tl
\dim_new:N \l_tikzhl_padding_dim
\dim_new:N \l_tikzhl_underline_offset_dim
\keys_define:nn { tikzhl } {
hlcolor .tl_set:N = \l_tikzhl_highlight_color_tl,
ulcolor .tl_set:N =\l_tikzhl_underline_color_tl,
thickness .tl_set:N = \l_tikzhl_underline_thickness_tl,
radius .tl_set:N = \l_tikzhl_corner_radius_tl,
}
\keys_set:nn { tikzhl } {
hlcolor = yellow!30,
ulcolor= blue,
thickness = 1.5pt,
radius = 0pt,
}
\NewDocumentCommand{\tikzhl}{ O{} m }{%
\tikz[baseline=(current~bounding~box.base)]{
% 设置内部维度变量的值。
\dim_set:Nn \l_tikzhl_padding_dim { 1pt }% 文本与高亮框的内边距
\dim_set:Nn \l_tikzhl_underline_offset_dim { 1pt }% 下划线距离文本的垂直偏移
\keys_set:nn { tikzhl } { #1 }
% 1. 绘制文本节点,并应用高亮背景和圆角。
\node[
inner~sep=\l_tikzhl_padding_dim,
fill=\l_tikzhl_highlight_color_tl,
text=black,
anchor=base,
rounded~corners=\l_tikzhl_corner_radius_tl,
] (textnode) {#2};% 节点内容为 #2 (强制参数)
% 2. 绘制加粗下划线。
\draw[
draw=\l_tikzhl_underline_color_tl,
line~width=\l_tikzhl_underline_thickness_tl
] ($(textnode.south~west) + (0,-\dim_use:N \l_tikzhl_underline_offset_dim)$)
-- ($(textnode.south~east) + (0,-\dim_use:N \l_tikzhl_underline_offset_dim)$);
}%
}
\ExplSyntaxOff
\begin{document}
这是一个示例文本,其中包含一些 \tikzhl{需要高亮} 的内容。
你可以看到它和周围的文本在同一行,并且带有加粗的下划线。
% --- 正确的调用方式示例 (使用键值对) ---
% 1. 仅改变高亮背景颜色
\tikzhl[hlcolor=green!20]{这是绿色高亮}。
% 2. 仅改变下划线粗细
\tikzhl[thickness=2pt]{这是粗下划线}。
% 3. 仅改变下划线颜色
\tikzhl[ulcolor=red]{这是红色下划线}。
% 4. 设置圆角半径
\tikzhl[radius=3pt]{这个是圆角高亮}。
% 5. 组合使用:紫色高亮,3pt下划线,紫色下划线,3pt圆角
\tikzhl[hlcolor=violet!20, thickness=3pt, ulcolor=purple, radius=3pt]{复杂组合示例}。
% 6. 所有参数都使用默认值
默认样式:\tikzhl{默认样式}。
\end{document}
希望下次不要直接把ai的代码丢上来,要注意到这个问题其实不是集中在一个关键点上,而是泛泛而谈「但是无法运行,有很多报错,请问是什么原因?」,后来者看到这个页面的时候很难反应过来这是在「改l3keys
的不正确语法」。
请问是否可以增加绘制外部框线的属性,包括可以调节外部框线的粗细,圆角和颜色?
没看太明白,上面好像已经实现了控制(?)...tikz您是高手,应该可以自己搞定...
没有细看,但是AI在一个如此庞大的和精细的需求里是不给力的
但是无法运行,有很多报错
side-notes:
\usepackage{xcolor} % 用于定义颜色
\usepackage{xparse} % 用于定义带有可选参数和默认值的命令
这两行都是不需要的,tikz
内部调用了xcolor
;且xparse
早已进入内核,因此都不需要显式调用。
第一个报错是:
! Undefined control sequence.
<argument> ..._highlight_color_tl {\keys_value:nn
{tikzhl}{highlight-color}}
l.91 ...其中包含一些 \tikzhl{需要高亮}
的内容。
?
很显然,在interface3.pdf
中并不能搜索到\keys_value:nn
这个API...
\tl_set:Nx \l_tikzhl_highlight_color_tl { \keys_value:nn { tikzhl } { highlight-color } }
\tl_set:Nx \l_tikzhl_underline_thickness_tl { \keys_value:nn { tikzhl } { underline-thickness } }
\tl_set:Nx \l_tikzhl_underline_color_tl { \keys_value:nn { tikzhl } { underline-color } }
\tl_set:Nx \l_tikzhl_corner_radius_tl { \keys_value:nn { tikzhl } { corner-radius } }
上面几行都显然是是错的...
一般来说,l3keys
里类似的需求也许会这么写:
\keys_define:nn { foo / blockstyle } {
bordercolor .tl_set:N = \l_foo_border_color_tl,
backgroundcolor .tl_set:N = \l_foo_background_color_tl,
textcolor .tl_set:N = \l_foo_text_color_tl,
textstyle .tl_set:N = \l_foo_text_style_tl,
}
但这基本上要重写代码,而且需要别人先理解你的原始需求,再理解ai的实现过程,我不喜欢读ai生产的垃圾....
第二个错误:
! Package pgfkeys Error: I do not know the key '/tikz/innersep', to which you p
assed '\dim_use:N \l_tikzhl_padding_dim ', and I am going to ignore it. Perhaps
you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.91 ...其中包含一些 \tikzhl{需要高亮}
的内容。
?
另一个很显然的问题是,在\ExplSyntaxOn/Off
对里,空格均会被忽略,因此带空格的rounded corners
和line width
都应该加上~
.....
改不动了....一定不会有后续了...Happy LaTeX3!
此事在lshort
中亦有记载
0.你原先的代码还是有大量和问题无关的内容,他们理应被删去,不要给别人增加代码阅读量!!:
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{float}
\usepackage{cases}
\usepackage[font={small,rm}]{caption}
\DeclareGraphicsRule{.jpg}{eps}{.bb}{}
\newtheorem{theorem}{Theorem}
\newtheorem{corollary}{Corollary}
\newtheorem{definition}{Definition}
\newtheorem{lemma}{Lemma}
\newtheorem{proposition}{Proposition}
\newtheorem{algorithm}{Algorithm}
\newtheorem{assumption}{Assumption}
\newtheorem{remark}{Remark}
\renewcommand{\baselinestretch}{1.0}
\allowdisplaybreaks
1.加上\nonumber
就可以去掉编号
2.我在最后一行加上了\quad
,让末两行看上去是「同一个公式(折行)」
\documentclass[twocolumn]{IEEEtran}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{empheq}
\begin{document}
\begin{subequations}
\begin{empheq}
[left={\textbf{OP1}:\empheqlbrace}]{align}
&\underset{u}{\min}~ \psi\\
&\mathrm{s.t.}~~J_{\infty}(s) \leq \psi\\
&\underset{p}{\max}\left|\left[u(s)\right]_p\right|\leq \bar{u}, \\
&\underset{q}{\max}\left|\left[x(s+1|s)\right]_q\right|\leq \bar{x},\\
& \mathscr{E}\{V(\phi(s))\}-V(\phi(s))\\
& \quad \leq -z^{\mathrm{T}}(s)z(s)+\rho d^{\mathrm{T}}(s)d(s). \nonumber
\end{empheq}
\end{subequations}
\end{document}
感觉这样更好看...
换行后又多增加一个标号1f(其实是一个公式),需要如何去掉1f呢?
\documentclass[twocolumn]{IEEEtran}
\usepackage{mathrsfs}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{empheq}
\begin{document}
\begin{subequations}
\begin{empheq}
[left={\textbf{OP1}:\empheqlbrace}]{align}
&\underset{u}{\min}~ \psi\\
&\mathrm{s.t.}~~J_{\infty}(s) \leq \psi\\
&\underset{p}{\max}\left|\left[u(s)\right]_p\right|\leq \bar{u}, \\
&\underset{q}{\max}\left|\left[x(s+1|s)\right]_q\right|\leq \bar{x},\\
& \mathscr{E}\{V(\phi(s))\}-V(\phi(s))\nonumber\\
& \qquad \leq -z^{\mathrm{T}}(s)z(s)+\rho d^{\mathrm{T}}(s)d(s).
\end{empheq}
\end{subequations}
\end{document}
\vspace
而不是\vspace*
即可:\documentclass[twocolumn,12pt]{ctexart}
\usepackage{showframe}
\usepackage[type=lowerleft]{fgruler}
\usepackage[paperwidth=42cm,paperheight=29.7cm,top=3cm,bottom=1cm,left=1.7cm,right=1.7cm,bindingoffset=0.5cm]{geometry}
\setlength{\columnsep}{35pt}%设置两栏之间的间距
\raggedbottom
\begin{document}
(1) *********************
\vspace*{8cm}
(2) *********************
\vspace*{8cm}
(3) 已知齐次线性方程组
\[
*******************
\]
同解,求 $a,b,c$ 的值.
\vspace{8cm}
(4) 已知齐次线性方程组
\end{document}
\vspace
:参考链接: https://tex.stackexchange.com/questions/601243/vspace-at-the-end-of-a-page
\documentclass[twocolumn,12pt]{ctexart}
\usepackage{showframe}
\usepackage[type=lowerleft]{fgruler}
\usepackage[paperwidth=42cm,paperheight=29.7cm,top=3cm,bottom=1cm,left=1.7cm,right=1.7cm,bindingoffset=0.5cm]{geometry}
\setlength{\columnsep}{35pt}%设置两栏之间的间距
\raggedbottom
% % https://tex.stackexchange.com/a/601258/322482
\usepackage{forloop}
\newcounter{vspaceinc}
\newcommand\xvspace[2]{\par\leavevmode%
\forloop{vspaceinc}{0}{\thevspaceinc<#1}{%
\vspace{\dimexpr1#2-\baselineskip-\parskip}\leavevmode\par}%
}
\begin{document}
(1) *********************
\vspace*{8cm}
(2) *********************
\vspace*{8cm}
(3) 已知齐次线性方程组
\[
*******************
\]
同解,求 $a,b,c$ 的值.
\xvspace{12}{cm}
(4) 已知齐次线性方程组
\end{document}
\documentclass[twocolumn,12pt]{ctexart}
\usepackage{showframe}
\usepackage[type=lowerleft]{fgruler}
\usepackage[paperwidth=42cm,paperheight=29.7cm,top=3cm,bottom=1cm,left=1.7cm,right=1.7cm,bindingoffset=0.5cm]{geometry}
\setlength{\columnsep}{35pt}%设置两栏之间的间距
\raggedbottom
% https://tex.stackexchange.com/a/601262/322482
\newlength{\gapinsert}
\newcommand{\insertgap}[1]{%
\par
\ifdim\dimexpr\pagegoal-\pagetotal<#1
% Capture space remaining after page break
\setlength{\gapinsert}{\dimexpr#1-\pagegoal+\pagetotal}%
\pagebreak% Insert page break
\vspace*{\gapinsert}% Insert additional/remaining gap; https://tex.stackexchange.com/q/33370/5764
\else
% Enough space available on page
\vspace{#1}% Insert regular vspace
\fi
}
\begin{document}
(1) *********************
\vspace*{8cm}
(2) *********************
\vspace*{8cm}
(3) 已知齐次线性方程组
\[
*******************
\]
同解,求 $a,b,c$ 的值.
\insertgap{12cm}
(4) 已知齐次线性方程组
\end{document}
@u73286 Eureka老师补充了一个回答,基于tikz
的fadings
库:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{fadings}
\begin{document}
% the clipping text
\begin{tikzfadingfrompicture}[name=title]
\node [text=transparent!0, text width=0.7\paperwidth, align=center, font=\fontfamily{ptm}\bfseries\scshape, scale=3]
{TH};
\end{tikzfadingfrompicture}
% use it to clip your image
\begin{tikzpicture}
\node[scope fading=title,fit fading=false] (0,0) {
\begin{tikzpicture}
\shade[left color=red, right color=blue] (0,0) rectangle (2,1);
\end{tikzpicture}
};
\end{tikzpicture}
\end{document}
巧妇也难为无米之炊...
是不是应该贴一个能体现你问题的代码例子...包括模板的链接,也建议贴一贴...
另外,不是所有文章在被引用时都会「变为可以点击的超链接形式」
虽然我不太熟悉beamer
...
但也许可以在文档第九章里简单用\visible
叠层规则实现(?)
\documentclass{ctexbeamer}
\newcommand\myparaphase[1]{%
\textcolor{red}{#1}%
}%
\begin{document}
\begin{frame}{屈原列传}
屈原者,名平,楚之同姓(
\visible<2->{\myparaphase{相同姓氏}}%<-吞掉空格
)也。为楚怀王左徒。博闻强志,明于治(
\visible<3->{\myparaphase{指国家安定}}%
)乱(
\visible<4->{\myparaphase{指国家动荡}}%
) ,娴(
\visible<5->{\myparaphase{熟悉}}%
)于辞令。入则与王图议国事,以出号令;出则接遇宾客,应对诸侯。王甚任之。
\end{frame}
\end{document}
上面的代码其实cleverref
会报警告:
LaTeX Warning: Reference `lem' on page 1 undefined on input line 18.
LaTeX Warning: Reference `lem' on page 1 undefined on input line 18.
此事在下面的几个链接里都有记载:
目前来看的最佳实践似乎是:
\documentclass{article}
\usepackage{amsthm}
\usepackage{cleveref}
\newtheorem{thm}{Theorem}[section]
\newtheorem{lem}[thm]{Lemma}
\AddToHook{env/lem/begin}{\crefalias{thm}{lem}}
\crefname{lem}{lemma}{lemmas}
\Crefname{lem}{Lemma}{Lemmas}
\begin{document}
\begin{thm}\label{thm}
foo
\end{thm}
\begin{lem}\label{lem}
foo
\end{lem}
\noindent
\cref{lem}, \Cref{lem}
\end{document}
似乎在firstaid
中已经修了...但我不太懂这个...
最后补充一下「我本地TL2025会出问题」的内核和宏包版本(\listfiles
):
*File List*
article.cls 2025/01/22 v1.4n Standard LaTeX document class
size10.clo 2025/01/22 v1.4n Standard LaTeX file (size option)
amsthm.sty 2020/05/29 v2.20.6
cleveref.sty 2018/03/27 v0.21.4 Intelligent cross-referencing
l3backend-pdftex.def 2025-04-14 L3 backend support: PDF output (pdfTeX)
再看看Triangle Cap
样式...
同时效果差是怎么个差法...请具体用图例描述你的预期需求
axis
环境有关系吗?个人猜测你遇到的「上下字体不统一」的原因是:
\xlongequal
的原生功能array
,其对行距和字体的大小控制不太相同对于「位置与内容呈现明显对偶关系」的内容, 最好 不要用不同的方式排版
事实上,最轻量级的amsamath
宏包即提供了\substack
的功能:
\documentclass{article}
\usepackage{newpxmath}% change the font to palatino style
\usepackage{amsmath}
\usepackage{extarrows}
\begin{document}
\[
\begin{vmatrix}
1 & 1 & 1 & 1 \\
1 & 1 & 0 & -5 \\
-1 & 3 & 1 & 3 \\
2 & -4 & -1 & -3
\end{vmatrix}
\xlongequal[r_2-r_1]{\substack{r_4+2r_3\\[3pt]r_3+r_1}}
\begin{vmatrix}
1 & 1 & 1 & 1 \\
0 & 0 & -1 & -6 \\
0 & 4 & 2 & 4 \\
0 & 2 & 1 & 3
\end{vmatrix}
\]
\end{document}
另外,直接用vmatrix
环境比\left|
和\right|
更优雅....
问 如何画图中的阶梯形矩阵?虚线得画上喔