5 如何绘制一个能够指定长度的且能够换行的hrule?

发布于 2025-04-19 16:48:48

如题,想做一个练习册,里面有填空题,编译结果是这样的:

image.png

  1. 答题线的前后行文都不能增减一字,而默认两端对齐且\hrule命令生成受限水平盒子无法换行,所以,第(1)题超出左栏栏宽的答题线,必须能够换行,但是我总不能每次都去数还有几个字的水平距离够我使用,所以这件事需要TeX帮我完成;
  2. 第(2)、(3)两题的答题线虽然被放在分栏内,没有超出栏宽,但\hrule不能换行导致前后行中字数过少,所以两端对齐条件下文字间距变得松散,极不美观,所以希望上下两行的能够换行的答题线长度之和是定值,暂定为9em,考虑到通用性,希望可以指定任意合理的长度;
\documentclass[UTF8]{ctexart}%pdflatex编译
\usepackage[showframe,margin=1in]{geometry}
\usepackage{enumitem}
\setlist[enumerate]{nosep,labelsep=0pt,leftmargin=2em}
\usepackage{multicol}
\setlength{\columnseprule}{.4pt}
\setlength{\columnsep}{1cm}
\begin{document}

\noindent\textbf{16. }补写出下列句子中的空缺部分。(6分)

\begin{multicols}{2}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    王湾《次北固山下》的名句“\rule{9em}{.4pt},\rule{9em}{.4pt}”,描写时序交替中的景物,暗示着时光流逝,蕴含着自然理趣。
    \item 
    小慧为朋友家的农家乐餐厅写宣传横幅,直接使用了陆游《游山西村》里的“\rule{9em}{.4pt},\rule{9em}{.4pt}”两句诗,朋友看了觉得很贴切。
    \item 
    行至群山深处,见到一挂瀑布飞泻而下,水石激荡,轰鸣作响,于老师回头对学生们说:“这不就是古诗中写的‘\rule{9em}{.4pt},\rule{9em}{.4pt}’嘛!”
\end{enumerate}

\end{multicols}

\noindent\textbf{参考答案:}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    海日生残夜\quad 江春入旧年
    \item 
    山重水复疑无路\quad 柳暗花明又一村
    \item 
    飞流直下三千尺\quad 疑是银河落九天(飞湍瀑流争喧豗\quad 砯崖转石万壑雷)
\end{enumerate}

\end{document}

查看更多

关注者
0
被浏览
301
2 个回答
雾月
雾月 2025-04-19
这家伙很懒,什么也没写!
\documentclass[UTF8]{ctexart}%pdflatex编译
\usepackage[showframe,margin=1in]{geometry}
\usepackage{enumitem}
    \setlist[enumerate]{nosep,labelsep=0pt,leftmargin=2em}
\usepackage{multicol}
    \setlength{\columnseprule}{.4pt}
    \setlength{\columnsep}{1cm}

\makeatletter
\newcommand\brule[3][\z@]{\leavevmode
  {\setlength\@tempdima{#2}\setlength\@tempdimb{#1}\setlength\@tempdimc{#3}%
   \@tempcnta=\fpeval{ceil(\@tempdima/5pt)}
   \kern\z@
   \loop\ifnum\@tempcnta>\z@
     \vrule \@width 5pt \@height \@tempdimc \@depth -\@tempdimb \hskip\z@skip
     \advance\@tempcnta\m@ne
   \repeat \unskip
}}
\makeatother
\begin{document}

\noindent\textbf{16. }补写出下列句子中的空缺部分。(6分)

\begin{multicols}{2}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    王湾《次北固山下》的名句“\brule{9em}{.4pt},\brule{9em}{.4pt}”,描写时序交替中的景物,暗示着时光流逝,蕴含着自然理趣。
    \item 
    小慧为朋友家的农家乐餐厅写宣传横幅,直接使用了陆游《游山西村》里的“\brule{9em}{.4pt},\brule{9em}{.4pt}”两句诗,朋友看了觉得很贴切。
    \item 
    行至群山深处,见到一挂瀑布飞泻而下,水石激荡,轰鸣作响,于老师回头对学生们说:“这不就是古诗中写的‘\brule{9em}{.4pt},\brule{9em}{.4pt}’嘛!”
\end{enumerate}

\end{multicols}

\noindent\textbf{参考答案:}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    海日生残夜\quad 江春入旧年
    \item 
    山重水复疑无路\quad 柳暗花明又一村
    \item 
    飞流直下三千尺\quad 疑是银河落九天(飞湍瀑流争喧豗\quad 砯崖转石万壑雷)
\end{enumerate}

\end{document}

image.png

略微改进版:

\newcommand\brule[3][\z@]{\leavevmode
  {\setlength\@tempdima{#2}\setlength\@tempdimb{#1}\setlength\@tempdimc{#3}%
   \@tempcnta=\fpeval{ceil(\@tempdima/5pt)} \@tempdima=\dimexpr5pt/\@tempcnta\relax\relax
   \ifnum\@tempcnta>\z@
     \loop\ifnum\@tempcnta>\z@
       \vrule \@width 5pt\@height\@tempdimc \@depth-\@tempdimb \hskip\z@\@minus\@tempdima\relax
       \advance\@tempcnta\m@ne
     \repeat
   \unskip\fi
}}
Sagittarius Rover
Sagittarius Rover 2025-04-21
我要成为Typst糕手/(ㄒoㄒ)/~~
希望上下两行的能够换行的答题线长度之和是定值,暂定为9em,考虑到通用性,希望可以指定任意合理的长度

不完全符合OP的需求,但也许可以借用xeCJkfntef提供的hidden选项,用多个之间的间隙来实现自动换行。

\documentclass{ctexart}
\usepackage[showframe,margin=1in]{geometry}
\usepackage{enumitem}
\setlist[enumerate]{nosep,labelsep=0pt,leftmargin=2em}
\usepackage{multicol}
\setlength{\columnseprule}{.4pt}
\setlength{\columnsep}{1cm}
\usepackage{xeCJKfntef}
\newcommand{\gentext}[2][啊]{%
    \ifnum#2>0\relax%
        #1\gentext{\numexpr#2-1}\unskip%
    \fi%
}
\newcommand*{\myrule}[2][.4pt]{%
    \CJKunderline[hidden,thickness=#1]{\gentext{#2},\gentext{#2}}
}
\begin{document}

\noindent\textbf{16. }补写出下列句子中的空缺部分。(6分)

\begin{multicols}{2}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    王湾《次北固山下》的名句“\myrule{5}”,描写时序交替中的景物,暗示着时光流逝,蕴含着自然理趣。
    \item 
    小慧为朋友家的农家乐餐厅写宣传横幅,直接使用了陆游《游山西村》里的“\myrule{7}”两句诗,朋友看了觉得很贴切。
    \item 
    行至群山深处,见到一挂瀑布飞泻而下,水石激荡,轰鸣作响,于老师回头对学生们说:“这不就是古诗中写的‘\myrule{9}’嘛!”
\end{enumerate}

\end{multicols}

\noindent\textbf{参考答案:}

\begin{enumerate}[label=(\arabic{enumi})]
    \item 
    海日生残夜\quad 江春入旧年
    \item 
    山重水复疑无路\quad 柳暗花明又一村
    \item 
    飞流直下三千尺\quad 疑是银河落九天(飞湍瀑流争喧豗\quad 砯崖转石万壑雷)
\end{enumerate}

\end{document}

image.png

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览