대화 패키지 사용 시 텍스트 형식 변경

대화 패키지 사용 시 텍스트 형식 변경

사용하는 동안 대화 텍스트의 형식을 지정하고 싶습니다.대화패키지. 이미 스피커를 굵게 만들었으나 할 수 없었습니다.화자의 텍스트 형식 지정. 들여쓰기 없이 텍스트를 상자 안에 넣고 싶습니다.

다음 스크립트를 사용하는 경우:

\documentclass{article}
\usepackage{dialogue}
% bold the speaker name
\renewcommand*\DialogueLabel[1]{%
  \scshape\textbf{#1}:\hfil
}

\begin{document}

\begin{dialogue}
    \speak{Marie} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
    \speak{Marine} What?
\end{dialogue}

단락의 두 번째 줄이 첫 번째 줄과 정렬되지 않은 다음과 같은 결과를 얻습니다.

현재 결과

내가 원하는 것은 다음 형식입니다(기울임꼴 글꼴과 인용문은 선택 사항입니다):

여기에 이미지 설명을 입력하세요

정말 감사합니다!

답변1

원하는 효과를 얻으려면 가 \labelwidth가장 긴 문자 이름의 너비로 설정되도록 대화 환경을 다시 정의하고 를 \leftmargin정확히 그 값에 \labelsep(의 너비를 더한 값으로 설정해야 할 것 같습니다. 이름 라벨과 텍스트 사이의 공백)을 0.5em.

calc패키지의 \widthof{...}명령을 사용하여 가장 긴 문자 이름의 길이를 확인할 수 있습니다. 아래에서는 "Marina"라고 가정하지만 이름이 긴 캐릭터가 있는 경우 명령을 적절하게 변경해야 합니다 \setlength{\widestname}{....

예를 들어:

\documentclass{article}

\usepackage[T1]{fontenc} % necessary for bold small caps
\usepackage{setspace} % for double spacing
\usepackage{dialogue}
\usepackage{calc} % to measure width of widest name
\usepackage{lipsum}% dummy text

\renewcommand*\DialogueLabel[1]{%
  \scshape\textbf{#1}:\hfil
}

% set width of widest name
\newlength{\widestname}
\setlength{\widestname}{%
    \widthof{\textbf{\textsc{Marina}}:}
}

% redefine dialogue environment to use new parameters
\makeatletter
\renewenvironment{dialogue} {%
    \begin{list}{} {%
        \setlength\itemsep{\z@ \@plus .5ex}%
        \setlength{\parsep}{\parskip}%
        \setlength{\rightmargin}{0pt}% no indentation on right; change this if you wish
        \setlength{\labelwidth}{\widestname}% set label to widest width
        \setlength{\labelsep}{0.5em}% space between (longest) name and text
        \setlength{\leftmargin}{\labelwidth}% set margin on left to same width
        \addtolength{\leftmargin}{\labelsep}% plus the label sep
        \defcommand\speak [1] {\item[{##1}]}% define speak command
        \let\makelabel\DialogueLabel
      }%
      \PreDialogue\relax
    }{%
  \end{list}%
  }
\makeatother

\begin{document}
\doublespacing

\lipsum[1][3-9]

\begin{dialogue}

\speak{Maria} \lipsum[2][1-2]

\speak{Marina} \lipsum[1][1-3]

\end{dialogue}

\end{document}

그러면 다음과 같은 출력이 제공됩니다.

이름 뒤에 단락이 있는 대화

각 대화 주위에 이탤릭체와 따옴표도 추가하려면 약간 다른 구문을 사용해야 할 것 같습니다. 두 개의 인수를 사용하도록 정의를 변경 \speak하고 두 번째 인수를 이탤릭체와 따옴표로 묶을 수 있습니다. 즉, 위의 줄을 다음과 같이 변경 \renewenvironment합니다 dialogue.

\defcommand\speak [1] {\item[{##1}]}%

이것에:

\defcommand\speak[2]{\item[{##1}] {\itshape ``{##2}''}}%

그런 다음 이름과 실제 대화 텍스트를 모두 중괄호로 묶어 다음과 같이 대화를 작성해야 합니다.

\speak{Maria}{Nam dui ligula, fingilla \ldots}

\speak{Marina}{Lorem ipsum dolor \dots}

그리고 당신은 이것을 얻을 것입니다.

이탤릭체와 따옴표 포함

스타일적으로는 텍스트에 대해 이름을 오른쪽 정렬하는 것도 고려해 볼 수 있습니다.

\defcommand\speak[2]{\item[\hfill {##1}] {\itshape ``{##2}''}}%

오른쪽 정렬된 이름 사용

대화 패키지는 그렇게 복잡하지 않습니다. 이 시점에서 기본적으로 절반을 다시 작성했습니다. \enuitem대화를 설정하기 위해 이 패키지 없이 그냥 사용하거나 유사한 패키지를 사용하는 것을 고려할 수도 있지만 이는 별도의 주제입니다.

("Marie"를 "Maria"로 바꾼 것 같습니다. 아 글쎄, 솔루션을 시연하는 데는 중요하지 않다고 생각합니다.)

관련 정보