Sagittarius Rover
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~

注册于 3年前

回答
342
文章
0
关注者
14

In the x-post, the best practice of this requirement is documented in the manual.

TL;DR

dash expand off is all what I need.

Makes the off part of a dash pattern expandable such that it can stretch. This only works when there is a single on and a single off field and requires the decorations library. Right now this option has to be specified on the path where it is supposed to take effect after the dash pattern option because the dash pattern has to be known at the point where it is applied.

image.png

Code & Result Comparsion:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{ext.shapes.superellipse}
\begin{document}
\begin{tikzpicture} [
      densely dashed,
    % dash expand off,
      every node/.append style={
        draw=blue,
        fill=yellow,
        thick,
        inner sep=2pt,
        font=\LARGE,
      },
    ]
  \node [circle] {1};
  \node [ellipse] at (1,0) {2};
  \node [ext_superellipse,font=\tiny] at (2.25,0) {233333};
\end{tikzpicture}

\begin{tikzpicture} [
    densely dashed,
    dash expand off,
    every node/.append style={
      draw=violet,
      fill=magenta,
      thick,
      inner sep=2pt,
      font=\LARGE,
    },
  ]
\node [circle] {1};
\node [ellipse] at (1,0) {2};
\node [ext_superellipse,font=\tiny] at (2.25,0) {233333};
\end{tikzpicture}

\end{document}

image.png

This can handle all the case by stretch the "off" part at the end, regardless of the node's content or the shape. IMHO, it's the best practice of this case.

提问时尽量给出最小工作示例,摒弃所有与问题无关的内容

这140行代码中90%与你问题无关

好好看看这两天我给你简化了多少代码,这些简化根本不用动脑,只是自己不愿动手。

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots} % 核心绘图库
\pgfplotsset{compat=1.18} % 版本兼容性设置
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines = middle,
    xmin = 0, xmax = 8,
    ymin = 0, ymax = 6,
    ]
    \addplot[                
        domain = 1:7.2831,      
        samples = 300,       
        smooth,              
        line width = 0.5pt,  
        black                 
    ] {sin(deg(x-1))+2.5};    
    \coordinate (A) at (axis cs:1,2.5);
    \coordinate (B) at (axis cs:7.2831,2.5);
    \coordinate (C) at (axis cs:2.5708,3.5);
    \coordinate (D) at (axis cs:5.7123,1.5);
    \pgfplotsinvokeforeach {A,B,C}{%
        \node[above] at (#1) {$#1$};
    }
    \node[below] at (D) {$D$};
\end{axis}

\end{tikzpicture}
\end{document}

image.png

读文档第九章第四节 drawing scheme

image.png

改用finish而不是overlay app即可。

另外,既然文字需要被「装饰」遮盖住,那这个文字被排出来的作用是什么呢? 建议提供一下具体的应用场景。

\documentclass{article}
\usepackage[UTF8]{ctex}
\usepackage[most]{tcolorbox}
\usetikzlibrary{patterns}
\usepackage{zhlipsum}
\begin{document}

\tcbset{
  frogbox/.style={
    enhanced,
    colback=green!10,
    colframe=green!65!black,
    enlarge top by=5.5mm,
    overlay={
      \foreach \x in {2cm, 3.5cm} {
        \begin{scope}[shift={([xshift=\x]frame.north west)}]
          \path[draw=green!65!black, fill=green!10, line width=1mm] (0,0) arc (0:180:5mm);
          \path[fill=black] (-0.2,0) arc (0:180:1mm);
        \end{scope}
      }
    }
  },
  ribbon/.style={
    finish={
      \path[
        fill=blue!75!white,
        draw=blue,
        double=white!85!blue,
        preaction={fill=blue!75!white},
        line width=0.1mm,
        double distance=0.2mm,
        pattern=fivepointed stars,
        pattern color=white!75!blue
      ]
      ([xshift=-0.2mm, yshift=-2.02cm]frame.north east)
      -- ++(-2,2)
      -- ++(-0.5,0)
      -- ++(2.5,-2.5)
      -- cycle;
    }
  }
}

\begin{tcolorbox}[frogbox, ribbon, title=My title]
\zhlipsum[1]
\end{tcolorbox}

\end{document}

image.png

这是一个非常有意义的问题

Learning From this link

\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
    foo /.tip = {Straight Barb[]Bar[width=10pt,sep=+0pt +-.5]},
    ]
    \draw[foo-foo] (-.5,0) -- (-.5,2) node[midway,left] {$2$};
    \draw[foo-foo] (-.5,2) -- (-.5,2+1) node[midway,left] {$1$};
    \draw[foo-foo] (0,0) -- (0,2) node[midway,left] {$2$};
    \draw[foo-foo] (.5,2) -- (.5,2+1) node[midway,left] {$1$};
    \fill[red] (0,2) circle (0.3pt);
    \fill[red] (.5,2) circle (0.3pt);
