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

注册于 3年前

回答
321
文章
0
关注者
13

不是很「smooth」的思路:

\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.

请给一个完整可以直接编译得到「页面显示文字深浅不一,整体看有一坨坨的黑斑」的代码例子


另外,您如何确定

\setCJKmainfont{NSimSun.ttf}[
    ItalicFont = simfang.ttf,
    BoldFont = FZXKTK.TTF,
    BoldItalicFont = STZHONGS.TTF,
    FallBack = simsunb.ttf
    ]

里的
「新中易宋体」、「中易仿宋」、「方正新楷体」、「华文中宋」和「中易宋体-extb」是相匹配的

同时:
在windows系统下默认没有自带FZXKTK.TTFSTZHONGS.TTF字体

这些都是提问者需要提供的内容。

总之,请让潜在的回答者「一点击编译立刻可以看到你的示例效果图」


Claim:我没有那几个字体,题主也没提供,我不想装

我给一个MWE:

\documentclass{ctexart}
\setCJKmainfont{NSimSun}[
    FallBack = simsunb.ttf
]
\usepackage{zhlipsum}
\begin{document}
\zhlipsum[name=zhufu]
\end{document}

远看效果:

image.png

近看效果:

image.png

image.png


再给一个MWE

\documentclass{ctexart}
\setCJKmainfont{NSimSun}[
    FallBack = simsunb.ttf
]
\usepackage{zhlipsum}
\begin{document}
王位。毗湿摩——福身王的长子——王位正当的继承人满足了渔人的要求,宣布放弃王位,并发誓终身不娶,以便让贞信之子继承王位。毗湿摩不仅做出这些牺牲(在印度,自制一直是备受赞美的品质),他还到迦尸王庭,参加勇士较量,打败所有对手,赢回公主安芭(Āmbā)、安必迦(Āmbikā)和安波利迦(Āmbālikā),作他同父异母的弟弟——贞信之子——奇武的妻子(安芭拒绝嫁给奇武王,她的故事容后再述)。在福身王死时,奇武尚未成年,他在象城称王,由毗湿摩摄政。这就是慷慨非凡的毗湿摩,在他有生之年,都是世上最伟大的勇士,又是最伟大的兵法导师。在娶了安必迦和安波利迦之后,奇武王仍无子女。他同母异父的哥哥毗耶娑仙人,根据叔娶嫂制的风俗,担起责任,和他的妻子们生育子嗣。随后,安必迦成为持国的母亲,持国目盲且优柔寡断,是后来俱卢族国王;安波利迦则成为般度的母亲,般度是般度五子形式上而非真正的父亲。这样看来,般度之子和俱卢之子,除有超自然干预和大量的代理父亲、堂兄弟外,作为后裔的俱卢之子均远离俱卢族;般度之子也同样,他们源于俱卢族是通过其法定的、而非真正的父亲般度。
\end{document}

image.png

image.png

似乎没看出所谓「页面显示文字深浅不一,整体看有一坨坨的黑斑」...

最后,提问必须要给可复现代码,谁也不知道你的截图怎么编译出来的...

PLA2.fasta文件您并没有提供😊别人无法进行测试

参考这个链接: https://tex.stackexchange.com/a/650056/322482

目测更新到v1.26即可

请给一个完整的代码例子。

并详细描述「实际效果」和「预期效果」的差异。

请先测试hello, world!!!!

文件配置是全的,完全一样的文件在别人电脑上的运行没有问题

表述很模糊,什么文件配置,又是什么全的,怎么个全法?

需要使用「补充问题」功能进一步修改完善你的问题

请正确使用markdown语法,不会markdown语法不要提问

请提供完整的最小工作示例代码/模板链接

完整——不含任何省略号,从\documentclass开始到\end{document}结束

比如谁会知道siamart220329是什么文档类???在哪里可以获得???

image.png

问题极不明确

你要是不能描述你具体哪里不会排,这看起来更像是「请帮我完成以下排版任务」;与其如此,不如你找这个公众号的主人,给点钱让把源码发你

请不要把提问区当成许愿池,提问需要基本的诚意

这个论坛上活跃答题的就那么几个,要是你总是不遵守论坛规则,估计后面没人愿意回答了

(你好好写label很难吗??令人看着不太舒服,而且多次提醒)


image.png

image.png

image.png

你昨天说「哈哈,我排了没成功,所以问问」

那你的最小工作示例代码呢?作为一门写代码的学问提问不给代码?没有代码让人手工给你造轮子?

要想在论坛获得满意的答案,你首先「必须」付出并展示足够的努力(试问你付出了多少时间,上面的提问看起来就像是看到一个好看的一点尝试都没做就发出来问「如何实现」),让人能看到「他确实花了很多时间,确实在某个地方遇到了障碍」,而不是直接「伸手」....

推荐阅读:提问的智慧


image.png

由于提问极不规范而且缺少诚意...

随便答了,假定你要在enumerate内使用自定义bullet,自己画一个即可:

\documentclass{article}
\usepackage{tikz,enumitem,lipsum}
\newcommand*\mybullet[2][cyan]{%
    \tikz[baseline=(char.base)]{%
        \node[rectangle, fill=#1, inner sep=2pt, minimum height = 1.3em,font=\bfseries\color{white}] (char) {#2};
        \draw[#1,very thin] ([yshift=-.3ex]char.south west) -- ([yshift=-.3ex]char.south east);
    }}
\begin{document}
\begin{enumerate}[label=\protect\mybullet{\arabic*},start=9]
    \item \lipsum[2]
    \item \lipsum[2]    
    \item \lipsum[2]
\end{enumerate}
\end{document}

image.png

⚠⚠⚠⚠⚠望引以为戒,正确规范提问。

本着「不要重复造轮子」的原则,一个比较适合的包是texdox xsim

一个简单的用例在这里

给一个更完整点的例子(注意可能要手动删除.xsim文件以防止错误的结果):

\documentclass{article}
\usepackage{xsim}
\usepackage{lipsum}
\DeclareExerciseCollection[label=A]{A}
\DeclareExerciseCollection[label=B]{B}
\DeclareExerciseCollection[label=C]{C}
\DeclareExerciseCollection[label=D]{D}
\DeclareExerciseTagging{label}
\xsimsetup{collect}
\begin{document}
\begin{exercise}[label=C]
  \textbf{C} \lipsum[2]
\end{exercise}
\begin{exercise}[label={A,B}]
  \textbf{A and B} \lipsum[2]
\end{exercise}
\begin{exercise}[label={B,C,D}]
    \textbf{B and C and D} \lipsum[2]
\end{exercise}
\begin{exercise}[label={D,A}]
    \textbf{D and A} \lipsum[2]
\end{exercise}

\section{AAA}
\printcollection{A}

\section{CCC}
\printcollection{C}

\section{DDD}
\printcollection{D}
\end{document}

image.png

Long Long Ago:

要求不使用参数方程,仍然使用自定义函数的方式

我不太能理解原因,是希望半个柱面用colormapA,另外半个柱面用colormapB吗?如果是,你应该直接说明你的最终需求,而不是中间需求「要求不使用参数方程,仍然使用自定义函数的方式」

图中ABCD四个位置明显渲染效果面积比其它位置大,如果增加样本量,这个现象还是存在。

这是因为采用「y=±√9-x^2」的形式, pgfplots在处理时对x domain行等距离的分划,可以发现在两端对应的半圆切片更大(也就是A、D、B、C面积更大)

而如果采用「{cosx,sinx,y}」的形式,被等距离分划的是圆心角,因此这样的各个子块的面积是相同的

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{colormaps,fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    scale=2,axis equal,
    view={120}{30},samples=20,
    xlabel={$X$},ylabel={$Y$}]
\addplot3[
    colormap/bluered,surf,
    z buffer=sort,
    domain=0:2*pi,
    y domain=-4:0,
    ]
    ({3*cos(deg(x))},{3*sin(deg(x))},{y});
\end{axis}
\end{tikzpicture}
\end{document}

image.png


Editted:两种颜色映射

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{colormaps,fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    scale=2,axis equal,
    view={120}{30},samples=20,
    xlabel={$X$},ylabel={$Y$}]
\addplot3[
        colormap/viridis,surf,
        z buffer=sort,
        domain=pi:2*pi,
        y domain=-4:0,
    ]
    ({3*cos(deg(x))},{3*sin(deg(x))},{y});
\addplot3[
        colormap/bluered,surf,
        z buffer=sort,
        domain=0:pi,
        y domain=-4:0,
    ]
    ({3*cos(deg(x))},{3*sin(deg(x))},{y});
\end{axis}
\end{tikzpicture}
\end{document}

image.png

Claim:不是很懂展开,做了一个(不一定合适)的尝试:

使用\exp_args:Nne 对参数进行e-type展开

\documentclass{exam-zh}
\newcommand{\foo}{a3paper}
% \def\foo{a3paper}
\ExplSyntaxOn
\RenewDocumentCommand \examsetup { m }{ 
    \exp_args:Nne \keys_set:nn {exam-zh} {#1} 
}
\ExplSyntaxOff
\examsetup{
  page/size={\foo},%可展的key-value
  sealline/show=true,%不可展的key-value
}

\begin{document}

花有重开日,人无再少年。花有重开日,人无再少年。

\end{document}

image.png


ctex-kit中,today这一key也是由.choice定义的:

image.png

下面的mwe也有类似的问题:

\documentclass[fontset=ubuntu]{ctexart}
\def\mytodaystyle{big}
\ctexset{
    today=\mytodaystyle,
}
\begin{document}

日期: \today

\end{document}
! Class ctexart Error: Today format `big' is undefined.

For immediate help type H <return>.
 ...

l.8 }

「似乎」也可以做类似的「展开」,但是l3keys默认是进行展开的,这样做是否会造成其他的问题,我不清楚...

\documentclass[fontset=ubuntu]{ctexart}
\def\mytodaystyle{big}
\ExplSyntaxOn
\exp_args:Ne
\ctexset{
    % today=big,
    today=\mytodaystyle,
}
\ExplSyntaxOff
\begin{document}

日期: \today

\end{document}

image.png

始终无法点中正确区域

点击位置不够「精确」,请睁大眼睛,准确点击「待点击对象」的「正中心」。

建议不要用「让代码就像文字一样,从当前页继续,但如果当前页空间不足时自动换页」这种表述,而是用「breakable listings」

太困了,只给例子,个人觉得tcb是比较好的实践了...

你要综合看tcolorboxlistings的文档

几个关键的option为:

  • listing remove caption=false
  • caption={Rust is Genshin Impact of coding}
  • captionpos=t(这是默认值,可调)
  • label={mycode}
\documentclass{article}
\usepackage[margin=1in]{geometry}
\usepackage{lipsum}
\usepackage[most]{tcolorbox}
\usepackage{hyperref}
\tcbuselibrary{listings}
\newtcbinputlisting{\mylisting}[2][]{%
    enhanced jigsaw,sharp corners,title={example~code},empty,left=1cm,breakable,%
    listing file={#2},listing only,listing remove caption=false,
    listing options={numbers=left,breaklines,basicstyle=\ttfamily,caption={Rust is Genshin Impact of coding},captionpos=t,label={mycode}},#1%
}
\begin{filecontents*}[overwrite]{temp.rs}
    use std::sync::{mpsc, Arc, Mutex};
    use std::thread;
    use std::time::Duration;
    
    struct ThreadPool {
        workers: Vec<Worker>,
        sender: mpsc::Sender<Message>,
    }
    
    impl ThreadPool {
        fn new(size: usize) -> Result<ThreadPool, PoolCreationError> {
            if size == 0 {
                return Err(PoolCreationError::InvalidSize);
            }
    
            let (sender, receiver) = mpsc::channel();
            let receiver = Arc::new(Mutex::new(receiver));
    
            let mut workers = Vec::with_capacity(size);
            for id in 0..size {
                workers.push(Worker::new(id, Arc::clone(&receiver)));
            }
    
            Ok(ThreadPool { workers, sender })
        }
    
        fn execute<F>(&self, f: F)
        where
            F: FnOnce() + Send + 'static,
        {
            let job = Box::new(f);
            self.sender.send(Message::NewJob(job)).unwrap();
        }
    }
    
    struct Worker {
        id: usize,
        thread: Option<thread::JoinHandle<()>>,
    }
    
    impl Worker {
        fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Message>>>) -> Worker {
            let thread = thread::spawn(move || loop {
                let message = receiver.lock().unwrap().recv().unwrap();
                match message {
                    Message::NewJob(job) => {
                        job();
                    }
                    Message::Terminate => break,
                }
            });
    
            Worker {
                id,
                thread: Some(thread),
            }
        }
    }
    
    enum Message {
        NewJob(Box<dyn FnOnce() + Send + 'static>),
        Terminate,
    }
    
    #[derive(Debug)]
    enum PoolCreationError {
        InvalidSize,
    }
    
    fn is_prime(n: u64) -> bool {
        if n <= 1 {
            return false;
        }
        for i in 2..=(n as f64).sqrt() as u64 {
            if n % i == 0 {
                return false;
            }
        }
        true
    }
    
    fn main() {
        
    }    
\end{filecontents*}
\begin{document}
I want to ref code \ref{mycode} here.
\lipsum[1]
\mylisting{temp.rs}
\lipsum[2]
\end{document}

image.png

算是经典问题吧。

这个代码高亮是LaTeX-Workshop提供的,所以类似的issues等是应该被关心的。


VSCode 目前存在问题, 对于识别类似left{ xxxxright.这样的代码有问题, 不认为是成对的, 导致总是无法正常显示成对的括号。我依稀记得很久以前是没有这个问题的, 不知道是从哪个版本开始变成这样了。一直没有很好的解决方法

先问是不是,再问怎么办。

如果只安装LaTeX workshop的话....

在我这里表现良好,可能你要检查一下版本,以及关注vscode-latex-basics相关的issues,如测试还有漏网之鱼,应该向这里报告。

image.png


注意到你还提到你安装了「HyperScopes、LaTeX Acronyms、LaTeX language support」

我都没装(我也不想装)...

  • 这些插件真的都是你 确实 需要的吗?到处乱装一大堆插件他们的互相作用可能是很复杂的...
  • 如果你探索出某个插件和「LaTeX workshop」 确实 有冲突,同样也最好是向上面的链接报告
  • 关于「LaTeX language support」...他已经很久不维护了...

image.png

无法复现。请提供更多的详细信息(例如OS,系统版本,宏包版本,确保关闭其他应用程序)。

使用WPS是治标不治本的行为。

TeXLive2025
windows11
一切正常

image.png

发布
问题