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

注册于 3年前

回答
445
文章
0
关注者
15

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

这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

增加eqnarray的又一罪状

\documentclass[12pt]{article}
\usepackage{showframe}
\usepackage{amsmath,amssymb}
\setlength{\parindent}{0cm}
\numberwithin{equation}{section}
\begin{document}
\section{aaa}
\section{bbb}
\section{ccc}
Why?
\begin{subequations}
\begin{eqnarray}
\tan^{-1}\left(\frac{1}{F_{2n-2}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n-2}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,\\
\tan^{-1}\left(\frac{2}{L_{2n-1}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,
\end{eqnarray}
\end{subequations}

Why not?
\begin{subequations}
\begin{align}
\tan^{-1}\left(\frac{1}{F_{2n-2}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n-2}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,\\
\tan^{-1}\left(\frac{2}{L_{2n-1}}\right) &=& \tan^{-1}\left(\frac{1}{F_{2n}}\right)+\tan^{-1}\left(\frac{1}{L_{2n}}\right)\,,
\end{align}
\end{subequations}
\end{document}

image.png

同样的在上述论文的2.2节,出现「编号与内容重叠」的问题...

image.png


关于四:

数学模式里,为什么要 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的选项控制。

如果要取点,增加取点的数量/缩小取点的间隙是不是就可以解决「图象光滑度不是很满意」的问题呢?

related:


Claim:我不喜欢大量依赖「绝对坐标」的「可维护性差的」做法,上面

\tkzDefPoints{-2.39/0.27/A,-2/0/B,-1.15/-0.73/C,-0.55/0/D,-0.21/0.51/E,0/0/F,0.21/0.51/G,0.55/0/H,1.15/-0.73/I,2/0/J,2.39/0.27/K}
\draw plot[smooth,tension=.7] coordinates{(A)(B)(C)(D)(E)(F)(G)(H)(I)(J)(K)};

的丑陋语法让我难以接受...所以我 不打算用取点法

Learning From this link:

\documentclass[border=5pt,tikz]{standalone}
\tikzset{line join=round,line cap=round,thick}%
\newcommand*\myhalfpath[1][black]{%
    \draw[#1] (0,0)
    .. controls (.1,1) and (.6,1) .. (.8,0)
    .. controls (1.2,-1.75) and (1.6,-1.2) .. (2.8,0)
    .. controls (2.9,.1) and (3.1,.18) .. (3.2,.2)
    ;
}
\begin{document}
\begin{tikzpicture}
   \draw[-latex] (-3.25,0) -- (3.25,0) node[below] {$x$};
   \draw[-latex] (0,-2) -- (0,2) node[right] {$y$};
   \begin{scope}[xscale=-1]
        \myhalfpath[magenta]
   \end{scope}
   \myhalfpath[magenta]
\end{tikzpicture}

\begin{tikzpicture}
    \draw[-latex] (-3.25,0) -- (3.25,0) node[below] {$x$};
    \draw[-latex] (0,-2) -- (0,2) node[right] {$y$};
    \myhalfpath[cyan]
    \begin{scope}[scale=-1]
        \myhalfpath[cyan]
    \end{scope}
 \end{tikzpicture}
\end{document}

image.png

如果还是不光滑就自己微调吧....

@u1680

And, 希望OP可以从上面的这些提问中总结一套「此类函数绘制题」各个思路的对比和局限性的介绍,不然经常需要重复提问类似的问题。

上面使用pdflatex-pdflatex编译会出现如下警告:

pdfTeX warning (ext4): destination with the same identifier (name{part.1}) has 
been already used, duplicate ignored
<to be read again> 
                   \relax 
l.12 \part{first part}

这意味着此时hyperref无法保证具有唯一\thepart,而xelatex能正确处理「纯属巧合

Claim: 下面的回答来自林间花@u38442 老师

此事在texdoc hyperref的sec13.7中亦有记载:

image.png

hyperref\theHsection 默认是 \arabic{section},你如果只做 \setcounter{section}{0} 是不行的,你需要重定义一下 \theHsection。下面是mwe:
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\section{apple}
\setcounter{section}{0}
\renewcommand{\theHsection}{\thesection.\thepage} 
\section{banana}
\subsection{banana-tree}
\end{document}

image.png

发布
问题