
LaTeX 변수에 밑줄이 있는 파일 이름이 있는 CSV 파일을 효율적으로 읽는 방법을 생각 중입니다. 나는 원시 변수를 변수로 읽은 input
다음 pgffor
루프에서 항목 등을 조작하는 것이 최적이 아닐 수 있다고 생각합니다. 변수에 밑줄을 읽을 때 밑줄을 동시에 이스케이프 처리할 수 있는지 생각하고 있습니다. 암호
\documentclass{article}
\usepackage{pgffor}
\newcommand{\mylist}{\input{/home/masi/filelist.csv}}
\begin{document}
\mylist
\end{document}
파일 목록.csv
IMG_20161215_081851.jpg,
IMG_20161215_090559.jpg,
IMG_20161215_091308.jpg
XeLaTeX로 출력
! Missing $ inserted.
<inserted text>
$
l.1 IMG_
20161215_081851.jpg,
?
)
스레드 기반 의사코드
암호
\documentclass{article}
\usepackage{pgffor}
% TODO here apply escape on a list; what is the good way here?
% http://tex.stackexchange.com/q/58689/13173
\immediate\openout\tempfile="name\string_01.txt"
\newcommand{\mylist}{\input{/home/masi/filelist.csv}}
\begin{document}
\mylist
\end{document}
파일 이름을 반복하는 최소 예includegraphics
\documentclass{article}
\usepackage{pgffor}
\usepackage{graphicx} % for importing .pdf images
\newsavebox{\imgbox}
\newcommand{\mylist}{\input{/home/masi/filelist.csv}}
\begin{document}
% http://tex.stackexchange.com/a/341553/13173
\centering
\foreach \ii in {\mylist} {
\IfFileExists{/home/masi/\ii}{
\begin{figure}
\centering
\savebox{\imgbox}{% Store image in a box
\includegraphics[height=.9\paperheight,width=\linewidth,keepaspectratio]{/home/masi/\ii}
}%
\ifdim\ht\imgbox = \paperheight
\resizebox{\linewidth}{!}{\rotatebox{90}{\includegraphics{/home/masi/\ii}}
}%
\else
\usebox{\imgbox}%
\fi
\caption{Case}
\end{figure}
}{}
} % closing brace for loop
\end{document}
TeXLive: 2016
OS: 데비안 8.5
답변1
밑줄을 허용 하므로 밑줄을 벗어날 필요가 없습니다 \includegraphics
.
주요 오류는 \mylist
쉼표로 구분된 파일 이름 목록으로 확장된다고 생각하는 것입니다. 그렇지 않습니다.
\CatchFileDef
이를 위해 을 사용할 수 있습니다 . 하지만 \mylist
.\foreach
아래 코드에서는 /home/masi/
분명한 이유로 모든 문자열을 제거했습니다. filelist.csv
필요한 출력을 얻기 위해 일반적인 예제 그래픽 파일을 의 이름으로 복사했습니다 .
\documentclass{article}
\usepackage{pgffor}
\usepackage{graphicx} % for importing .pdf images
\usepackage{catchfile}
\newsavebox{\imgbox}
\CatchFileDef{\mylist}{filelist.csv}{\endlinechar=-1 }
\begin{document}
\foreach \ii in \mylist {
\IfFileExists{\ii}{
\begin{figure}
\centering
\savebox{\imgbox}{% Store image in a box
\includegraphics[height=.9\paperheight,width=\linewidth,keepaspectratio]{\ii}
}%
\ifdim\ht\imgbox = \paperheight
\resizebox{\linewidth}{!}{\rotatebox{90}{\includegraphics{\ii}}
}%
\else
\usebox{\imgbox}%
\fi
\caption{Case}
\end{figure}
}{}
} % closing brace for loop
\end{document}
.9\paperheight
그러나 그림 높이가 항상 최대가 되어 결코 같지 않기 때문에 조건문이 무엇을 해야 하는지 알 수 없습니다 \paperheight
.
내가 사용한 파일 filelist.csv
은 귀하의 파일과 동일합니다.
IMG_20161215_081851.jpg,
IMG_20161215_090559.jpg,
IMG_20161215_091308.jpg
ls
예제를 위해 만든 디렉토리의 출력은 다음과 같습니다 .
> ls
IMG_20161215_081851.jpg filelist.csv masid.pdf
IMG_20161215_090559.jpg masid.aux masid.tex
IMG_20161215_091308.jpg masid.log
답변2
밑줄의 범주 코드는 특별한 의미를 제거하기 위해 8(수학 첨자)에서 12("기타" 범주)로 로컬로 변경될 수 있습니다.
\documentclass{article}
\usepackage{pgffor}
\newcommand{\mylist}{\input{/home/masi/filelist.csv}}
\begin{document}
\begingroup
\makeatletter
\@makeother\_%
\mylist
\endgroup
\end{document}
또는
\begingroup
\catcode`\_=12 %
\mylist
\endgroup
입력을 읽을 때 범주 코드가 할당됩니다. 파일 이름이 이미 토큰화된 경우에는 를 통해 카테고리 코드를 변경할 수 없습니다 \catcode
. 매크로에 \myfilename
파일 이름이 포함되어 있으면 다음을 통해 정리할 수 있습니다.
\@onelevel@sanitize\myfilename
또는 e-TeX를 \detokenize
사용할 수도 있습니다:
\detokenize\expandafter{\myfilename}