\end{tikzpicture}
\end{document}

image.png

但...作为提问的代码还可以更加简短,也应该更加简短。

你关注的只是两个自定义箭头的相连问题,为什么要贴一整个正方形的绘制代码出来?这个图与你问题的核心点有关系吗?

这同样将大大增加别人的阅读负担。

请总是给出可以体现你问题的最短代码。


Edit

在上面的链接中提到,Qrrbrbirlbel已经将符合这一特征的箭头加入TikZ-Extensions包中,查阅手册我们知道:

这种箭头特征被称为「untipped」

image.png

换言之,下面的代码可以更优雅地实现相同的效果:

\documentclass[tikz,border=5pt]{standalone}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{ext.arrows}
\begin{document}
\begin{tikzpicture}[
    foo /.tip = {Straight Barb[]ext_Untipped Bar[width=10pt]},
    ]
    \draw[foo-foo] (-.5,0) -- (-.5,2) node[midway,left] {$2$};
    \draw[foo-foo] (-.5,2) -- (-.5,2+1) node[midway,left] {$1$};
    \draw[foo-foo] (0,0) -- (0,2) node[midway,left] {$2$};
    \draw[foo-foo] (.5,2) -- (.5,2+1) node[midway,left] {$1$};
    \fill[red] (0,2) circle (0.3pt);
    \fill[red] (.5,2) circle (0.3pt);
\end{tikzpicture}
\end{document}

image.png

0.请有简化你问题的意识,不要让别人看一大堆与你问题无关的代码。

明明下面的十几行就可以完全反映你的问题,为什么要上传七八十行的代码(?) Tell Me Why?! Why?!

这给别人增加了很大的负担

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines = middle,
    xmin = -0.05, xmax = 1.1,
    ymin = -0.05, ymax = 1.4,
    axis line style = {-{Triangle[length=8pt, width=3pt]}},
    ytick distance = 0.2,
    ]
    \addplot[domain=0:1.4, thick, blue, samples=100] {x^2};
\end{axis}
\end{tikzpicture}
\end{document}

1.比较简陋的做法

坐标轴刻度线与箭头距离太近,增大xmaxymax时坐标轴并没有延长相应的单位长度

指定ymax=1.35不可以吗? 不是很清楚你的具体需求?

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines = middle,
    xmin = -0.05, xmax = 1.1,
    ymin = -0.05, ymax = 1.35,
    axis line style = {-{Triangle[length=8pt, width=3pt]}},
    ytick distance = 0.2,
    ]
    \addplot[domain=0:1.4, thick, blue, samples=100] {x^2};
\end{axis}
\end{tikzpicture}
\end{document}

image.png

2.使用tikzarrow提供的shorten >=功能调整「箭头末端」的长度:

文档

image.png

\documentclass[tikz,border=5pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis lines = middle,
    xmin = -0.05, xmax = 1.1,
    ymin = -0.05, ymax = 1.4,
    axis line style = {-{Triangle[length=8pt, width=3pt]},shorten >=-.8cm},
    ytick distance = 0.2,
    ]
    \addplot[domain=0:1.4, thick, blue, samples=100] {x^2};
\end{axis}
\end{tikzpicture}
\end{document}

这将在保持使用ymax=1.4的同时得到:

image.png

请务必简化你的代码,不要一发发一大堆,其中大部分内容与你的问题无关。还有,若代码较短,请用「markdown代码块」而不是「上传附件」给出。

有空的话逐个补充吧(虽然我也不是很懂)。

感觉每一个都可以算是「典中典」的「日经问题」,而且应该都能在「TeX.SE」上找到高赞回答。

关于一:

数学模式里,为什么要 $...$ 而不要 \(...\)

TL;DR: 更推荐$ $,一方面可以在plainTeX内使用,另一方面\(\)不容易因为过多的()影响代码的可读性。

image.png

image.png

Ref: https://tex.stackexchange.com/a/513/322482


关于二:

数学模式里,为什么要 \[...\] 而不要 $$...$$

TL;DR: 其实是很典的,$$...$$前后的间距处理不正确,而\[...\]可以正确处理公式前后的行间距。

如果加上 equation* 环境最佳选择又是什么?

amsmath文档里的表述是:\[...\]equation*完全等价。

但考虑到代码可读性和这个评论,似乎equation*在语义上会略好于\[\]

