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

注册于 3年前

回答
424
文章
0
关注者
15

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

请问这种图怎么画出来

建议看一下tikz宏包,其中的入门内容可以比较方便地画出上图的大致轮廓。

本论坛「应该」不是一个「do-this-for-me」的平台,请尽量阅读上面的文档,使用「编辑问题」功能给一份你的尝试的代码。这样既有利于自己的能力提高,也能让论坛的uu能更有针对性地帮到你。


效果也许是这样,但「在你给出你的尝试之后我再贴代码叭😀」

image.png

\documentclass[tikz,border=1cm]{standalone}
\usepackage{physics2}
\usephysicsmodule{ab.braket}
\begin{document}
\begin{tikzpicture}
  \draw (0,.5) 
    node[rectangle,anchor=east] {Meter} 
    edge node[above] {$\rho$} 
    ++(1,0) -- ++(5,0);%
  \draw (0,-.5) 
    node[rectangle,anchor=east] {System} 
    edge node[below] {$\ket|\Phi>$} 
    ++(1,0) -- ++(5,0);%
  \node[draw,thick,fill=white,rectangle,minimum size=1.75cm,font=\Huge] at (2,0) {$\hat{u}$};
  \draw (4,.5) 
    node[circle,fill,inner sep=1pt] {} -- (4,-.5) 
    node[draw,thick,fill=white,rectangle,minimum size=.5cm] {} 
    node[below=.25cm] {$\Big\{\ket|\Phi>,\ket|\Phi^\perp>\Big\}$};
\end{tikzpicture}
\end{document}

下面两个等号应该像aligned环境一样可以对齐,不过好像在网页上用&nbsp;不好弄出来

可以借助于一下代码块(狗头)


没必要在subequations内用多个equation:

\documentclass{article}
\usepackage{amsmath}
\setlength{\parindent}{0pt}
\begin{document}
aaaaaaaaaaaaaaaa
\begin{subequations}
    \begin{align}
        A &= B + C \\
        D + E &= F + G + H + I
    \end{align}
\end{subequations}
bbbbbbbbbbbbb
\end{document}

image.png

问3:是否有比较简单可靠的方法实现切换到landscape环境后,页眉页脚也旋转90°?

但在理想效果中,仅有「页眉」做了旋转 ,「页脚」并未旋转

image.png


问3:是否有比较简单可靠的方法实现切换到landscape环境后,页眉页脚也旋转90°?

关于问题3: 可以参考这个链接

个人觉得没有。


Edited:

just curious: 为何需要将\chapter也一起横向放置呢?是否有上面例子真实的使用场景?一般来说对于有「宽表格」的论文,只会在「不改变页眉页脚设置」的前提下「只将这个宽表格横置」.

在这篇JF上的「Default Risk in Equity Returns」Page.30-33.

image.png

对于一整篇文章的连续性,个人认为 「正向的第x章」应该保持一致一直保持「正向」的「章节页」布局。

IMHO,landscape环境最简单也是最有效的用法是「仅仅用来旋转单独一个宽度较大的图表」.


问1:ctexbook环境章节前一页(空白页)的页码错位,标准解决方法是什么?是否应该在每章前手动设置\cleardoublepage?
问2:在lscape宏包landscape环境下,设置\cleardoublepage无法纠正页码错位,应该如何解决该问题?

关于问题1-2: 此事在此似乎亦有记载

按照DC的说明:

  • 要么不要让landscape包围\chapter
  • 要么在「上一个\chapter前」加上\cleardoublepage

不是很「smooth」的思路:

当需要换页时,总可以优先考虑tcolorbox.
\documentclass{article}
\usepackage[paperheight=15cm]{geometry}
\usepackage[most]{tcolorbox}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\begin{tcblisting}{%
        breakable,sharp corners,colback=white,
        skin=beamer,enhanced jigsaw,
        title={This is a code listings},
        listing only,listing options={%
            basicstyle=\ttfamily,
            escapeinside={|}{|}},
        overlay middle and last={%
            \node[text=red,font=\bfseries] at ([xshift=-7.5em,yshift=1ex]frame.north east) {(Followed by last page)};%
        },%
    }
    \section{A sec}
    xxxxxxxxxxxxxxx
    |\lipsum[1-5]|
    yyyyyyyyyyyyyyy
    \section{A sec}
\end{tcblisting}

\end{document}

image.png

主要难点是涉及整个tikz库多文件之间的相互关联。

提取一个「相对比较简单的」MWE如下,其中:

  • \input{pgfmanual-en-main-preamble.tex}需要的代码来自./base/doc/pgfmanual-en-main-preamble.tex
  • 需要使用ltxdoc文档类,其中定义了一些关键的命令和环境

截自v3.10(2025-06-22),该文件可在这里获得:pgfmanual-en-main-preamble.tex

\documentclass{ltxdoc}
\usepackage{tikz}
\usepackage{pgf}
\input{pgfmanual-en-main-preamble.tex}

\begin{document}
\begin{codeexample}[]
    \begin{tikzpicture}
      \foreach \x in {1,2,...,5,7,8,...,12}
        \foreach \y in {1,...,5}
        {
          \draw (\x,\y) +(-.5,-.5) rectangle ++(.5,.5);
          \draw (\x,\y) node{\x,\y};
        }
    \end{tikzpicture}
\end{codeexample}
\end{document}

image.png


当然,\input{pgfmanual-en-main-preamble.tex}内部多达300行,还是不够简的。

纵览整个pgfmanual-en-main-preamble.tex文件,其核心在于:

% Line 187
\input{pgfmanual-en-macros}

根据TSE上搜索的结果和kpathsea的索引逻辑,该文件的位置位于./base/tex/latex/doc/pgfmanual-en-macros.tex

image.png

上面的文件调用了pgfmanual-en-macros.tex,我们同时还发现:

% pgfmanual-en-macros.tex
% Line 1858
\usepackage{pgfmanual}

这将会调用./base/tex/latex/doc/pgfmanual.sty文件:

% pgfmanual.sty
\ProvidesPackage{pgfmanual}[2009/10/15]
\input pgfmanual.code.tex

其中的\input pgfmanual.code.tex会调用上面截图路径中的pgfmanual.code.tex:

% pgfmanual.code.tex
\input pgfmanual.prettyprinter.code.tex
\input pgfmanual.pdflinks.code.tex

接下来只要用二分删除的方式,理论上可以只提取出「最轻量」的「仅仅用于codeexample环境实现」的部分「最短代码」。


首先尝试二分删除简化「pgfmanual-en-main-preamble.tex」,似乎仅有这两行是必不可少的:

\usepackage{calc,listings}
% \usepackage[version=latest]{pgf}
\input{pgfmanual-en-macros}

这里[version=latest]会报错...懒得管,先注释这个选项即可...

非常初步简化的MWE如下:

\documentclass{ltxdoc}
\usepackage{tikz,pgf,calc,listings}
\input{pgfmanual-en-macros.tex}

\begin{document}
\begin{codeexample}[]
    \begin{tikzpicture}
      \foreach \x in {1,2,...,5,7,8,...,12}
        \foreach \y in {1,...,5}
        {
          \draw (\x,\y) +(-.5,-.5) rectangle ++(.5,.5);
          \draw (\x,\y) node{\x,\y};
        }
    \end{tikzpicture}
\end{codeexample}
\end{document}

换言之,下面的工作只要专心把pgfmanual-en-macros.tex进一步做简化即可。


TBC.

发布
问题