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

注册于 6年前

回答
89
文章
0
关注者
4

可以换一个思路,用 csvsimple 结合 tabularray 来完成这个任务。本来你这种长表格就不会自己手动敲入内容,更多是从文件读取,不妨在 csv 文件里加一列指定相应颜色。代码示例如下:

\documentclass{ctexart}
\begin{filecontents*}{temp.csv}
cellcolor,city,country,property
azure9,华盛顿,美国,首都
azure9,洛杉矶,美国,大城市
white,东京,日本,首都
azure9,莫斯科,俄罗斯,首都
\end{filecontents*}
\usepackage{tabularray}
\usepackage{csvsimple-l3}
\usepackage{xcolor}
\begin{document}
\begin{table}
  \caption{测试表}\label{tab:temp}
  \csvreader[
    head to column names,
    tabularray={
      colspec = {X[1,l,h]  X[1,l,h]  X[3,l,h]},
      hline{1,Z}=1.2pt,
      hline{2}=0.8pt,
      cell{2}{2}={r=2}{m,l}
    },
    table head={\textbf{城市} & \textbf{国家} & \textbf{性质}\\}
  ]{temp.csv}{}{
    \SetRow{\cellcolor} 
    \city & \country & \property
  }
\end{table}
\end{document}

效果:
dbbc2314684e14c9926ea0b1bd581ef7.png

如果颜色那一列你想操作得简单一点,那么就用个简单字符,然后用 csvsimple 做判断,具体要看csvsimple 的手册。

我细看了你的例子,就这个例子而言,还需要用些权宜之计,主要问题在于:

  1. csvsimple 没有给 longtblr[<option>] 参数的接口,表格标题要自己处理。
  2. 单元格中含 , 字符,标准的 csv 是将单元格字符串用 "" 包裹,但 csvsimple 不支持,可能会导致列错误,因此要用其他不包含的字符作为分隔符,比如 |,但这样的 csv 在 Microsoft Excel 中修改处理就比较麻烦了。
  3. tipa 的音标字符通过 csvsimple 处理会出错,这里用了\newsavebox \sbox\usebox 处理(没去深究,权宜之计)。

这一段的代码如下:

