
나는 다음을 가지고 있습니다 :
\documentclass{article}
\usepackage{calc, expl3, xparse}
\makeatletter\ExplSyntaxOn
\def\globalsettoheight{\@gsettodim\ht}
\def\globalsettodepth {\@gsettodim\dp}
\def\globalsettowidth {\@gsettodim\wd}
\def\@gsettodim#1#2#3{%
\setbox\@tempboxa\hbox{{#3}}\global#2#1\@tempboxa
\setbox\@tempboxa\box\voidb@x}
\newlength\length@interviewer
\newlength\length@interviewee
\newlength\length@sep
\settowidth\length@sep{:\hspace{1em}}
\NewDocumentCommand\interviewer { m m } {
\globalsettowidth \length@interviewer { #1 }
% Display the full name and then globally redefine to initials,
% updating the length accordingly.
\def \@interviewer {
#1
\global\def \@interviewer { #2 }
\globalsettowidth \length@interviewer { #2 }
}
}
\NewDocumentCommand\interviewee { m m } {
\globalsettowidth \length@interviewee { #1 }
% Display the full name and then globally redefine to initials,
% updating the length accordingly.
\def \@interviewee {
#1
\global\def \@interviewee { #2 }
\globalsettowidth \length@interviewee { #2 }
}
}
\NewDocumentEnvironment { question } { m } {
\par\noindent
\hspace{-\length@interviewer}
\hspace{-\length@sep}
\textsc{\@interviewer}:
\hspace{1em}
#1
\vspace{1ex}
\par\noindent
\hspace{-\length@interviewee}
\hspace{-\length@sep}
\textsc{\@interviewee}:
\hspace{1em}
\ignorespaces
} {
\vspace{3ex}
}
\ExplSyntaxOff\makeatother
\interviewer{Jane Doe}{JD}
\interviewee{John Smith}{JS}
\setlength\parindent{3em}
\usepackage{mwe}
\begin{document}
\begin{question}{Sample Question?}
\lipsum[1]
\end{question}
\begin{question}{Sample Question?}
\lipsum[2]
\end{question}
\begin{question}{Sample Question?}
\lipsum[3]
\end{question}
\end{document}
이는 다음과 같은 출력을 제공합니다.
첫 번째 사용이 잘못 정렬된 이유는 무엇입니까? 추가 공간은 어디에서 오는가? (눈이 아프면 코드를 자유롭게 expl3
수정하세요. 이 문제를 알아낼 수 있도록 더 읽기 쉽게 코드를 수정해야 했습니다.)
답변1
인터뷰 진행자와 인터뷰 대상자의 형식이 지정되지 않은 버전을 저장하고 있지만 \textsc
문서에는 형식이 지정된 버전( 사용)을 설정하고 있습니다. 또한 이 형식화되지 않은 버전을 사용하여 길이를 측정하는데 이로 인해 정렬 오류가 발생합니다.
\interviewer
다음 과 같은 정의를 사용하여 이 문제를 해결했습니다 \interviewee
.
\NewDocumentCommand\interviewer { m m } {
\globalsettowidth \length@interviewer { \scshape #1 }% Updated with formatting
% Display the full name and then globally redefine to initials,
% updating the length accordingly.
\def \@interviewer {
#1
\global\def \@interviewer { #2 }
\globalsettowidth \length@interviewer { #2 }
}
}
\NewDocumentCommand\interviewee { m m } {
\globalsettowidth \length@interviewee { \scshape #1 }% Updated with formatting
% Display the full name and then globally redefine to initials,
% updating the length accordingly.
\def \@interviewee {
#1
\global\def \@interviewee { #2 }
\globalsettowidth \length@interviewee { #2 }
}
}
그러나 면접관과 면접 대상자의 형식을 각각 저장하는 적절한 매크로를 정의하는 것이 좋습니다. 예를 들어,
\providecommand{\@interviewerfont}{\normalfont}
\providecommand{\@intervieweefont}{\normalfont}
\newcommand{\interviewerfont}[1]{%
\renewcommand{\@interviewerfont}{#1}}
\newcommand{\intervieweefont}[1]{%
\renewcommand{\@intervieweefont}{#1}}
\interviewer
그런 다음 이를 및 정의 의 적절한 위치에 배치합니다 \interviewee
.