其实有点卡
其实有点卡
这家伙很懒,什么也没写!

注册于 5年前

回答
22
文章
22
关注者
4

大概写了一个:

\documentclass{article}
\usepackage{showframe}
\makeatletter
\NewDocumentEnvironment{yuanlist}{}{
  \newcounter{yuan}
  \def\item{
    \stepcounter{yuan}
    \settowidth{\@tempskipa}{\theyuan.}
    \par\leftskip=\@tempskipa\noindent\llap{\theyuan.}\ignorespaces
  }
}{\@endparenv}
\makeatother
\begin{document}
yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan 
\begin{yuanlist}
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan 
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan \setcounter{yuan}{1000}
\item yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan
\end{yuanlist}
yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan yuan 
\end{document}

image.png

细节的慢慢改吧(摊手

导言区重定义 \normalsize 对全文有效:

\documentclass[12pt]{ctexart}

\makeatletter
\renewcommand \normalsize {
  \@setfontsize\normalsize{10pt}{12pt}
  \abovedisplayskip      0pt plus2pt minus1pt
  \abovedisplayshortskip 0pt plus2pt
  \belowdisplayshortskip 0pt plus2pt minus1pt
  \belowdisplayskip      0pt plus2pt minus1pt
  \let\@listi\@listI
} \normalsize
\makeatother

\begin{document}
    二阶常系数齐次线性方程的形式为:$y^{\prime \prime}+p y^{\prime}+q y=0$,其中$p, q$为常数,其特征方程为$\lambda^{2}+p \lambda+q=0$.
    
    方程的通解为:
    
    (1)特征方程有两个相异的实根$\lambda_{1}$,$\lambda_{2}$时,通解形式为
    \[
    y(x)=C_{1} \mathrm{e}^{\lambda_{1} x}+C_{2} \mathrm{e}^{\lambda_{2} x}.
    \]
    
    (2)特征方程有两个相同的实根$\lambda_{1}=\lambda_{2}$时,通解形式为
    \[
    y(x)=\left(C_{1}+C_{2} x\right) \mathrm{e}^{\lambda_{2} x}.
    \]
    
    (3)特征方程有一对共轭复根$\alpha \pm \beta \mathrm{i}$时,通解形式为
    \[
    y(x)=\mathrm{e}^{\alpha x}\left(C_{1} \cos \beta x+C_{2} \sin \beta x\right).
    \]
    
\end{document}

image.png

以下代码完美解决:

\documentclass{ctexart}
\ExplSyntaxOn
\xeCJK_pre_inter_class_toks:nnn {FullRight} {HalfRight} {\kern-0.5em}
\ExplSyntaxOff
\begin{document}
查看《手册》, 可以知道\par
查看《手册》可以知道
\end{document}

xeCJK 对不同的字符设置了不同的字符类:
image.png
可见全角右标点是 3 类,半角右标点是 5 类,可以使用 \XeTeXinterchartoks 设置这两类标点之间的空白即可。

代码和效果如下:

\documentclass{ctexart}
\XeTeXinterchartoks 3 5 = {\kern-0.5em}
% \ExplSyntaxOn
% \XeTeXinterchartoks
%   \c__xeCJK_FullRight_class_int \c__xeCJK_HalfRight_class_int {\kern-0.5em}
% \ExplSyntaxOff
\begin{document}
查看《手册》, 可以知道\par
查看《手册》可以知道
\end{document}

image.png

Plain TeX 的方法是我想要的,但它直接让我汗流浃背了。。

\documentclass{article}
\usepackage{unicode-math}
\begin{document}
$\uppi$
\end{document}

这三个图形,单个画都没有问题,但是要自动处理它们之间的关联性,恐怕 tikz 做不了。也许一种编程能力强的绘图语言可以做,比如 asymptote,但恐怕也得写上个几百上千行代码。

这样的需求不如使用其他专业的软件吧,tikz 做不了(个人见解)。

这种图可以用 tikz-3dplot 宏包,其手册封面便展示了类似的,可以试试。

image.png

这个问题之前问过,别人给了一个很好的解答。你可以看了回答后试着修改。

https://ask.latexstudio.net/ask/question/7979.html

问答站已经积累很多问题了,提问前可以先搜一搜,没事也可以看一看。

这里给一个不完善的实验性例子。

首先大可写个循环而不伤身体:

\documentclass[a5paper]{article}
\makeatletter
\def\box@sep{\hskip-.4pt\relax}
\newcommand\minitab[1]{%
  \@for\@box:=#1\do{%
    \box@sep\framebox{\@box}%
  }%
}
\makeatother
\begin{document}
I can eat glass, it \minitab{doesn't,hurt} me.
\end{document}

image.png

上述实现有两个问题:一是\minitab命令一执行就会左移-0.4pt(虽然几乎看不出来),二是盒子高度没有固定。可以在\minitab定义之前加入如

\def\@@box@sep{\let\@box@sep\box@sep}
\let\@box@sep\@@box@sep

这样的魔法来解决第一个问题,至于第二个问题大可用\vphantom去撑(固定盒子高度肯定有更好的方法)。这样我们就可以得到期待的结果了。

\documentclass[a5paper]{article}
\makeatletter
\def\box@sep{\hskip-.4pt\relax}
\def\@@box@sep{\let\@box@sep\box@sep}
\let\@box@sep\@@box@sep
\newcommand\minitab[1]{%
  \@for\@box:=#1\do{%
    \@box@sep\framebox{\vphantom{O'g}\@box}%
  }%
}
\makeatother
\begin{document}
I can eat glass, it \minitab{doesn't,hurt} me.
I can eat glass, \minitab{it,doesn't, hurt,me}.
\end{document}

image.png
它甚至还能换行。。。

当然这是一个实验性的例子,肯定有更好的方法完善代码。不过这个例子有趣的地方在于,实现了参数数目可变的命令。

我找了好久也看到了一个方法,就是在tcolorbox环境外新“套壳”一层环境,然后在tcolorbox内部设置\parindent值。

这用tikz画一个吧,虽然很笨。。

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
  \node at (0,0){$\begin{array}{rcl}
      d & dd & d  \\
      d & dd & dd \\
      d & dd & ddd\\
      d & dd & dd \\
      d & dd & d
    \end{array}$};
  \draw (-1,0.65) --++ (-0.2,0) --++ (0,-1.25) --++ (2.2,0);
\end{tikzpicture}
\end{document}

image.png

利用伯努利双纽线的极坐标表达式,弄了一个简单例子。

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
  \begin{tikzpicture}% 注意定义域
    \draw[->] (-3,0) -- (3,0);
    \draw[->] (0,-2) -- (0,2);
    \draw[domain=-pi/4:pi/4,samples=400] plot ({deg(\x)}:{2*sqrt(cos(2*deg(\x)))});
    \draw[domain=-pi/4:pi/4,samples=400] plot ({deg(\x)}:{-2*sqrt(cos(2*deg(\x)))});
  \end{tikzpicture}
\end{document}


\begin{tikzpicture}
  \coordinate (O) at (0,0);
  \draw[->] (-3,0) -- (3,0);
  \draw[->] (0,-2) -- (0,2);
  \draw[domain=-pi/4:pi/4,samples=400]
    plot ({1.5*sqrt(2*cos(2*deg(\x)))*cos(deg(\x))},
          {1.5*sqrt(2*cos(2*deg(\x)))*sin(deg(\x))});
  \draw[domain=-pi/4:pi/4,samples=400]
    plot ({-1.5*sqrt(2*cos(2*deg(\x)))*cos(deg(\x))},
          {-1.5*sqrt(2*cos(2*deg(\x)))*sin(deg(\x))});
\end{tikzpicture}%%% 双纽线参数方程,这个画出来有一些问题

image.png

画曲线的代码有两行,感觉不太完美,主要是为了避免给负数开方。

伯努利双纽线的极坐标方程很奇怪,感觉有某些约定。

发布
问题