如何从当前位置到文本区域的右侧绘制一条规则?

如何从当前位置到文本区域的右侧绘制一条规则?

我想创建一个自定义命令,允许我从当前位置到文本区域的右侧绘制一条线。这与类似,\noindent\rule{\linewidth}{0.1pt}只是线宽在规则到达文本区域的右侧之前确定

\documentclass[a4paper]{book}

\usepackage{calc}
\newlength{\widthWidest}
\setlength{\widthWidest}{\widthof{Text }}

\usepackage{geometry}
% BEGIN_FOLD
    
    \geometry{twoside=false, showframe=true}
    \geometry{inner=10mm, outer=10mm, includemp=false}

% END_FOLD

\usepackage{tikz}

\newcommand{\ruletoright}[1]{%
    \tikz[] {%
        %
        \draw [color=red, line width=#1]
            (0, 0)
            --
            (\dimexpr \textwidth - \widthWidest + 1pt \relax, 0);
        %
    }
}

\begin{document}
    
    \noindent%
    \smash{\rlap{\rule{\linewidth}{0.1pt}}}%
    Text \ruletoright{0.1pt}

\end{document}

答案1

只是 TeX。

\documentclass[a4paper]{book}
\usepackage{geometry}
\usepackage{xcolor}

\geometry{
  a6paper,% just to have a smaller picture
  twoside=false,
  showframe=true,
  inner=10mm,
  outer=10mm,
  includemp=false
}

\newcommand{\ruletoright}[1]{%
  \leavevmode
  \begingroup
  \color{red}%
  \leaders\hrule height #1\hfill\null
  \endgroup
}

\begin{document}

\noindent    
Text\ruletoright{1pt}% to better see it

\noindent
Other text.

\end{document}

在此处输入图片描述

答案2

如果您不需要特殊线条,@egreg 的非 tikz 解决方案可能是最好的。如果您确实需要特殊线条,这里有一个tikz解决方案。

该命令\ruletoright[<tikz options>]可以放置在文档中的任何位置(甚至是一行的中间),并将使用current page text area包提供的节点绘制所需的线条tikzpagenodes

选项包括颜色、线条样式、粗细等。您还可以包含具有不同样式的多条线条(使用 shift)。

您必须编译两次。

在此处输入图片描述

\documentclass{article}

\usepackage{tikz, lipsum}
\usepackage{tikzpagenodes}

\newcommand{\ruletoright}[1][]{\tikz[remember picture, overlay, #1]
    {\node(A){};\draw(A.center)--(A-|current page text area.east);}}

\begin{document}

\noindent\lipsum[1][1]\ruletoright[red, very thick]\ruletoright[red, very thick]

\noindent\lipsum[1][5]\ruletoright[blue, thick, dashed, yshift=1mm]

\noindent\lipsum[1][6]\ruletoright[blue, semithick, yshift=1mm]\ruletoright[red, semithick]

\noindent\lipsum[1][3]\ruletoright[orange, very thick] \lipsum[1][4]\ruletoright[yshift=.5ex, thick, ->]

\end{document}

相关内容