如何定义一个“原文”和“注释”分处不同段落的环境?

发布于 2025-02-09 14:04:05

理想的效果是这样:

pdf-1.png

理想情况的描述:

  1. 先排一段古文,另起一段排注释,跳过2cm垂直空白后,再另起一段排古文,再另起一段排注释,跳过2cm垂直空白后,再另起一段排古文,再另起一段排注释……依此类推。
  2. 古文段和注释段都应该支持断页,“【原文】”和“【注释】”这几个字也应该单独成行,但是不应该和它下面的第一行文字分处于不同页面,也就是这几个字不能是页面版心内容的最后一行。
  3. 古文中对于某些字、词、句,需要通过红色来提示,用于表示这是古文中需要解释的重点内容,其后跟着一个上标圆圈序号(不加彩),用于标记待解释内容的顺序,每另起一个新段落,序号就重置为圆圈 1 。
  4. 为了避免改动原文而导致漏改对应的注释,我希望能像脚注那样自动插入注释内容到指定的地方。在我这个需求中,我希望是插入到一个新的段落中。举例来说,我希望能做到类似效果:定义一个命令\parnote{#1}{#2},其中#1是古文中需要解释的词语,就像示例图中的“广陵”,而这个命令会把“广陵”这两个字加上红色后直接排版,其次,#2表示对#1的解释说明,就像示例图中的“今江苏扬州西北”。总的说来,“注释”这一段的内容,我希望它是通过在“原文”这个段落中使用\parnote{#1}{#2}这个命令自动得到。

查看更多

关注者
0
被浏览
239
Sagittarius Rover
Sagittarius Rover 2025-02-09
我要成为Typst糕手/(ㄒoㄒ)/~~

图床/或者说文件床最近挂了...你的mwe我打不开....

尝试了一下:

\documentclass{ctexart}
\usepackage{xcolor}
\usepackage[b5paper,landscape,showframe]{geometry}
\usepackage{needspace}
\usepackage{zhlipsum}
\usepackage{circledtext}
\ExplSyntaxOn    
\clist_new:N \g_my_parnote_clist
\clist_new:N \g_my_parnotetxt_clist
\makeatletter
\newcounter{parnotecnt}
\NewDocumentCommand{\parnote}{O{red} m m}{%
    \refstepcounter{parnotecnt}
    \unskip\textcolor{#1}{#2}\hbox{\@textsuperscript{\normalfont\circledtext[charf=\small]{\arabic{parnotecnt}}}}\unskip
    \clist_gput_right:Nn \g_my_parnote_clist {#2}
    \clist_gput_right:Nn \g_my_parnotetxt_clist {#3}
}
\makeatother     
\NewDocumentEnvironment{myenv}{+b}{%
    \setcounter{parnotecnt}{0}%
    \clist_clear:N \g_my_parnote_clist
    \clist_clear:N \g_my_parnotetxt_clist
    \needspace{\baselineskip}{\bfseries~【原文】}\par
    {#1} \par%\vspace{5pt}
    % \clist_use:Nn \g_my_parnote_clist {,}
    \clist_if_empty:NF {\g_my_parnote_clist}{%
         \needspace{.8\baselineskip}{\bfseries~【注释】}\par
         \int_step_inline:nn {\clist_count:N \g_my_parnote_clist}{%
            \noindent{##1}.~\clist_item:Nn \g_my_parnote_clist {##1}:~\clist_item:Nn \g_my_parnotetxt_clist {##1}~\par
         }
    }\vspace{2cm}%
}{}
\ExplSyntaxOff
\begin{document}
\begin{myenv}%
    \zhlipsum[2]
    测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本
\end{myenv}
\begin{myenv}%
    \zhlipsum[2]
    测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本测试文本\parnote{红色注释}{注释内容}测试文本\parnote[cyan]{蓝色注释}{注释内容}测试文本
    \zhlipsum
\end{myenv}

\begin{myenv}
    如果文段中没有\texttt{parnote},则不会输出【注释】\par
    \zhlipsum[2]
\end{myenv}

\end{document}

image.png

不太确定还有没有什么bug...

2 个回答
李震_DUT
李震_DUT 5天前
好好学习

请问如何修改原文中脚标(圈1)的大小?

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览