솔루션 유무에 관계없이 시험 문서 클래스를 사용하여 튜토리얼 작성

솔루션 유무에 관계없이 시험 문서 클래스를 사용하여 튜토리얼 작성

저는 학생들을 위한 몇 가지 튜토리얼을 작성하고 싶습니다. 이를 위해 exam문서 클래스와 solution환경을 사용하고 있습니다.

이제 문제는 내가 성명서를 가지고 있다는 것입니다

\printanswers

튜토리얼에 대해서는 댓글을 달고, 솔루션에 대해서는 댓글을 삭제해야 합니다.

한 번에 컴파일할 수 있는 방법이 있고 소스 파일(예: tutorial.tex)이 두 개의 PDF를 생성할 수 있기를 바랐습니다.

  1. tutorial.pdf(솔루션 없음)
  2. tutorialSolution.pdf(솔루션 포함)

다음은 내 소스 코드입니다 -

\documentclass{exam} 
%\printanswers
\usepackage[T1]{fontenc}
\usepackage{pslatex}
 \usepackage[pdftex]{color}  
 \usepackage[pdftex]{graphicx}     

\begin{document}
\begin{questions}

\vskip 0.5 cm \question Question header \vskip 0.5cm
Question text

\begin{solution}
Solution text
\end{solution}

\end{questions}
\end{document}

당신이 제공할 수 있는 도움에 감사드립니다. 가우라브

답변1

이러한 유형의 워크플로를 관리하는 데 사용할 수 있는 한 가지 방법에 대해 제가 염두에 둔 내용은 다음과 같습니다.

3개의 파일을 생성합니다. 첫 번째는 기본 파일입니다 tutorial.tex.

\usepackage[T1]{fontenc}
\usepackage{pslatex}
 \usepackage[pdftex]{color}  
 \usepackage[pdftex]{graphicx}     

\begin{document}
\begin{questions}

\vskip 0.5 cm \question Question header \vskip 0.5cm
Question text

\begin{solution}
Solution text
\end{solution}

\end{questions}
\end{document}

나머지 두 개는 래퍼입니다. 예를 들어 다음과 같습니다 tutorialQuestions.tex.

\documentclass{exam} 
\input{tutorial}

그리고 tutorialSolutions.tex:

\documentclass{exam} 
\printanswers
\input{tutorial}

그런 다음 다른 버전을 덮어쓰지 않고 별도로 tutorialSolutions.tex컴파일 할 수 있습니다 . tutorialQuestions.tex또는 스크립트를 사용하여 이를 관리할 수도 있습니다. (이를 수행하는 방법은 OS에 따라 다릅니다.) TeX와 함께 다양한 도우미를 사용하여 많은 작업을 수행하거나 IDE에서 작업을 자동화하도록 하는 것도 가능합니다. 그러나 위의 내용은 기본 아이디어이며 선호하는 도구에 가장 적합한 방식으로 포함됩니다.

답변2

하는 동안CFR님의 대답은 매우 훌륭하고 일반적입니다. 나 역시 이 문제에 부딪혔고 하나의 IDE를 사용하여 구체적인 솔루션을 제시하고 싶었습니다.TeXstudio.

이를 달성하기 위해 나는 다음을 정의했습니다.사용자 명령( Preferences > Build > User Commands) 처럼

"/path/to/script/compile-exam.py" %.tex -f | txs:///pdflatex | mv %.pdf %Solutions.pdf | mv %.synctex.gz %Solutions.synctex.gz | "/path/to/script/compile-exam.py" %.tex | txs:///pdflatex | txs:///view-pdf-internal "?m)Solutions.pdf"

compile-exam.py내가 작성한 Python 스크립트는 어디에 있습니까(사용 가능)여기):

from argparse import ArgumentParser
import re
from shutil import copyfile

parser = ArgumentParser()
parser.add_argument('filename')
parser.add_argument('-f', '--forward', action='store_true')

args = parser.parse_args()
copyfile(args.filename, args.filename+'.bak')

basename = re.match(r".+(?=\.tex)", args.filename).group(0)

if args.forward:
    contents = []
    with open(args.filename, 'r') as in_file:
        for line in in_file:
            if r'\printanswers' in line:
                contents.append('\printanswers\n')
            else:
                contents.append(line)
    with open(args.filename, 'w') as out_file:
        for line in contents:
            out_file.write(line)
else:
    contents = []
    with open(args.filename, 'r') as in_file:
        for line in in_file:
            if r'\printanswers' in line:
                contents.append('%\printanswers\n')
            else:
                contents.append(line)
    with open(args.filename, 'w') as out_file:
        for line in contents:
            out_file.write(line)

여기에서 명령( Preferences > Shortcuts > Tools > User) 을 실행하기 위한 키보드 단축키를 정의합니다.


이 키보드 단축키를 사용하면 컴파일러는 내장 뷰어에 솔루션 파일을 생성하고 표시합니다(마지막 편집 위치 등으로 스크롤할 수 있는 기능 포함) exam1.pdf.exam1Solutions.pdf

또한 먼저 호출 python하거나 스크립트를 실행 가능하게 만들고 #!/usr/bin/python첫 번째 줄에 다음과 같은 내용을 추가해야 합니다.

이것은 분명히 일반적인 해결책은 아니며 외부 프로그램을 호출해야 하지만 합당한 시간 내에 훌륭하게 작동합니다.

관련 정보