拿了橘子跑啊
拿了橘子跑啊
这家伙很懒,什么也没写!

注册于 4年前

回答
87
文章
0
关注者
3

这个间距是在\@trivlist 里添加的,你可以通过命令行:

latexdef \@trivlist

看到这个宏的展开
所以,一个不是太严谨的方法是利用 xpatch 宏包的 xpatchcmd 命令将 \topsep patch 为 0pt

\makeatletter
\xpatchcmd{\@trivlist}{\topsep}{0pt}{}{}
\makeatother

完整的例子(为了排版出对比,我改了页边距)和效果:

\documentclass[12pt,twoside]{ctexbook}
\usepackage{xcolor}
\usepackage{xpatch}
\usepackage{zhlipsum}
\usepackage[margin=2cm]{geometry}

\begin{document}
\zhlipsum[1]
\begin{center}
    \begin{tabular}{p{0.9\textwidth}}
        \hline
        {\color{red}这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
        \hline
    \end{tabular}
\end{center}
\zhlipsum[1]

\makeatletter
\xpatchcmd{\@trivlist}{\topsep}{0pt}{}{}
\makeatother
\begin{center}
    \begin{tabular}{p{0.9\textwidth}}
        \hline
        {\color{red}这里center环境会和上下文有一定的额外间距,不知该如何减小或消除。尝试过用enumitem宏包,设置trivlist,并未成功}\\
        \hline
    \end{tabular}
\end{center}

\zhlipsum[1]
\end{document}

以下可以看出未 patch 的效果和 patch 后的效果:
image.png

其实最可靠的方式是使用 minipage 环境,其中直接使用centering 声明居中即可,当然,其中也可以使用 center 环境,center 产生的额外间距也会被 minipage 去掉。不过这种方法不能让环境中的内容自动换页。

顺序没错啊,plain.bst 是按作者名排序的。
001 - Guti'{e}rrez-Cuevas - G 排第二
002 - Teimourpour - T 排第三
003 - Christodoulides - C 排第一

给他 pdf 让他直接在上面做标记啊,然后你自己改过来不久行了?难道你想让导师直接帮你改好啊?

别乱搞。

  1. \subsubsection 不能 \newcommand,这是个已经存在的命令,\newcommand 当然报错。
  2. 即便要新定义章节结构,你那个\subsubsubsection 也是乱写,建议好好看看内核里这些章节结构都是咋定义的。
  3. 要用更深的逻辑层次,还有两级,\paragraph\subparagraph,默认文档类的标题是 runin 的,也就是标题后面不换行直接排段落的正文。需要自己修改。ctex 文档类的 sub3sectionsub4section 可以把这两级标题的样式改成和 \subsubsection 类似的样式。

你改了第二行的默认编译器,但是“创建并查看”那个工具还是 pdflatex 的编译链啊,是不是点的还是“创建并查看”按钮呢?如果用 xelatex 编译,不会出现那个错误提示的。

这种问题去 github 这个项目那里提 issue 比较好。自己排查,只能看出现这种情况的那一页对应代码有什么特殊的用法。你连个 mwe 都不给,爱莫能助。

lstlistings 环境里的代码块缩进去掉就行了,那几句行首都有Tab制表符缩进,listings 把这个制表符缩进也排出来了。

你这个问题问得不清楚。

  1. 我把这里的 长度 理解成字符的宽度。
  2. ex这个长度单位最初在定义的时候并不是字符 x宽度,而是字符 x高度。所以一个汉字的长度相当于几个ex一个汉字的长度相当于几个 x 的长度 并不是同一个答案。
  3. emex 这两个单位最初定义时确实是当前字体字号下 M 字符的宽度x 字符的高度,但现在通常是在字体文件里指定这两个相对长度的精确值,当然,它们会随字号大小而改变。
  4. ctex 宏集中,em 这个单位长度被定义为和一个汉字字符等宽,即\ziju为0时,1em = \ccwd,这个长度和 M 的宽度还是有一定的差别的。

这几个长度单位数值可以通过 \printlen 宏包换算显示出来。下面的例子文件给出了这几个长度的数值。x 字符的高度我一时想不起什么方式来获得了,用了个比较傻的方法。

\documentclass{ctexart}
\usepackage{printlen,graphicx}
\uselengthunit{bp}
\newlength\widthofx
\newlength\heightofx
\newlength\widthofM
\settowidth\widthofx{x}
\settowidth\heightofx{\rotatebox{90}{x}}
\settowidth\widthofM{M}
\begin{document}
  \begin{tabular}{l|r}
    \hline
    1em  & \printlength{1em} \\
    \hline
    1ex  & \printlength{1ex} \\
    \hline
    ccwd  & \printlength{\ccwd} \\
    \hline
    width of x  & \printlength{\widthofx} \\
    \hline
    height of x  & \printlength{\heightofx} \\
    \hline
    width of M  & \printlength{\widthofM} \\
    \hline
  \end{tabular}
\end{document}

image.png

不知道你如何实现的表格,如果是用了 booktabs,嗯,宏包作者告诉你:

Never, ever use vertical rules.

其实就算是用了 booktabs,也是有办法把竖线贯通的,把 \belowrulesep\aboverulesep 这两个长度设置为 0pt 就可以了。

首先你要确保有这个字体,然后可以用fontsepc 调用这个字体。命令是:
\newfontfamily{<macro>}[<font options>]{<fontname>}
如:

\documentclass{ctexbook}
\usepackage{fontspec} % 其实不用加载,ctex 加载了
\newfontfamily\Arial[Mapping=tex-text]{Arial} % 得确保你有这个字体
\ctexset{
    chapter={name={,},
    number=\arabic{chapter},
    numberformat=\zihao{0}\Arial,
    aftername = {},
    beforeskip = {-20pt},
    afterskip = {10pt}}
}
\begin{document}
\chapter{概述}
\end{document}

效果:
image.png

子标题默认就是在图片正下方啊。如果你得到结果不一样,请给出MWE。

\documentclass{ctexart}
\usepackage{graphicx,subfigure}
\begin{document}
\begin{figure}
  \centering
    \subfigure[子图 a]{              
        \includegraphics[width=4cm]{example-image-a}}
    \hspace{15pt}
    \subfigure[子图 b]{
        \includegraphics[width=4cm]{example-image-b}}
    \caption{路面}
\end{figure}
\end{document}

效果:
image.png

解压后的文件夹看一下readme,用命令行:

tex lastpage.dtx

就能生成 lastpage.sty

逗号最好不要用这种方式来映射,因为这个符号可能会频繁出现在代码段中,不要引起其他问题。你最好还是手动替换掉。

这本来就是写错字,相当于把“孔子曰”写成了“孔子日”,如果这时候你考虑把“日”字映射成“曰”就是在走歪门邪道了。

挺简单的事:
画两个椭圆,连接两条母线。如果想表达遮挡关系就画两条椭圆弧和一个椭圆,其中被遮挡的一部分椭圆弧用虚线表达。

发布
问题