
-output-directory=<some/path>
임시 파일이 작업 디렉터리를 방해하지 않고 후속 빌드에도 사용할 수 있도록 명령줄 옵션을 사용하는 것을 고려하고 있습니다 . 이렇게 하면 불필요한 Dropbox 활동도 많이 제거됩니다.
output-directory
그러나 나는 또한 내 자신의 일부 임시 파일을 생성하므로 명령줄에 지정된 파일에 액세스할 수 있기를 원합니다 .
\OuptutDirectory
그렇다면 아래 MWE에서 임시 파일의 이름을 올바르게 확인할 수 있도록 매크로 값을 어떻게 설정해야 합니까 ?
참고자료:
관련 질문:
암호:
\documentclass[a4paper]{article}
\def\OuptutDirectory{????}% <--- How do I determine this?
\edef\MyTempFile{\OuptutDirectory/\jobname.foo}%
\begin{document}
My temp file is \MyTempFile.
\end{document}
답변1
나는 작업 디렉토리에 다음을 a.tex
포함하는 파일을 설정했습니다.
\newwrite\test
\immediate\openout\test=temp.txt
\immediate\write\test{Hello}
\bye
하위 디렉토리를 만들고 temp
전화했습니다.
pdftex -output-dir=temp a
파일 은 다음 디렉토리 temp.txt
에 생성되었습니다 temp
.
> ls -R .
a.tex temp/
./temp:
a.log temp.txt
pdftex
내가 아는 한 출력 디렉터리 경로를 포함하는 내부에서 액세스할 수 있는 변수는 없습니다 .
물론 \OutputDirectory
명령줄에서 정의를 전달하여 이를 에뮬레이트할 수 있습니다.
pdftex -output-dir=temp "\def\OutputDirectory{./temp}\input a"
답변2
TeX Live 2024부터 시작되는 새로운 솔루션( $TEXMF_OUTPUT_DIRECTORY
)
이름이 지정된 환경 변수에 액세스하면 됩니다 $TEXMF_OUTPUT_DIRECTORY
. 사용 sys_get_shell
:https://tex.stackexchange.com/a/62032/250119. 신용 거래:https://tex.stackexchange.com/a/707351/250119.
사용하는 솔루션currfile-abspath
currfile-abspath
자세히 사용하기https://tex.stackexchange.com/a/54894/250119
(플래그에 관한 참고 사항 참조 ) 다음 사실을 사용하여 출력 디렉토리를 얻는 데 -recorder
사용할 수 있습니다 .\currfileabsdir
- 파일에 쓰면 기본적으로 출력 디렉터리에 기록됩니다.
\input
현재-output-directory
먼저 검색
%! TEX program = xelatex
\documentclass{standalone}
\usepackage[abspath]{currfile}
\begin{document}
\ExplSyntaxOn
% write the content to a temporary file `test.tex`
\iow_new:N \myfile
\iow_open:Nn \myfile {test.tex}
\iow_now:Nn \myfile {
\tl_set:Nx \myoutputdir {\currfileabsdir}
}
\iow_close:N \myfile
% execute the content of that file
\input {test.tex}
% print the obtained output directory path to the PDF
\texttt{\myoutputdir}
\ExplSyntaxOff
\end{document}
그러나 임시 파일이 필요합니다.
메모한 컴파일에 가 있으면 -recorder
다음 컴파일에는 가 없으며 -recorder
변경 사항을 감지하는 것이 불가능하다고 생각합니다.
currfile-abspath
패키지도 잘못되었습니다.
쓰기를 시도하면 \jobname.fls
뭔가 할 수 있지만 Windows에서는 동일한 파일에 여러 번 쓰기가 허용되지 않는 것 같습니다.
한 가지 옵션은 파일 이름을 무작위로 지정하는 것이지만 MiKTeX에서는 작동하지 않으며(레코더 파일은 온라인으로 업데이트되지 않음) 파일 시스템을 복잡하게 만듭니다.
메모충분히 모호한 이름으로 이름을 바꾸고 test.tex
쓰기 전에 파일이 존재하는지 확인할 수도 있습니다. 주의하지 않으면 중요한 파일을 덮어쓸 수도 있습니다.
ps
현재 프로세스의 명령줄 인수를 가져오는 데 사용하는 대체 방법
(일부 권한 문제로 인해 Overleaf에서는 작동하지 않지만 대부분의 POSIX 시스템에서는 작동합니다)
\ExplSyntaxOn
\sys_get_shell:nnN {ps~-o~args=~-p~$(ps~-o~ppid=~-p~$$)} {\cctab_select:N \c_other_cctab} \l_data_tl
\ExplSyntaxOff
그런 다음 \l_data_tl
TeX 프로세스의 명령줄(예: pdflatex --output-directory=/a/b/c main.tex
)로 구성되지만 모든 문자에는 공백을 포함한 "기타" catcode가 포함됩니다.
여기서 출력 디렉터리를 얻기 위해 문자열을 구문 분석하는 것이 표준 연습입니다. 관련 플래그는 다음과 같이 작성될 수 있습니다.
-output-d=/path
-output-d=
-output-dir=/path
--output-dir=/path
--output-directory=/path
-output-d /path
-output-directory /path
--output-directory /path
내가 알 수 있는 한 이것들은 모든 변형입니다( output-directory
보다 길거나 같은 모든 접두사는 output-d
허용됩니다). 예를 들어 확인하지는 않았습니다 texdoc pdftex-changes
.
find
로그 파일을 찾는 데 사용하는 또 다른 대안
인용하다데이비드 칼라일의 답변. 권장되지 않습니다.
또 다른 대안
(완전히 테스트되지 않음)
없으면 -recorder
먼저 파일을 작성한 후 참조하세요.파일의 절대 경로를 얻는 방법(또는 file_get_full_name
expl3의 기능일 수도 있습니다. 확실하지 않습니다.) 파일 경로를 가져옵니다. (실패할 수도 있지만 kpsewhich로 출력 디렉터리를 반드시 검색할 필요는 없습니다.)
관련 답변:
- (외부 명령 대신) TeX에서만 파일을 읽어야 한다면 정상
\file_get:nnN
이거나\input
작동합니다. - 출력 디렉터리가 환경 변수에 있는 경우(참조:이 댓글), 명령에 출력 디렉터리를 전달할 필요가 없으며 다음을 수행하는 것도 가능합니다.환경 변수를 직접 읽으십시오.
- LuaTeX의 경우 직접적인 솔루션이 있습니다.Luatex에서 효과적인 출력 디렉토리를 아는 방법은 무엇입니까?
- 파일을 쓸 경로와 파일을 읽을 경로를 모두 하드 코딩합니다(
openout_any=a
환경 변수 필요). scontents
임시 파일이 전혀 필요하지 않도록 사용하십시오 .https://tex.stackexchange.com/a/513810/250119