Ref1: 详见「孟晨」的这个回答
(P.S.)上述的评论区还有刘海洋对问题一的comment😀

Ref2: https://tex.stackexchange.com/questions/503/why-is-preferable-to


问题一与问题二的表述性质不太相同。

对于问题一:是「推荐」$...$而不是\(...\)

对于问题二:是「几乎不要(never)」(或者说严重点「禁止」)使用$$...$$,请使用\[...\]equation*.


关于三:

数学模式里,为什么要 align 环境而不要 eqnarray 环境?

TL;DR: 两个主要缺陷:

  • eqnarray在等号=周围设置的水平间距与其他数学环境(如\[...\]>$$...$$)不一致(其间距更宽)。
  • eqnarray(以及eqnarray*!)的公式编号定义不明确,导致引用时出现编号错误——尤其在使用\nonumber命令时。

经典回答在:https://tex.stackexchange.com/a/197/322482

详见Ref: https://tug.org/pracjourn/2006-4/madsen/madsen.pdf


关于四:

数学模式里,为什么要 matrix,bmatrix,pmatrix,vmatrix,Vmatrix 等环境而不要 array 环境去实现矩阵?

也许是这个链接(?)

  • array是LaTeX所有文档类通用的默认环境,而matrix需通过amsmath宏包或AMS类(如amsbook, amsart)引入。
  • matrix环境主要为实现命名统一性而存在,因amsmath还提供带定界符的矩阵变体(如pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix)。
  • matrix无需像array那样指定列对齐参数(如{ccc}),默认支持最多10列居中对齐(如需其他对齐方式仍需使用array)。若需超过10列,需修改MaxMatrixCols计数器。
  • matrix的水平间距更紧凑(即array的宽度大于matrix)。

(Translation Powered By Gemini...)


关于六:

数学模式里,箭头是使用 \to,\gets 还是 \rightarrow,\leftarrow

首先使用latexdef看定义的区别:

latexdef \gets
\gets:
\mathchar"3220

\the\gets:
12832

latexdef \leftarrow

\leftarrow:
\mathchar"3220

\the\leftarrow:
12832
latexdef \to

\to:
\mathchar"3221

\the\to:
12833

latexdef \rightarrow

\rightarrow:
\mathchar"3221

\the\rightarrow:
12833

一方面,从定义上看:\to\rightarrow内部「使用的字符是同一个

但另一方面....IMHO, 优秀的code要保持代码语义上的可读性,换言之:

  • 当想表达的是\to语义上的「趋向于」的意思,例如\lim_{n\to\infty}时,用\rightarrow是不合适的
  • 当仅仅想表达\rightarrow语义上的「从A到B的指向」的含义,而非「to」的意思时,用\to也是不合适的

关于九:

\bf,\bfseries,\mathbf,\boldmath,\unboldmath,\bm,\boldsymbol 等这几个命令的区别和用法?

来自@u73286 老师的回答:

\bf: TeX 自带的命令,和现在的 NFSS 字体机制不太兼容,不推荐使用;
\bfseries: NFSS 下切换粗体的命令, 和 \textbf 一样;
\mathbf: 这个字体在默认配置下对应:OT1 cmr bx n, 其实就是 \textbf 对应的字体;
\boldsymbol: 由 AMSTeX 宏集中的 amsbsy 宏包提供, 部分情况下可能出现一些间距问题;
\bm: 会自动处理加粗对应的数学字体,还附带一些间距和斜体纠正, 推荐使用;
还有两个:
\boldmath: 和 \unboldmath 对应,是由于 LaTeX2e 的历史原因才保留下来的;
\mathversion{bold}\mathversion{normal},它们和 \boldmath, \unboldmath 差不多,都会改变整个公式的样式, 但是推荐使用前者, 而不是 \boldmath, \unboldmath

借楼:

在QQ群中恰有一位朋友的类似需求如下:

image.png

这里总结一些我的尝试和搜罗到的解答,也希望@u78 老师能做点补充:

方法一

尝试基于tikzmatrix库,利用网格化的node定位确保平行...但缺陷也是有的,不好方便地控制「斜线倾斜的角度」

