Hello的H后面的空格如何产生的?如何消除?

发布于 2025-02-14 21:45:52

mlybt.png

\documentclass{article}
\usepackage{xcolor}
    \definecolor{mygreen}{RGB}{0,166,82}
\usepackage[papersize={10.5cm,14.85cm},scale=0.8,showframe]{geometry}
\usepackage{xeCJK}
    \setCJKmainfont[BoldFont=SimHei,ItalicFont=KaiTi,BoldItalicFont=FangSong]{SimSun}
\usepackage{zhnumber}
\usepackage{tcolorbox}
    \newcounter{dytcb}
    \tcbuselibrary{breakable}
    \tcbuselibrary{skins}
    \newenvironment{dytcb}[2][]%
    {%
        \begin{tcolorbox}[
            enhanced,
            frame empty,
            interior empty,
            coltitle=white,
            fonttitle=\bfseries,
            colbacktitle=mygreen,
            rounded corners,
            borderline={0.25mm}{0mm}{mygreen},
            breakable,
            top=4mm,
            before skip=3.5mm,
            attach boxed title to top left={yshift=-3mm,xshift=5mm},
            boxed title style={boxrule=0pt,sharp corners=all},
            title={第\stepcounter{dytcb}\zhdig{dytcb}}单元,
            #1
        ]
            #2
    }{\end{tcolorbox}}
\begin{document}
    \begin{dytcb}
        Hello, \LaTeX !
    \end{dytcb}

    Hello, \LaTeX !
\end{document}

查看更多

关注者
0
被浏览
207
Alfred
Alfred 6天前
这家伙很懒,什么也没写!

你自己要让dytcb环境带两个参数,结果只给了一个参数,LaTeX默认就给你第一个H当那个参数了,你在\begin{dytcb}后面加一个{}变成

\begin{dytcb}{}
    Hello, \LaTeX{}!
\end{dytcb}

就行

4 个回答
啸行
啸行 6天前
这家伙很懒,什么也没写!

先来看这样的例子:

\documentclass{article}
\usepackage[fontset=none]{ctex}
\usepackage{xcolor}
\definecolor{mygreen}{RGB}{0,166,82}
\usepackage[papersize={10.5cm,14.85cm},scale=0.8,showframe]{geometry}
\setCJKmainfont[BoldFont=SimHei,ItalicFont=KaiTi,BoldItalicFont=FangSong]{SimSun}
\usepackage{zhnumber}
\usepackage{tcolorbox}
\newcounter{dytcb}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\newenvironment{dytcb}[2][]%
{%
  \begin{tcolorbox}[
    enhanced,
    frame empty,
    interior empty,
    coltitle=white,
    fonttitle=\bfseries,
    colbacktitle=mygreen,
    rounded corners,
    borderline={0.25mm}{0mm}{mygreen},
    breakable,
    top=4mm,
    before skip=3.5mm,
    attach boxed title to top left={yshift=-3mm,xshift=5mm},
    boxed title style={boxrule=0pt,sharp corners=all},
    title={第\stepcounter{dytcb}\zhdig{dytcb}}单元,
    #1
    ]
    #2
  }{\end{tcolorbox}}
\begin{document}
  \begin{dytcb}{H}
    Hello, \LaTeX !
  \end{dytcb}
  
  Hello, \LaTeX !
\end{document}

image.png

我不是很懂 tcolorbox,通过这例子,我大概猜一下,你的例子里的 H 其实被 dytcb 当成是第1个参数了。

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

代码可以更短,MWE也应该更短!!!

image.png

正常情况下,#2不需要显式写入\newenvironment的定义中<begin-def>的部分,对于:

\begin{env}
<something>
\end{env}

LaTeX会自动把<something>自动插入到<begin-def><end-def>之间。

区别下面的例子:

\documentclass{article}
\usepackage{tcolorbox}
\newenvironment{tcbA}[2][]{%
\begin{tcolorbox}[#1]
    #2
}{\end{tcolorbox}}
\newenvironment{tcbB}[1][]{%
\begin{tcolorbox}[#1]
}{\end{tcolorbox}}
\begin{document}
    \begin{tcbA}
        Hello, \LaTeX !
    \end{tcbA}
    
    \begin{tcbB}
        Hello, \LaTeX !
    \end{tcbB}
\end{document}

在你的MWE中,因为#2是必须参数,因此\begin{tcbA}在处理时,第一个参数optional argument未指定,所以为默认的<empty>;但是第二个参数mandatory argument缺失,所以TeX先自动吞下(swallow)了一个token H.在<begin-def>命令结束后,之后再把ello, \LaTeX{}的内容作为<something>放进tcb内部。

LaTeXStudio
LaTeXStudio 5天前
这家伙很懒,什么也没写!

继续回答的测试。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览