\documentclass{ctexart}
\usepackage{tabularray}
\usepackage{csvsimple-l3}
\usepackage{xcolor}
\usepackage{tipa}
%%% 因为你这里用到了 comma 作为标点符号,如果是严格的 csv 将用 "" 包裹含 comma 的字符串
%%% 但 csvsimple 并不支持这样的用法,所以这里文件用 | 作为分隔符 
%%% 不过这样 Microsoft Excel 就不支持了。这些细节上的困难要自己去克服。 
\begin{filecontents*}{PfN.csv}
ccolor|Meaning|Prefixes|Example
azure9|{a half \\ $\frac{1}{2}$} |semi- |{semilunar valve 半月瓣\\  (lun/o: moon; -ar: pertaining to)}
azure9|                          |hemi- |{hemisphere \\ hemiplegia 半瘫\\  (-plegia/\usebox{\plegia}/: paralysis)}
white |{one,single \\ 1}         |mono- |{monocyte 单核细胞}
white |                          |uni-  |{unicellular 单细胞的}
azure9|{two \\ 2}                |bi-   |{bicuspid 二尖瓣的 \\  (cusp/i: point)}
azure9|                          |di-   |{dioxide 二氧化物 \\ diplegia 双侧瘫痪}
white |double                    |dipl/o|{diploid n.【生】二倍体;(结晶)偏方24面体 adj.二倍体的(含有两套染色体)}
azure9|{three \\ 3}              |tri-  |{triplet \\ triceps 三头肌 \\  (-ceps: head)}
white |{four \\ 4}               |quadr-|quadrant
white |                          |tetra-|tetracycline/\usebox{\tetracycline}/ 四环素
azure9|many                      |multi-|{multipara /\usebox{\multipara}/ 经产妇 \\  (-para: to bring forth to, bear)}
azure9|                          |poly- |polycystic kidney 多囊肾
\end{filecontents*}
%%% 有几个 tipa 字符好像没法通过 csvsimple 中处理,这里用了权宜之计
\newsavebox\plegia
\sbox\plegia{\textipa{"pli:\textdyoghlig I@}}
\newsavebox\multipara
\sbox\multipara{\textipa{m2l"tIp@r@}}
\newsavebox\tetracycline
\sbox\tetracycline{\textipa{""tetr@"saIklm}}

\begin{document}
%%% 由于 csvsimple 没有给 longtblr 的 option 参数的接口
%%% 长表格的标题要用这种黑科技处理一下,用完好像要恢复成 normal
\DefTblrTemplate{caption-text}{empty}{Prefixes for Numbers}
\SetTblrTemplate{caption-text}{empty}
%%% 下面使用 csvsimple
\csvreader[
  head to column names,
  separator=pipe,
  long tabularray={
    colspec = {X[1,l,h]  X[1,l,h]  X[3,l,h]},
    rowhead = 1, rowfoot = 0,
    column{2}={font=\bfseries},
    hline{1,Z}=1.2pt,
    hline{2}=0.8pt,
    cell{2,4,6,10,12}{1,1,1,1,1}={r=2}{m,l}
  },
  table head={\textbf{Meaning} & \textbf{Prefixes} & \textbf{Example}\\}
]{PfN.csv}{}{
  \SetRow{\ccolor} 
  {\Meaning} & \Prefixes & {\Example}
}
%%% 恢复
\SetTblrTemplate{caption-text}{normal}
\end{document}

效果:
image.png

瞄了一眼这个所谓的模板,模板水平烂出天际了。用 table* 来排标题、摘要是非常奇葩的做法。如果非要用这个模板投稿,就像它那个bak 文件里写的一样,table* 的环境里控制好写满一页,然后用 \clearpage 新开一页再写正文吧。

实在无力吐槽了,这是在用LaTeX 以 Word 的蠢方法来 cosplay Word,Word 其实有很聪明的用法,但是这个模板的作者显然也不知道,他偏偏要挑最蠢的方法。

跨页位置最后定稿时自己手动分别合并吧。跨页长表格其实就不太应该合并行单元格。

一个恶心但是治标的方法是画两遍,一遍是双线,一遍是单线,调整好双线间距,单线在双线后面画即可。

\begin{tikzpicture}
  \draw[double distance =1.2pt,name](0,0)rectangle(1,1);
  \draw(0,0)rectangle(1,1);
\end{tikzpicture}

image.png

虽然已经有最佳答案了,我也来补充一个治标的方法,需要保证连续的线可以使用双线 double 绘制,选项 [draw = white, double=black,double distance =0.4pt](当然如果图线颜色和底色并非黑白的时候,以及线宽非默认时要自己调整),例:

\begin{tikzpicture}
        \draw(0,0)--(1,1);
        \draw[draw=white,double=black,double distance =0.4pt](0,1)--(1,0);
    \end{tikzpicture}

image.png

itemize 这类列表放到minipage里吧,可以治标。

\documentclass{article}
\usepackage{ctex}
\usepackage{tabularray}
\def\tablstbox{
  \begin{minipage}{15em}
  \begin{itemize}
    \item 了解光栅的概念,分类;
    \item 掌握利用光的叠加原理分析计算光栅衍射因子的基本方法,理解光栅衍射因子定义的衍射光强度分布特征;
    \item 了解光栅光谱的概念,理解光谱线的角宽度、光栅的分辨率、角色散本领;
  \end{itemize}
\end{minipage}
}

\begin{document}
\begin{tblr}{hlines,vlines,colspec={cX[c]X[2,l]}}
\SetCell[r=3]{m} 教学目标&知识目标&\tablstbox\\
&能力目标& 能力\\
&素质目标(含课程思政、国际视野)& 素质 \\
\end{tblr}
\end{document}

效果

这种样式不建议用enumerate,用 itemize 更好一些,引线和标签重合了也不怕。

\documentclass{ctexart}
\usepackage{enumitem}
\usepackage{tcolorbox}
\tcbuselibrary{skins,breakable,raster,listings,xparse}
\tcolorboxenvironment{itemize}{blanker,breakable,
before skip=8pt,after skip=8pt,
borderline west={0.5pt}{5.5mm}{red}}
\begin{document}
    \begin{itemize}
        \item 第一段内容
        \item 第二个内容
        \item 第三个内容
    \end{itemize}
\end{document}

image.png

你所看到的很多数学书中的平面角度单位度、分、秒与数字之间有空隙,应该是不符合国家标准和ISO 国际标准的,忽略他们的作法,按国家标准和ISO标准来。
image.png
上图引自中华人民共和国国家标准《有关量、单位和符号的一般原则》(GB/T 3103—93)第 3.4 节。

是这个效果么?

\documentclass{ctexart}
\usepackage{linegoal}
\newlength\goalindent
\newcommand\hindentpar[1]{%
  \setlength\goalindent{\dimexpr\linewidth-\linegoal\relax}%
  \hangindent\goalindent%
  #1}
\begin{document}
劳仑衣普桑,认至将指点效则机,最你更枝。想极整月正进好志次回总般,段然取向使张规军证回,世市总李率英茄持伴。

第二段:\hindentpar{水厂共当而面三张,白家决空给意层般,单重总歼者新。每建马先口住月大,究平克满现易手,省否何安苏京。两今此叫证程事元七调联派业你,全它精据间属医拒严力步青。}

\noindent
这回开始不缩进写第三段:\hindentpar{她己道按收面学上全始,形万然许压己金史好,力住记赤则引秧。处高方据近学级素专,者往构支明系状委起查,增子束孤不般前。}

你要的是这个效果么?
\end{document}

image.png

用 minipage 并排放。

\documentclass{article}
\begin{document}
\begin{table}
\begin{minipage}{0.5\linewidth}
\centering
\caption{Sample 1}
\begin{tabular}{|c|c|c|}
\hline
1 & 2 & 3\\ \hline
1 & 2 & 3\\ \hline
1 & 2 & 3\\ \hline
\end{tabular}
\end{minipage}%
\begin{minipage}{0.5\linewidth}
\centering
\caption{Sample 1}
\begin{tabular}{|c|c|c|}
\hline
1 & 2 & 3\\ \hline
1 & 2 & 3\\ \hline
1 & 2 & 3\\ \hline
\end{tabular}
\end{minipage}
\end{table}
\end{document}

你用错了。

  1. \date 是设定日期的命令,你应该用 \today
  2. \author 是设定作者的命令,不能用在这里。
\documentclass{ctexart}
\usepackage{fancyhdr}
\pagestyle{fancy}
% \fancyhf{}
\lhead{\myauthor}
\rhead{152xxxxxxxx}
\chead{\today}
\cfoot{\thepage}
\title{xxxxx}
\author{Name}
\makeatletter
\let\myauthor\@author
\makeatother
\begin{document}
Happy \LaTeX ing!
\end{document}

要看你怎么配置的 VS Code 了,可以给你一个配置(没配置 pdf viewr 的部分,自己选择吧)。

{
    "latex-workshop.latex.tools": [
        {
            "name": "latexmk_rconly",
            "command": "latexmk",
            "args": [
                "%DOCFILE%"
            ]
        }
    ],
    "latex-workshop.latex.recipe.default": "first",
    "latex-workshop.latex.recipes": [
        {
            "name": "latexmk",
            "tools": [
                "latexmk_rconly"
            ]
        }
    ],
 }

其实,没必要配置那么多 tools 和 recipes,一个最常用的 latexmk 自动编译工具就可以了,在 C:\latexmk\LatexMK 这个文件(没有就自己创建一个。)中修改 latexmk 的默认配置,比如:

$pdf_mode = 5;
$xelatex = "xelatex -file-line-error -halt-on-error -interaction=nonstopmode -no-pdf -synctex=1 %O %S";
$xdvipdfmx = "xdvipdfmx -E -o %D %O %S";
$bibtex_use = 1.5;
$clean_ext = "hd nav snm xdv app listing vrb run.xml";

文件里参数的含义可以看一下 latexmk 的文档:

texdoc latexmk

工作状态下,直接 ctrl+alt+B 就进行 latexmk 自动编译了。如果需要用其他引擎,或者用特殊的参数,那么可以把这个文件复制到项目文件夹下,改名为latexmkrc.latexmkrc,再修改一下配置内容,采用相同方式编译即可。

如果是开发测试,不需要整个编译链,只需要一步或几步,那么 ctrl+ ` 直接调出编辑器命令行进行命令行编译,如果有这种需求,命令行编译应该不在话下了。

ctex 宏包太老了,赶紧升级发行版和宏包。
你不会用的是 CTEX 套装吧?

具体图片放上来,mwe 要给出来。

  1. 610 和 200 这个位置准么?
  2. 先给 bb 框再指定宽度,先后顺序有讲究的;
  3. \usepackage{graphicx} 看看有没有用选项[dvipdfmx],这些老的编译方式要指定驱动的,默认驱动是 [dvips]
  4. 其实你给\includegraphics{xxx} 语句外面套个 \fbox 就能发现其实图肯定是居中对齐的,很大概率是你取的位置不对。

发布
问题