\documentclass[tikz,border=3pt]{standalone}
\usepackage{amsmath}
\usepackage{newpxmath}
\usetikzlibrary{matrix}
\usetikzlibrary{ext.positioning-plus}
\newcommand\blind{\phantom{a_{11}}}
\begin{document}
\begin{tikzpicture}[line cap=round]
    \matrix (det) [matrix of math nodes,nodes={circle}]
    {
    \blind & \blind & a_{11} & a_{12} & a_{13} & \blind & \blind \\
    \blind & \blind & a_{21} & a_{22} & a_{23} & \blind & \blind \\ 
    \blind & \blind & a_{31} & a_{32} & a_{33} & \blind & \blind \\
    \blind & \blind & \blind & \blind & \blind & \blind & \blind \\
    };
    \draw[blue,dashed,thick] (det-1-3.center) -- (det-3-1.center) -- (det-4-3.ext_corner south west) -- (det-2-5.center);
    \draw[blue,dashed,thick] (det-1-4.center) -- (det-3-2.center) -- (det-4-4.ext_corner south west) -- (det-3-5.center);
    \draw[blue,dashed,thick] (det-1-5.center) -- (det-3-3.center);
    \draw[red,thick] (det-1-4.center) -- (det-3-6.center) -- (det-4-5.ext_corner south west) -- (det-3-3.center);
    \draw[red,thick] (det-1-5.center) -- (det-3-7.center) -- (det-4-6.ext_corner south west) -- (det-3-4.center);
    \draw[red,thick] (det-1-3.center) -- (det-3-5.center);
    \draw[thick]
    (det-1-3.ext_corner north west) -- (det-3-3.ext_corner south west)
    (det-1-5.ext_corner north east) -- (det-3-5.ext_corner south east)
    ;
\end{tikzpicture}
\end{document}

image.png

方法二

基于nicematrix\CodeAfter.
感谢@u98900 提出的思路:为了避免使用「绝对坐标」调整,使用calc计算「差向量」来辅助定位以保证绝对的平行.

\documentclass{article}
\usepackage{newpxmath}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\setlength{\extrarowheight}{1mm}
\[
D = \begin{vNiceMatrix}
    a_{11} & a_{12} & a_{13}\\
    a_{21} & a_{22} & a_{23}\\
    a_{31} & a_{32} & a_{33}\\
    \CodeAfter
    \begin{tikzpicture}[line cap=round]
        \coordinate (vec1) at ($(3-3.center)-(1-1.center)$);
        \coordinate (vec2) at ($(3-1.center)-(1-3.center)$);
        \draw[blue,dashed,thick] (1-3.center) -- (3-1.center);
        \draw[blue,dashed,thick] (1-1.center) -- ++(vec2) -- ++($.75*(vec1)$) -- (2-3.center);
        \draw[blue,dashed,thick] (1-2.center) -- ++(vec2) -- ++($.75*(vec1)$) -- (3-3.center);
        \draw[red,thick] (1-1.center) -- (3-3.center);
        \draw[red,thick] (1-2.center) -- ++(vec1) -- ++($.75*(vec2)$) -- (3-1.center);
        \draw[red,thick] (1-3.center) -- ++(vec1) -- ++($.75*(vec2)$) -- (2-1.center);
    \end{tikzpicture}
\end{vNiceMatrix}
\]

\end{document}

image.png

Edited:

耿楠老师曾经说过:

一锤子买卖的话,没必要用代码,咋画都行。
如果后期需要维护,需要微调,需要大量复制,我建议还是上代码。
如果追求的是自由和乐趣,那就用代码思考人生。

基于nicematrix做了一点小小的自动化,如下:

% https://ask.latexstudio.net/ask/question/17826.html
\documentclass{article}
\usepackage{newpxmath}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\pagestyle{empty}
\setlength{\extrarowheight}{1.5mm}
\ExplSyntaxOn
\def\N{8}
\def\ratio{\fpeval{\N/(2*(\N-1))}}
\[
\begin{vNiceMatrix}
    % \c_math_subscript_token
    \int_step_inline:nn {\N} {%
        a\c_math_subscript_token{#11}%
        \int_step_inline:nnn {2}{\N} {%
            & a\c_math_subscript_token{#1{##1}}%
        }%
        \int_compare:nNnTF {#1} < {\N} {\\} {}%
    }%
    \CodeAfter%
    \begin{tikzpicture}[line~cap=round]
        % 定义主/副对角线的向量
        \coordinate (main-vec) at ($(\N-\N.center)-(1-1.center)$);
        \coordinate (secondary-vec) at ($(\N-1.center)-(1-\N.center)$);
        % 处理副对角线方向的其他 \N-1 条虚线
        \draw[orange,dashed,thick] (1-\N.center) -- (\N-1.center);
        \int_step_inline:nn {\N-1} {
            \draw[orange,dashed,thick,rounded~corners=5mm] (1-#1.center) --++(secondary-vec) --++($\ratio*(main-vec)$) -- (\int_eval:n{#1+1}-\N.center);
        }
        % 处理主对角线方向的其他 \N-1 条实线
        \draw[magenta,thick] (1-1.center) -- (\N-\N.center);
        \int_step_inline:nn {\N-1} {
            \draw[magenta,thick,rounded~corners=5mm] (1-\int_eval:n{#1+1}.center) --++(main-vec) --++($\ratio*(secondary-vec)$) -- (\int_eval:n{\N-#1+1}-1.center);
        }
    \end{tikzpicture}
    \end{vNiceMatrix}
\]
\ExplSyntaxOff 
\end{document}

image.png

maybe duplicated

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


建议你先学着改改。实在不行,请补充你尝试的最小工作示例到原问题。

关于文件的组织逻辑

首先,不建议使用
「同一个node里」左右放置两个tikzpicture,比较难管理

更建议「分别」建立「A.tex」绘制左图和「B.tex」绘制右图,再用传统插入图片PDF与caption的方式排版主文档,这样还有一个好处,caption可以使用超链接,也不用手动编号.

这个链接提到了「two-file approach」

image.png

简化问题

本着分而治之的思想,在找问题时最好将源代码分为不出问题的和出问题的两份。

正常工作的「1 / (x-1) + 1」:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{ctex} % 加载中文支持
\usepackage{pgfplots} % 核心绘图库
\pgfplotsset{compat=1.18}
\usepackage{bm} % 或 
\usepackage{amsmath,amsfonts}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        axis lines = middle,
        xlabel = $x$,  
        ylabel = $y$,
        x=0.5cm, % x轴每单位长度0.8cm
        y=0.5cm, % y轴每单位长度0.8cm
        width=11 * 0.5cm, % 根据x轴范围计算宽度
        height=6 * 0.5cm, % 根据y轴范围计算高度
        xlabel style={at={(ticklabel* cs:1)}, anchor=north, below=1pt},
        ylabel style={at={(ticklabel* cs:1)}, anchor=east, left=1pt},
        xmin = -1, xmax = 9,
        ymin = -1, ymax = 5,
        axis line style = {-{Triangle[scale=1]}},  % 修正箭头语法
        %——刻度和刻度线
        xtick = {1, 7},             %x标点
        xticklabels = {$a$, $b$},   %x自定义
        ytick = \empty,             % 隐藏y轴刻度
        tick style={draw=none},     % 隐藏所有刻度线
        title={$\bm{f'(x) \geq 0}$},
        title style={
            at={(0.5,0)},      % 相对位置 (x,y) ∈ [0,1]
            anchor=north,      % 锚点方向
            yshift=5pt         % 垂直偏移
            }
        ]
    \node[below left] at (axis cs:0,0) {$O$};%原点 
    \addplot[                % 函数f(x)=1/(x-1) + 1
        domain = 1:7,        % 定义域[1,7]
        samples = 300,       % 采样点密度(值越高曲线越平滑)
        smooth,              % 平滑曲线
        line width = 0.5pt,  % 设置为0.5磅线宽
        blue                 % 颜色
    ] { 1 / (x-1) + 1 };         % 函数表达式(deg()将弧度转角度)
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:1,0) -- (axis cs:1,5); % 从x=a处画垂直线
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:7,0) -- (axis cs:7,1/6+1); % 从x=b处画垂直线
    % x=3 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width= 0.5pt]{-0.25*x + 2.25};
    % x=4 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width=0.5pt]{-1/9*x + 16/9}; 
    % 在右上角添加解析式
    \node[anchor=north west, align=left, xshift=-5pt, yshift=-10pt] 
        at (axis cs:3,4) {\large $y=f(x)$};
    \end{axis}
\end{tikzpicture}
\end{document}

出问题的「-1 / ( x-7 ) + 1

\documentclass[tikz,border=5pt]{standalone}
\usepackage{ctex} % 加载中文支持
\usepackage{pgfplots} % 核心绘图库
\usepackage{bm} % 或 
\pgfplotsset{compat=1.18}
\usepackage{amsmath,amsfonts}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        axis lines = middle,
        %——xOy
        xlabel = $x$,  
        ylabel = $y$,
        x=0.5cm, % x轴每单位长度0.8cm
        y=0.5cm, % y轴每单位长度0.8cm
        width=11 * 0.5cm, % 根据x轴范围计算宽度
        height=6 * 0.5cm, % 根据y轴范围计算高度
        %将标签定位在x轴的​​最末端​​(刻度坐标系中,1表示100%位置)
        xlabel style={at={(ticklabel* cs:1)}, anchor=north, below=1pt},
        ylabel style={at={(ticklabel* cs:1)}, anchor=east, left=1pt},
        %
        xmin = -1, xmax = 9,
        ymin = -1, ymax = 5,
        axis line style = {-{Triangle[scale=1]}},  % 修正箭头语法
        %
        %——刻度和刻度线
        xtick = {1, 7},             %x标点
        xticklabels = {$a$, $b$},   %x自定义
        ytick = \empty,             % 隐藏y轴刻度
        tick style={draw=none},     % 隐藏所有刻度线
        title={\large $\bm{f'(x) \leq 0}$},
        title style={
            at={(0.5,0)},      % 相对位置 (x,y) ∈ [0,1]
            anchor=north,      % 锚点方向
            yshift=5pt         % 垂直偏移
        }
        ]
    %图像
    \node[below left] at (axis cs:0,0) {$O$};%原点 
    \addplot[                % 函数f(x)=1/(x-1) + 1
        domain = 1:7,        % 定义域[1,7]
        samples = 300,       % 采样点密度(值越高曲线越平滑)
        smooth,              % 平滑曲线
        % thick,             % 粗线宽
        line width = 0.5pt,  % 设置为0.5磅线宽
        blue                 % 颜色
    ] { -1 / ( x - 7 ) + 1 }; 
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:7,0) -- (axis cs:7,5);% 从x=a处画垂直线
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:1,0) -- (axis cs:1,1/6+1); % 从x=b处画垂直线
    % x=3 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width= 0.5pt]{(1/16)*x + (17/16)};
    % x=4 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width=0.5pt]{(1/9)*x + 8/9}; 
    % 在右上角添加解析式
    \node[anchor=north west, align=left, xshift=-5pt, yshift=-10pt] 
        at (axis cs:3,4) % 定位
        {\large $y=f(x)$};
    \end{axis}
