줄 채우기 규칙에 관한 변칙 및 질문

줄 채우기 규칙에 관한 변칙 및 질문

검은색 직사각형으로 선을 채우는 명령을 만들었습니다. 이라고 하며 \fullrule아래 코드에서 찾을 수 있습니다.

이 MWE와 관련하여 몇 가지 질문이 있습니다.

\documentclass[10pt]{article}
\usepackage[a4paper]{geometry}

\newlength{\mylift}
\setlength{\mylift}{-10pt} % MARK2
\addtolength{\mylift}{-1ex}
\addtolength{\mylift}{\baselineskip}

\newcommand{\fullrule}{%
    {\hspace*{0pt}\leaders\hbox{\rule[\mylift]{1pt}{10pt}}\hfill}% % MARK 1
    \hspace*{0pt}}

\begin{document}
aaa

\fullrule

aaa\fullrule{}\\
\fullrule{}\\
\fullrule{}

\fullrule

aaa\fullrule{}aaa

\fullrule{}\\
\fullrule{}aaa\\
\fullrule
\end{document}

이것이 생산되는 것입니다:

완전한 규칙

  1. 내 문서의 첫 번째 줄이 들여쓰기된 이유는 무엇입니까? (그렇습니다. 이것이 가장 작은 문제입니다.)
  2. 앞에 선행 문자가 없는 줄에서 작동하도록 하려면 "전체 부분" \hspace*{0pt}바로 앞 과 뒤에 추가해야 했습니다 . 왜? (시도를 통해 알아내는 데 오랜 시간이 걸렸기 때문에 이해하고 싶습니다.)\leaders\leaders\fullrule
  3. \fullrule10pt 대신 실제 글꼴 크기( % MARK 1위 코드 참조)를 사용하고 실제 글꼴 크기( % MARK 2위 코드 참조) 를 사용하여 규칙의 증가를 계산하도록 명령을 다시 작성할 수 있는 방법이 있습니까 ?

감사해요!

답변1

\newcommand{\fullrule}{%
  \noindent\null\leaders\hrule height \dimexpr\ht\strutbox-\fboxrule\relax
                          depth  \dimexpr\dp\strutbox-\fboxrule\relax\hfill
  \null}

lockstep 설명에 따르면 \fullrule단락을 시작하므로 들여쓰기가 됩니다.

새로운 정의가 무엇을 하는지 살펴보겠습니다:

  1. \noindent들여쓰기 없이 단락을 시작합니다. 이미 단락 안에 있으면 아무 일도 하지 않습니다.

  2. \null\fullrule줄의 시작 부분에서 삼키지 않게 하는 보이지 않는 상자를 놓습니다 .

  3. 상자를 반복하는 대신 \leaders\hruleTeX의 기능을 사용합니다. 끝에 지정된 공간을 규칙으로 채웁니다(이 경우 \hfill).

  4. \null단락 끝에서 리더가 무시되는 것을 방지합니다(TeX는 \unskip단락 끝을 스캔할 때 항상 그렇습니다).

포인트 2와 4의 경우 공백 대신 무언가로 공간을 채우는 것 외에 리더가 접착제와 동일하게 취급된다는 점을 아는 것이 중요합니다.

사양 \hrule에서는 규칙이 스트럿만큼 높고 깊어야 한다고 TeX에 알려줍니다(스스로 조정할 수 있는 작은 수정 사항 포함). 따라서 규칙의 높이와 깊이는 현재 기준선 건너뛰기에 따라 달라집니다.

답변2

\leaders수직 모드에서는 수직 접착제가 필요합니다. 따라서 수직 모드에서는 \leaderswith를 \hfill사용할 수 없습니다. 새 단락을 시작할 때 세로 모드가 됩니다. 따라서 먼저 수직 모드를 종료해야 합니다. 뿐만 아니라 \leavemode또는 (LaTeX 커널에서 빈 수평 상자로 정의됨 ) \hspace*과 같은 다른 보이지 않는 요소를 사용하여 이 작업을 수행할 수도 있습니다 .\null\hbox{}

\hfillTeX은 단락 끝의 마지막 수평 공백을 제거하기 때문에 줄 끝에서 아무것도 채우지 않습니다. 보이지 않는 자료를 다시 사용하거나 수평 공간을 하나 더 사용하거나( \hspace별표가 없어도) 또는 \kern0pt(비슷한 경우 LaTeX 커널에서 수행된 작업) 예를 들어 \dotfill또는 을 사용하여 이를 피할 수 있습니다 \hrulefill.

선의 높이와 깊이를 감지하려면 \ht\strutbox및 를 사용할 수 있습니다 \dp\strutbox.

다음은 LaTeX 커널의 수정된 버전에 대한 제안입니다 \hrulefill(규칙의 높이와 깊이만 추가되었습니다).

\newcommand{\fullrule}{%
  \leavevmode
  \leaders\hrule height\ht\strutbox depth\dp\strutbox\hfill\kern0pt}%

이 버전은 단락 들여쓰기를 제거하지 않습니다. 단락 들여쓰기를 제거하려면 egreg의 솔루션을 사용하십시오.

관련 정보