\end{tikzpicture}
\end{document}

这将报错并且得不到「有效的PDF文件」,有错误必须纠正,不可以忽略。

! Dimension too large.
<recently read> \pgf@yy

l.60     \end{axis}

如何修改

其实维数太大意味着是正无穷呗~ 观察下面这段:

\addplot[                % 函数f(x)=1/(x-1) + 1
        domain = 1:7,        % 定义域[1,7]
        samples = 300,       % 采样点密度(值越高曲线越平滑)
        smooth,              % 平滑曲线
        % thick,             % 粗线宽
        line width = 0.5pt,  % 设置为0.5磅线宽
        blue                 % 颜色
    ] { -1 / ( x - 7 ) + 1 }; 

domain中的x=7不就除零了...

我不知道你的最终目的是什么,但是改成domain = 1:6.95即可:

\documentclass[tikz,border=5pt]{standalone}
\usepackage{ctex} % 加载中文支持
\usepackage{pgfplots} % 核心绘图库
\usepackage{bm} % 或 
\pgfplotsset{compat=1.18}
\usepackage{amsmath,amsfonts}
\usetikzlibrary{positioning}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        axis lines = middle,
        %——xOy
        xlabel = $x$,  
        ylabel = $y$,
        x=0.5cm, % x轴每单位长度0.8cm
        y=0.5cm, % y轴每单位长度0.8cm
        width=11 * 0.5cm, % 根据x轴范围计算宽度
        height=6 * 0.5cm, % 根据y轴范围计算高度
        %将标签定位在x轴的​​最末端​​(刻度坐标系中,1表示100%位置)
        xlabel style={at={(ticklabel* cs:1)}, anchor=north, below=1pt},
        ylabel style={at={(ticklabel* cs:1)}, anchor=east, left=1pt},
        %
        xmin = -1, xmax = 9,
        ymin = -1, ymax = 5,
        axis line style = {-{Triangle[scale=1]}},  % 修正箭头语法
        %
        %——刻度和刻度线
        xtick = {1, 7},             %x标点
        xticklabels = {$a$, $b$},   %x自定义
        ytick = \empty,             % 隐藏y轴刻度
        tick style={draw=none},     % 隐藏所有刻度线
        title={\large $\bm{f'(x) \leq 0}$},
        title style={
            at={(0.5,0)},      % 相对位置 (x,y) ∈ [0,1]
            anchor=north,      % 锚点方向
            yshift=5pt         % 垂直偏移
        }
        ]
    %图像
    \node[below left] at (axis cs:0,0) {$O$};%原点 
    \addplot[                % 函数f(x)=1/(x-1) + 1
        domain = 1:6.95,        % 定义域[1,7]
        samples = 300,       % 采样点密度(值越高曲线越平滑)
        smooth,              % 平滑曲线
        % thick,             % 粗线宽
        line width = 0.5pt,  % 设置为0.5磅线宽
        blue                 % 颜色
    ] { -1 / ( x - 7 ) + 1 }; 
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:7,0) -- (axis cs:7,5);% 从x=a处画垂直线
    \draw[dash pattern=on 1pt off 1pt, lightgray] (axis cs:1,0) -- (axis cs:1,1/6+1); % 从x=b处画垂直线
    % x=3 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width= 0.5pt]{(1/16)*x + (17/16)};
    % x=4 处切线
    \addplot[domain=0.7:7.3, smooth, red, line width=0.5pt]{(1/9)*x + 8/9}; 
    % 在右上角添加解析式
    \node[anchor=north west, align=left, xshift=-5pt, yshift=-10pt] 
        at (axis cs:3,4) % 定位
        {\large $y=f(x)$};
    \end{axis}
\end{tikzpicture}
\end{document}

image.png

至于为什么:

意外给画了一条x=b

因为当x=7时,除零了没法计算,计算得到的y遍历(-oo,+oo),也就是维数太多,画成图就是一条x=b的直线,而且报错。

0.本站不是一个「do-it-for-me」的地方,请你给出你的尝试
1.什么是「但不是常规的目录结构,请求高手将之改写成常规的目录结构」?请截图提供目录目前的样式预期的样式区别。
2.不建议使用外链做内容分享,有非常严重的过期风险,一旦过期,则本post将毫无意义。


我猜测你需要修改的「不是常规的结构」的代码由这里控制:

https://github.com/sano-jin/express-beamer/blob/e503e4b561b93dbd21fcf7efc7cba4ea2045b779/sty/zh-cn/style.sty#L240-L261

% https://github.com/sano-jin/express-beamer/blob/e503e4b561b93dbd21fcf7efc7cba4ea2045b779/sty/zh-cn/style.sty#L240-L261
\AtBeginSection[]{{
    \setbeamertemplate{headline}{}%
    \begin{frame}
      \tableofcontents[
        currentsection,
        sectionstyle=show/shaded,
        subsectionstyle=hide
      ]
    \end{frame}
}}

\AtBeginSubsection[]
{{
    \setbeamertemplate{headline}{}%
    \begin{frame}
      \tableofcontents[
        currentsection,
        sectionstyle=show/shaded,
        subsectionstyle=show/shaded/hide
      ]
    \end{frame}
}}

如果你不调用setspace宏包,那么他们的行距就保持一致了。


另外,下面这几个包和MWE有关系吗?

\usepackage{multirow}
\usepackage{hanging}
\usepackage{varwidth}
\usepackage{etoolbox}
\usepackage{graphicx}
\usepackage{caption}

例子中的setspace似乎也不是必须的(?)


如何调整longtable中的行距(?)

maybe related: https://tex.stackexchange.com/a/203869/322482

有一些需要补充的字体问题:

如不提供上述字体,代码别人根本跑不了,别人跑不了要怎么给建议和测试...

令人遗憾的是,xelatex编译报错:

! Missing } inserted.
<inserted text>
                }
l.42     课序&
            \makecell{背诵内容\\{\large\color{red}(背诵课文部分,注释部分可不作要求)}}&家长签名\\
?

你的问题在于

\documentclass{ctexart}
\usepackage[a4paper,margin={1.5cm,1cm}]{geometry}
\usepackage{tabularx}
\usepackage{array}
% \usepackage{cellspace}
\begin{document}
\begin{tabular}
    {|>{\centering\arraybackslash}m{1.4cm}|>{\centering\arraybackslash}m{1.4cm}|}
    \hline%
    课序 & 家长签名\\
    \hline%
\end{tabular}
\end{document}

上面的MWE不可以同时调用cellspace


你的需求是:

表格完美布局问题(如内边距、边框颜色、最外边框粗细等)

从你上面的代码来看你会发现你一直在进行多种行距/颜色/粗细设置(这其实没太做好「样式与内容分离」),如果 确实需要 用LaTeX排版,我会更建议:

「逐页排版」+「tabularray控制样式」+「行距等微调」


我逐步介绍下绘制的思路吧...

Step1. 查看整体布局(3*3)先把第一页的表格框架大致实现出来:

\documentclass{ctexart}
\usepackage[%
    a4paper,
    margin={1.5cm,1cm},
    showframe,
    ]{geometry}
\usepackage{xcolor}
\usepackage{tabularray}
\begin{document}
\noindent
\begin{tblr}{ 
    width=\textwidth,
    hlines={red,2pt}, vlines={red,2pt},
    colspec = { X[1,c]X[5,c]X[1,c] },
    rowspec = { m{3.5cm} m{1.6cm} m{22cm} }
}
Alpha & Beta & Gamma \\ 
Epsilon & Zeta & Eta \\ 
Iota & Kappa & Lambda \\
\end{tblr}
\end{document}

image.png


Step2. 补充与调整细节内容

\documentclass{ctexart}
\usepackage[17pt]{extsizes}%
\usepackage[%
    a4paper,%
    margin={1.5cm,1cm},%
    % showframe,%
    ]{geometry}%
\usepackage{xcolor}%
\usepackage{tabularray}%
\usepackage{xpinyin}%
\setCJKmainfont{KaiTi} % 中文楷体
\newfontfamily\pinyinfont{印氪先生汉语拼音优化版W4-Regular-1.001.ttf}
\newCJKfontfamily\fakeboldsimsum{SimSun}[AutoFakeBold=2]
\newCJKfontfamily\AlibabaPuHuiTi{AlibabaPuHuiTi-3-105-HeaVy.otf}
% 拼音设置
\xpinyinsetup{%
    font=\pinyinfont,%
    ratio=0.4,%
    format={\color{darkgray}},%
    multiple={\color{red}}%
}%
\begin{document}%
\noindent%
\begin{tblr}{ %
    width=\textwidth,stretch=0,
    hlines={red,1pt}, vlines={red,1pt},
    hline{2} = {white,lr},
    hline{1,5} = {2pt},
    vline{1,4} = {2pt},
    colspec = { X[1,c]X[8,c]X[1,c] },
    rowspec = { m{2cm} t{1cm} m{1.6cm} m{22cm}},
    cell{1}{1} = {c=3}{font=\Large\AlibabaPuHuiTi\bfseries\color{red}\selectfont},
    cell{2}{1} = {c=3}{c},
    cell{4}{2} = {font=\fontsize{16}{16}\selectfont}
}%
    %第一行
    二年级上册背诵/默写一览表 &  &  \\ 
    %第二行
    班级:\underline{\hspace{3cm}} \quad
    姓名:\underline{\hspace{3cm}} &  &  \\ 
    %第三行
    课序 
    & 
    {%
        背诵内容 \\
        \textcolor{red}{\small(背诵课文部分,注释部分可不作要求)}
    }%
    & 
    家长签名 \\ 
    %第四行
    3 植物妈妈有办法 
    & 
    \begin{pinyinscope}%
    植物妈妈有办法​​\\
    \bigskip\bigskip\bigskip
    孩子如果已经长大,就得告别妈妈,四海为家。\\
    牛马有脚,鸟有翅膀,植物要旅行又用什么办法?\\
    \bigskip\bigskip
    蒲公英妈妈准备了降落伞,把它送给自己的娃娃。\\
    只要有风轻轻吹过,孩子们就乘着风纷纷出发。\\
    \bigskip\bigskip
    苍耳妈妈有个好办法,她给孩子穿上带刺的铠甲。\\
    只要挂住动物的皮毛,孩子们就能去田野、山洼。\\
    \bigskip\bigskip
    石榴妈妈的胆子挺大,她不怕小鸟吃掉娃娃。\\
    孩子们在鸟肚子里睡上一觉,就会钻出来落户安家。\\
    \bigskip\bigskip
    豌豆妈妈更有办法,她让豆荚晒在太阳底下,\\
    啪的一声,豆荚炸开,孩子们就蹦着跳着离开妈妈。\\
    \bigskip\bigskip
    植物妈妈的办法很多很多,不信你就仔细观察。\\
    那里有许许多多的知识,粗心的小朋友却得不到它。\\
    \end{pinyinscope}
    &  \\
\end{tblr}

\end{document}

image.png

当然,里面的许多细节我也没处理的很好,再慢慢改良,不急....


未完待续

给一种基于varwidth(或者说盒子)的「不得体之术」:

\documentclass{ctexart}
\usepackage{showframe}
\usepackage{graphicx}
\usepackage{caption}
\captionsetup{justification=centering}
\usepackage{bicaption}
\captionsetup[figure][bi-first]{name=图}
\captionsetup[figure][bi-second]{name=Fig.}
\usepackage{lipsum,zhlipsum}
\usepackage{varwidth}
\begin{document}
\lipsum[2]

\begin{figure}[h]
\centering
\includegraphics[width=.5\textwidth]{example-image}
\bicaption{中文中文中文中文中文中文中文中文中文}{\begin{varwidth}[t]{.8\linewidth}English text English text English text English text\\ English text English text text text \end{varwidth}}
\end{figure}

\zhlipsum[2]
\end{document}

image.png

是否有更好的利用caption包的办法而不是抖机灵呢?

稍微看了一下文档

js控件」的位置是内部决定的,无法通过media9/animate的选项控制。

发布
问题